cosmios 0.1.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/dist/adapters/claude-code.d.ts +7 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +128 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex.d.ts +7 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +140 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/interface.d.ts +18 -0
- package/dist/adapters/interface.d.ts.map +1 -0
- package/dist/adapters/interface.js +2 -0
- package/dist/adapters/interface.js.map +1 -0
- package/dist/api-client.d.ts +15 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +170 -0
- package/dist/api-client.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +228 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +27 -0
- package/dist/config.js.map +1 -0
- package/dist/connection.d.ts +26 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +92 -0
- package/dist/connection.js.map +1 -0
- package/dist/heartbeat.d.ts +2 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +101 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/journal.d.ts +13 -0
- package/dist/journal.d.ts.map +1 -0
- package/dist/journal.js +47 -0
- package/dist/journal.js.map +1 -0
- package/dist/log-sanitizer.d.ts +6 -0
- package/dist/log-sanitizer.d.ts.map +1 -0
- package/dist/log-sanitizer.js +36 -0
- package/dist/log-sanitizer.js.map +1 -0
- package/dist/logger.d.ts +12 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +32 -0
- package/dist/logger.js.map +1 -0
- package/dist/poller.d.ts +8 -0
- package/dist/poller.d.ts.map +1 -0
- package/dist/poller.js +52 -0
- package/dist/poller.js.map +1 -0
- package/dist/preview-poller.d.ts +3 -0
- package/dist/preview-poller.d.ts.map +1 -0
- package/dist/preview-poller.js +499 -0
- package/dist/preview-poller.js.map +1 -0
- package/dist/rollback-poller.d.ts +2 -0
- package/dist/rollback-poller.d.ts.map +1 -0
- package/dist/rollback-poller.js +46 -0
- package/dist/rollback-poller.js.map +1 -0
- package/dist/run-handler.d.ts +16 -0
- package/dist/run-handler.d.ts.map +1 -0
- package/dist/run-handler.js +159 -0
- package/dist/run-handler.js.map +1 -0
- package/dist/snapshot.d.ts +3 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +96 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/types.d.ts +37 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { hostname, platform } from 'node:os';
|
|
2
|
+
import { loadConfig, saveConfig } from './config.js';
|
|
3
|
+
import { connectRunner } from './api-client.js';
|
|
4
|
+
import { startHeartbeat } from './heartbeat.js';
|
|
5
|
+
import { RunnerConnection } from './connection.js';
|
|
6
|
+
import { handleRunDispatch } from './run-handler.js';
|
|
7
|
+
import { startRunPoller } from './poller.js';
|
|
8
|
+
import { startRollbackPoller } from './rollback-poller.js';
|
|
9
|
+
import { startPreviewPoller } from './preview-poller.js';
|
|
10
|
+
import { ClaudeCodeAdapter } from './adapters/claude-code.js';
|
|
11
|
+
import { CodexAdapter } from './adapters/codex.js';
|
|
12
|
+
import { createSnapshot } from './snapshot.js';
|
|
13
|
+
import { log } from './logger.js';
|
|
14
|
+
export { log, createLogger, setLogLevel } from './logger.js';
|
|
15
|
+
export { loadConfig, saveConfig, getConfigPath, getConfigDir } from './config.js';
|
|
16
|
+
export { connectRunner, sendHeartbeat, updateRunStatus, appendRunEvent } from './api-client.js';
|
|
17
|
+
export { ClaudeCodeAdapter } from './adapters/claude-code.js';
|
|
18
|
+
export { CodexAdapter } from './adapters/codex.js';
|
|
19
|
+
export class CosmiosRunner {
|
|
20
|
+
config;
|
|
21
|
+
connection = null;
|
|
22
|
+
stopHeartbeat = null;
|
|
23
|
+
messageHandlers = new Map();
|
|
24
|
+
statusHandlers = [];
|
|
25
|
+
executor = {
|
|
26
|
+
adapter: new ClaudeCodeAdapter(),
|
|
27
|
+
adapters: {
|
|
28
|
+
'claude-code': new ClaudeCodeAdapter(),
|
|
29
|
+
'codex': new CodexAdapter()
|
|
30
|
+
},
|
|
31
|
+
snapshot: createSnapshot
|
|
32
|
+
};
|
|
33
|
+
stopPoller = null;
|
|
34
|
+
stopRollbackPoller = null;
|
|
35
|
+
stopPreviewPoller = null;
|
|
36
|
+
constructor(config) {
|
|
37
|
+
this.config = config;
|
|
38
|
+
}
|
|
39
|
+
static fromConfig() {
|
|
40
|
+
const config = loadConfig();
|
|
41
|
+
if (!config)
|
|
42
|
+
throw new Error('runner_not_registered');
|
|
43
|
+
return new CosmiosRunner(config);
|
|
44
|
+
}
|
|
45
|
+
async start() {
|
|
46
|
+
// Connect to server: mark online + get fresh supabase creds
|
|
47
|
+
const connectInfo = await connectRunner(this.config.server_url, this.config.api_key, {
|
|
48
|
+
hostname: hostname(),
|
|
49
|
+
os: platform()
|
|
50
|
+
});
|
|
51
|
+
this.config = {
|
|
52
|
+
...this.config,
|
|
53
|
+
runner_id: connectInfo.runner_id,
|
|
54
|
+
supabase_url: connectInfo.supabase_url,
|
|
55
|
+
supabase_anon_key: connectInfo.supabase_anon_key
|
|
56
|
+
};
|
|
57
|
+
// Persist updated config (supabase creds may rotate)
|
|
58
|
+
saveConfig(this.config);
|
|
59
|
+
// Wire built-in run:dispatch handler
|
|
60
|
+
this.messageHandlers.set('run:dispatch', (payload) => {
|
|
61
|
+
handleRunDispatch(this.config.server_url, this.config.api_key, '', // userId resolved server-side via api_key
|
|
62
|
+
payload, this.executor).catch((err) => log.error(`run handler error: ${err.message}`));
|
|
63
|
+
});
|
|
64
|
+
// Open Supabase Realtime channel runner:{runner_id}
|
|
65
|
+
this.connection = new RunnerConnection({
|
|
66
|
+
config: this.config,
|
|
67
|
+
onStatusChange: (status) => {
|
|
68
|
+
for (const handler of this.statusHandlers)
|
|
69
|
+
handler(status);
|
|
70
|
+
},
|
|
71
|
+
onMessage: (event, payload) => {
|
|
72
|
+
const handler = this.messageHandlers.get(event);
|
|
73
|
+
handler?.(payload);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
this.connection.connect();
|
|
77
|
+
// Start heartbeat loop (every 30s)
|
|
78
|
+
this.stopHeartbeat = startHeartbeat(this.config.server_url, this.config.api_key, (err) => log.error(`heartbeat error: ${err.message}`));
|
|
79
|
+
// Poll for pending runs every 3s
|
|
80
|
+
this.stopPoller = startRunPoller(this.config.server_url, this.config.api_key, (run, policy) => {
|
|
81
|
+
handleRunDispatch(this.config.server_url, this.config.api_key, '', run, this.executor, policy).catch((err) => log.error(`run error: ${err.message}`));
|
|
82
|
+
}, (err) => log.error(`poller error: ${err.message}`));
|
|
83
|
+
// Poll for rollback requests every 5s
|
|
84
|
+
this.stopRollbackPoller = startRollbackPoller(this.config.server_url, this.config.api_key, (err) => log.error(`rollback poller error: ${err.message}`));
|
|
85
|
+
// Poll for preview requests every 3s
|
|
86
|
+
this.stopPreviewPoller = startPreviewPoller(this.config.server_url, this.config.api_key, (err) => log.error(`preview poller error: ${err.message}`));
|
|
87
|
+
// Ensure clean shutdown on Ctrl+C / kill / crash — kill all child
|
|
88
|
+
// process trees so dev servers, tunnels, etc. don't become zombies.
|
|
89
|
+
const gracefulStop = () => { this.stop(); process.exit(0); };
|
|
90
|
+
process.on('SIGINT', gracefulStop);
|
|
91
|
+
process.on('SIGTERM', gracefulStop);
|
|
92
|
+
process.on('beforeExit', () => this.stop());
|
|
93
|
+
log.info(`runner started — id: ${this.config.runner_id}`);
|
|
94
|
+
}
|
|
95
|
+
setExecutor(executor) {
|
|
96
|
+
this.executor = executor;
|
|
97
|
+
}
|
|
98
|
+
on(event, handler) {
|
|
99
|
+
this.messageHandlers.set(event, handler);
|
|
100
|
+
}
|
|
101
|
+
onStatusChange(handler) {
|
|
102
|
+
this.statusHandlers.push(handler);
|
|
103
|
+
}
|
|
104
|
+
stop() {
|
|
105
|
+
this.stopHeartbeat?.();
|
|
106
|
+
this.stopPoller?.();
|
|
107
|
+
this.stopRollbackPoller?.();
|
|
108
|
+
this.stopPreviewPoller?.();
|
|
109
|
+
this.connection?.disconnect();
|
|
110
|
+
log.info('runner stopped');
|
|
111
|
+
}
|
|
112
|
+
getRunnerId() {
|
|
113
|
+
return this.config.runner_id;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAoB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGlC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEhG,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMnD,MAAM,OAAO,aAAa;IAChB,MAAM,CAAe;IACrB,UAAU,GAA4B,IAAI,CAAC;IAC3C,aAAa,GAAwB,IAAI,CAAC;IAC1C,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;IACpD,cAAc,GAA8C,EAAE,CAAC;IAC/D,QAAQ,GAAgB;QAC9B,OAAO,EAAE,IAAI,iBAAiB,EAAE;QAChC,QAAQ,EAAE;YACR,aAAa,EAAE,IAAI,iBAAiB,EAAE;YACtC,OAAO,EAAE,IAAI,YAAY,EAAE;SAC5B;QACD,QAAQ,EAAE,cAAc;KACzB,CAAC;IACM,UAAU,GAAwB,IAAI,CAAC;IACvC,kBAAkB,GAAwB,IAAI,CAAC;IAC/C,iBAAiB,GAAwB,IAAI,CAAC;IAEtD,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,UAAU;QACf,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,4DAA4D;QAC5D,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnF,QAAQ,EAAE,QAAQ,EAAE;YACpB,EAAE,EAAE,QAAQ,EAAE;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,IAAI,CAAC,MAAM;YACd,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;SACjD,CAAC;QAEF,qDAAqD;QACrD,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExB,qCAAqC;QACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;YACnD,iBAAiB,CACf,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,EAAE,EAAE,0CAA0C;YAC9C,OAAO,EACP,IAAI,CAAC,QAAQ,CACd,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,oDAAoD;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAC;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE;gBACzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc;oBAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC;YACD,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAChD,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAE1B,mCAAmC;QACnC,IAAI,CAAC,aAAa,GAAG,cAAc,CACjC,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CACtD,CAAC;QAEF,iCAAiC;QACjC,IAAI,CAAC,UAAU,GAAG,cAAc,CAC9B,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACd,iBAAiB,CACf,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,EAAE,EACF,GAAG,EACH,IAAI,CAAC,QAAQ,EACb,MAAM,CACP,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CACnD,CAAC;QAEF,sCAAsC;QACtC,IAAI,CAAC,kBAAkB,GAAG,mBAAmB,CAC3C,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAC5D,CAAC;QAEF,qCAAqC;QACrC,IAAI,CAAC,iBAAiB,GAAG,kBAAkB,CACzC,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAC3D,CAAC;QAEF,kEAAkE;QAClE,oEAAoE;QACpE,MAAM,YAAY,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACnC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACpC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5C,GAAG,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,WAAW,CAAC,QAAqB;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,EAAE,CAAC,KAAa,EAAE,OAAuB;QACvC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc,CAAC,OAA2C;QACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,IAAI;QACF,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QACpB,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type JournalEntryType = 'run_status' | 'run_event';
|
|
2
|
+
export interface JournalEntry {
|
|
3
|
+
id: string;
|
|
4
|
+
type: JournalEntryType;
|
|
5
|
+
run_id: string;
|
|
6
|
+
payload: Record<string, unknown>;
|
|
7
|
+
created_at: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function writeJournal(type: JournalEntryType, run_id: string, payload: Record<string, unknown>): void;
|
|
10
|
+
export declare function readJournal(): JournalEntry[];
|
|
11
|
+
export declare function clearJournal(): void;
|
|
12
|
+
export declare function journalSize(): number;
|
|
13
|
+
//# sourceMappingURL=journal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,WAAW,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAeN;AAED,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAU5C;AAED,wBAAgB,YAAY,IAAI,IAAI,CAMnC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC"}
|
package/dist/journal.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { readFileSync, appendFileSync, mkdirSync, existsSync, unlinkSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
const JOURNAL_PATH = join(homedir(), '.cosmios', 'journal.jsonl');
|
|
6
|
+
export function writeJournal(type, run_id, payload) {
|
|
7
|
+
const entry = {
|
|
8
|
+
id: randomUUID(),
|
|
9
|
+
type,
|
|
10
|
+
run_id,
|
|
11
|
+
payload,
|
|
12
|
+
created_at: new Date().toISOString()
|
|
13
|
+
};
|
|
14
|
+
try {
|
|
15
|
+
mkdirSync(join(homedir(), '.cosmios'), { recursive: true });
|
|
16
|
+
appendFileSync(JOURNAL_PATH, JSON.stringify(entry) + '\n', 'utf8');
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Journal write failure is non-fatal
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function readJournal() {
|
|
23
|
+
if (!existsSync(JOURNAL_PATH))
|
|
24
|
+
return [];
|
|
25
|
+
try {
|
|
26
|
+
return readFileSync(JOURNAL_PATH, 'utf8')
|
|
27
|
+
.split('\n')
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.map(line => JSON.parse(line));
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function clearJournal() {
|
|
36
|
+
try {
|
|
37
|
+
if (existsSync(JOURNAL_PATH))
|
|
38
|
+
unlinkSync(JOURNAL_PATH);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// non-fatal
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function journalSize() {
|
|
45
|
+
return readJournal().length;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiB,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAYlE,MAAM,UAAU,YAAY,CAC1B,IAAsB,EACtB,MAAc,EACd,OAAgC;IAEhC,MAAM,KAAK,GAAiB;QAC1B,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI;QACJ,MAAM;QACN,OAAO;QACP,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC;IAEF,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;aACtC,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,YAAY,CAAC;YAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-sanitizer.d.ts","sourceRoot":"","sources":["../src/log-sanitizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redact secrets from log lines before they leave the machine.
|
|
3
|
+
* Patterns cover common API keys, tokens, passwords, and env vars.
|
|
4
|
+
*/
|
|
5
|
+
const SECRET_PATTERNS = [
|
|
6
|
+
// Generic API keys (sk_live_, sk_test_, pk_live_, pk_test_)
|
|
7
|
+
{ pattern: /\b(sk_live_|sk_test_|pk_live_|pk_test_)[A-Za-z0-9]{10,}/g, replacement: '$1[REDACTED]' },
|
|
8
|
+
// Anthropic API keys
|
|
9
|
+
{ pattern: /\bsk-ant-[A-Za-z0-9_-]{20,}/g, replacement: 'sk-ant-[REDACTED]' },
|
|
10
|
+
// OpenAI API keys
|
|
11
|
+
{ pattern: /\bsk-[A-Za-z0-9]{20,}/g, replacement: 'sk-[REDACTED]' },
|
|
12
|
+
// AWS keys
|
|
13
|
+
{ pattern: /\b(AKIA|ASIA)[A-Z0-9]{16}\b/g, replacement: '$1[REDACTED]' },
|
|
14
|
+
// AWS secret keys (40 char base64-ish)
|
|
15
|
+
{ pattern: /\b[A-Za-z0-9/+=]{40}\b(?=.*(?:aws|secret|key))/gi, replacement: '[REDACTED]' },
|
|
16
|
+
// Bearer tokens
|
|
17
|
+
{ pattern: /(Bearer\s+)[A-Za-z0-9._\-]{20,}/gi, replacement: '$1[REDACTED]' },
|
|
18
|
+
// COSMIOS runner keys
|
|
19
|
+
{ pattern: /\brs_live_[a-f0-9]{20,}/g, replacement: 'rs_live_[REDACTED]' },
|
|
20
|
+
// Generic tokens/secrets in env-like assignments (KEY=value, SECRET=value)
|
|
21
|
+
{ pattern: /\b((?:API_KEY|SECRET|TOKEN|PASSWORD|PRIVATE_KEY|ACCESS_KEY)\s*[=:]\s*)\S{8,}/gi, replacement: '$1[REDACTED]' },
|
|
22
|
+
// GitHub tokens
|
|
23
|
+
{ pattern: /\b(ghp_|gho_|ghu_|ghs_|ghr_)[A-Za-z0-9]{20,}/g, replacement: '$1[REDACTED]' },
|
|
24
|
+
// Supabase keys (eyJ... JWT format)
|
|
25
|
+
{ pattern: /\beyJ[A-Za-z0-9_-]{50,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g, replacement: '[REDACTED_JWT]' },
|
|
26
|
+
];
|
|
27
|
+
export function sanitizeLogLine(line) {
|
|
28
|
+
let result = line;
|
|
29
|
+
for (const { pattern, replacement } of SECRET_PATTERNS) {
|
|
30
|
+
// Reset lastIndex for global regexes
|
|
31
|
+
pattern.lastIndex = 0;
|
|
32
|
+
result = result.replace(pattern, replacement);
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=log-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-sanitizer.js","sourceRoot":"","sources":["../src/log-sanitizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,eAAe,GAAoD;IACvE,4DAA4D;IAC5D,EAAE,OAAO,EAAE,0DAA0D,EAAE,WAAW,EAAE,cAAc,EAAE;IACpG,qBAAqB;IACrB,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,mBAAmB,EAAE;IAC7E,kBAAkB;IAClB,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,eAAe,EAAE;IACnE,WAAW;IACX,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,cAAc,EAAE;IACxE,uCAAuC;IACvC,EAAE,OAAO,EAAE,kDAAkD,EAAE,WAAW,EAAE,YAAY,EAAE;IAC1F,gBAAgB;IAChB,EAAE,OAAO,EAAE,mCAAmC,EAAE,WAAW,EAAE,cAAc,EAAE;IAC7E,sBAAsB;IACtB,EAAE,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,oBAAoB,EAAE;IAC1E,2EAA2E;IAC3E,EAAE,OAAO,EAAE,gFAAgF,EAAE,WAAW,EAAE,cAAc,EAAE;IAC1H,gBAAgB;IAChB,EAAE,OAAO,EAAE,+CAA+C,EAAE,WAAW,EAAE,cAAc,EAAE;IACzF,oCAAoC;IACpC,EAAE,OAAO,EAAE,0DAA0D,EAAE,WAAW,EAAE,gBAAgB,EAAE;CACvG,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC;QACvD,qCAAqC;QACrC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
3
|
+
export interface Logger {
|
|
4
|
+
debug(msg: string, extra?: Record<string, unknown>): void;
|
|
5
|
+
info(msg: string, extra?: Record<string, unknown>): void;
|
|
6
|
+
warn(msg: string, extra?: Record<string, unknown>): void;
|
|
7
|
+
error(msg: string, extra?: Record<string, unknown>): void;
|
|
8
|
+
}
|
|
9
|
+
export declare function createLogger(tag: string): Logger;
|
|
10
|
+
export declare const log: Logger;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAMpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAaD,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC3D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOhD;AAED,eAAO,MAAM,GAAG,QAA0B,CAAC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const LEVEL_RANK = { debug: 0, info: 1, warn: 2, error: 3 };
|
|
2
|
+
let minLevel = 'info';
|
|
3
|
+
export function setLogLevel(level) {
|
|
4
|
+
minLevel = level;
|
|
5
|
+
}
|
|
6
|
+
function emit(level, tag, message, extra) {
|
|
7
|
+
if (LEVEL_RANK[level] < LEVEL_RANK[minLevel])
|
|
8
|
+
return;
|
|
9
|
+
const prefix = `[${tag}]`;
|
|
10
|
+
const line = extra ? `${prefix} ${message} ${JSON.stringify(extra)}` : `${prefix} ${message}`;
|
|
11
|
+
switch (level) {
|
|
12
|
+
case 'error':
|
|
13
|
+
console.error(line);
|
|
14
|
+
break;
|
|
15
|
+
case 'warn':
|
|
16
|
+
console.warn(line);
|
|
17
|
+
break;
|
|
18
|
+
default:
|
|
19
|
+
console.log(line);
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function createLogger(tag) {
|
|
24
|
+
return {
|
|
25
|
+
debug: (msg, extra) => emit('debug', tag, msg, extra),
|
|
26
|
+
info: (msg, extra) => emit('info', tag, msg, extra),
|
|
27
|
+
warn: (msg, extra) => emit('warn', tag, msg, extra),
|
|
28
|
+
error: (msg, extra) => emit('error', tag, msg, extra),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export const log = createLogger('cosmios');
|
|
32
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAEtF,IAAI,QAAQ,GAAa,MAAM,CAAC;AAEhC,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,QAAQ,GAAG,KAAK,CAAC;AACnB,CAAC;AAED,SAAS,IAAI,CAAC,KAAe,EAAE,GAAW,EAAE,OAAe,EAAE,KAA+B;IAC1F,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;IAC9F,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM;QACzC,KAAK,MAAM;YAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM;QACxC;YAAc,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM;IACzC,CAAC;AACH,CAAC;AASD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;QACrD,IAAI,EAAG,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;QACpD,IAAI,EAAG,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;QACpD,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/poller.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RunDispatch } from './run-handler.js';
|
|
2
|
+
import type { RunPolicy } from './types.js';
|
|
3
|
+
export interface PendingRunResult {
|
|
4
|
+
run: RunDispatch;
|
|
5
|
+
policy: RunPolicy | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function startRunPoller(serverUrl: string, apiKey: string, onDispatch: (run: RunDispatch, policy: RunPolicy | null) => void, onError?: (err: Error) => void): () => void;
|
|
8
|
+
//# sourceMappingURL=poller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../src/poller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAM5C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B;AA6CD,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,EAChE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAC7B,MAAM,IAAI,CAeZ"}
|
package/dist/poller.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { verifyCommandSignature } from '@cosmios/shared';
|
|
2
|
+
import { log } from './logger.js';
|
|
3
|
+
const POLL_INTERVAL_MS = 3_000;
|
|
4
|
+
async function fetchPendingRun(serverUrl, apiKey) {
|
|
5
|
+
const res = await fetch(`${serverUrl}/api/runs/pending`, {
|
|
6
|
+
headers: { authorization: `Bearer ${apiKey}` }
|
|
7
|
+
});
|
|
8
|
+
if (!res.ok)
|
|
9
|
+
return null;
|
|
10
|
+
const body = await res.json().catch(() => null);
|
|
11
|
+
if (!body?.run)
|
|
12
|
+
return null;
|
|
13
|
+
const r = body.run;
|
|
14
|
+
if (!r.run_id || !r.workspace)
|
|
15
|
+
return null;
|
|
16
|
+
// Verify command signature if present (defense-in-depth)
|
|
17
|
+
if (body.signature) {
|
|
18
|
+
const valid = verifyCommandSignature({ run_id: r.run_id, workspace: r.workspace, agent: r.agent ?? 'claude-code', command: r.command ?? '' }, body.signature, apiKey);
|
|
19
|
+
if (!valid) {
|
|
20
|
+
log.error(`Signature verification failed for run ${r.run_id} — skipping`);
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const policy = body.policy ?? null;
|
|
25
|
+
return {
|
|
26
|
+
run: {
|
|
27
|
+
run_id: r.run_id,
|
|
28
|
+
workspace: r.workspace,
|
|
29
|
+
agent: r.agent ?? 'claude-code',
|
|
30
|
+
command: r.command ?? '',
|
|
31
|
+
agent_options: body.run.agent_options
|
|
32
|
+
},
|
|
33
|
+
policy
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function startRunPoller(serverUrl, apiKey, onDispatch, onError) {
|
|
37
|
+
const interval = setInterval(async () => {
|
|
38
|
+
try {
|
|
39
|
+
const result = await fetchPendingRun(serverUrl, apiKey);
|
|
40
|
+
if (result)
|
|
41
|
+
onDispatch(result.run, result.policy);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
onError?.(err instanceof Error ? err : new Error(String(err)));
|
|
45
|
+
}
|
|
46
|
+
}, POLL_INTERVAL_MS);
|
|
47
|
+
if (typeof interval === 'object' && 'unref' in interval) {
|
|
48
|
+
interval.unref();
|
|
49
|
+
}
|
|
50
|
+
return () => clearInterval(interval);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=poller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../src/poller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAO/B,KAAK,UAAU,eAAe,CAC5B,SAAiB,EACjB,MAAc;IAEd,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,mBAAmB,EAAE;QACvD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;KAC/C,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,GAAG;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAA6B,CAAC;IAC7C,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE3C,yDAAyD;IACzD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,sBAAsB,CAClC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,EACvG,IAAI,CAAC,SAAmB,EACxB,MAAM,CACP,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAA0B,IAAI,IAAI,CAAC;IAEvD,OAAO;QACL,GAAG,EAAE;YACH,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,aAAa;YAC/B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;YACxB,aAAa,EAAG,IAAI,CAAC,GAA+B,CAAC,aAAoD;SAC1G;QACD,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,MAAc,EACd,UAAgE,EAChE,OAA8B;IAE9B,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,MAAM;gBAAE,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAErB,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;QACvD,QAA2B,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-poller.d.ts","sourceRoot":"","sources":["../src/preview-poller.ts"],"names":[],"mappings":"AA2gBA,wBAAgB,eAAe,IAAI,IAAI,CAMtC;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAC7B,MAAM,IAAI,CA+BZ"}
|