notsleep 1.0.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.
Files changed (93) hide show
  1. package/.env.example +117 -0
  2. package/LICENSE +21 -0
  3. package/README.md +341 -0
  4. package/dashboard/index.html +893 -0
  5. package/dist/agent.d.ts +162 -0
  6. package/dist/agent.d.ts.map +1 -0
  7. package/dist/agent.js +1064 -0
  8. package/dist/agent.js.map +1 -0
  9. package/dist/api.d.ts +10 -0
  10. package/dist/api.d.ts.map +1 -0
  11. package/dist/api.js +39 -0
  12. package/dist/api.js.map +1 -0
  13. package/dist/checkpoint.d.ts +52 -0
  14. package/dist/checkpoint.d.ts.map +1 -0
  15. package/dist/checkpoint.js +234 -0
  16. package/dist/checkpoint.js.map +1 -0
  17. package/dist/config.d.ts +24 -0
  18. package/dist/config.d.ts.map +1 -0
  19. package/dist/config.js +265 -0
  20. package/dist/config.js.map +1 -0
  21. package/dist/context.d.ts +15 -0
  22. package/dist/context.d.ts.map +1 -0
  23. package/dist/context.js +237 -0
  24. package/dist/context.js.map +1 -0
  25. package/dist/cost.d.ts +26 -0
  26. package/dist/cost.d.ts.map +1 -0
  27. package/dist/cost.js +161 -0
  28. package/dist/cost.js.map +1 -0
  29. package/dist/dashboard.d.ts +96 -0
  30. package/dist/dashboard.d.ts.map +1 -0
  31. package/dist/dashboard.js +292 -0
  32. package/dist/dashboard.js.map +1 -0
  33. package/dist/fileconfig.d.ts +129 -0
  34. package/dist/fileconfig.d.ts.map +1 -0
  35. package/dist/fileconfig.js +391 -0
  36. package/dist/fileconfig.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +882 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/init.d.ts +9 -0
  42. package/dist/init.d.ts.map +1 -0
  43. package/dist/init.js +221 -0
  44. package/dist/init.js.map +1 -0
  45. package/dist/logger.d.ts +33 -0
  46. package/dist/logger.d.ts.map +1 -0
  47. package/dist/logger.js +150 -0
  48. package/dist/logger.js.map +1 -0
  49. package/dist/modelsdev.d.ts +63 -0
  50. package/dist/modelsdev.d.ts.map +1 -0
  51. package/dist/modelsdev.js +265 -0
  52. package/dist/modelsdev.js.map +1 -0
  53. package/dist/parallel.d.ts +54 -0
  54. package/dist/parallel.d.ts.map +1 -0
  55. package/dist/parallel.js +139 -0
  56. package/dist/parallel.js.map +1 -0
  57. package/dist/pool.d.ts +17 -0
  58. package/dist/pool.d.ts.map +1 -0
  59. package/dist/pool.js +53 -0
  60. package/dist/pool.js.map +1 -0
  61. package/dist/provider.d.ts +60 -0
  62. package/dist/provider.d.ts.map +1 -0
  63. package/dist/provider.js +396 -0
  64. package/dist/provider.js.map +1 -0
  65. package/dist/registry.d.ts +60 -0
  66. package/dist/registry.d.ts.map +1 -0
  67. package/dist/registry.js +153 -0
  68. package/dist/registry.js.map +1 -0
  69. package/dist/safety.d.ts +21 -0
  70. package/dist/safety.d.ts.map +1 -0
  71. package/dist/safety.js +118 -0
  72. package/dist/safety.js.map +1 -0
  73. package/dist/schema.d.ts +9 -0
  74. package/dist/schema.d.ts.map +1 -0
  75. package/dist/schema.js +166 -0
  76. package/dist/schema.js.map +1 -0
  77. package/dist/test-dashboard.d.ts +5 -0
  78. package/dist/test-dashboard.d.ts.map +1 -0
  79. package/dist/test-dashboard.js +202 -0
  80. package/dist/test-dashboard.js.map +1 -0
  81. package/dist/tools.d.ts +27 -0
  82. package/dist/tools.d.ts.map +1 -0
  83. package/dist/tools.js +1212 -0
  84. package/dist/tools.js.map +1 -0
  85. package/dist/types.d.ts +180 -0
  86. package/dist/types.d.ts.map +1 -0
  87. package/dist/types.js +14 -0
  88. package/dist/types.js.map +1 -0
  89. package/dist/worktree.d.ts +50 -0
  90. package/dist/worktree.d.ts.map +1 -0
  91. package/dist/worktree.js +186 -0
  92. package/dist/worktree.js.map +1 -0
  93. package/package.json +67 -0
package/dist/cost.js ADDED
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // NotSleep - Token Cost Estimation
4
+ // ============================================================
5
+ //
6
+ // Estimates USD cost from token usage. Prices are per 1,000,000 tokens
7
+ // (input / output) and reflect publicly listed rates for common models.
8
+ // These are best-effort defaults — if you use a proxy or a model that is
9
+ // not listed, cost falls back to a conservative generic rate. You can
10
+ // always treat the number as an estimate, not a billing source of truth.
11
+ // ============================================================
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.contextWindowForModel = contextWindowForModel;
14
+ exports.safeContextLimit = safeContextLimit;
15
+ exports.priceForModel = priceForModel;
16
+ exports.estimateCost = estimateCost;
17
+ exports.formatUsd = formatUsd;
18
+ /**
19
+ * Price table keyed by a lowercased substring of the model name. The first
20
+ * key that the model name INCLUDES wins, so specific entries should come
21
+ * before generic ones. Prices are USD per 1,000,000 tokens.
22
+ */
23
+ const PRICE_TABLE = [
24
+ // OpenAI — specific entries MUST come before generic ones so that e.g.
25
+ // "gpt-4.1-nano" matches before "gpt-4.1" and "o3-mini" before "o3".
26
+ { match: 'gpt-4o-mini', price: { input: 0.15, output: 0.6 } },
27
+ { match: 'gpt-4o', price: { input: 2.5, output: 10 } },
28
+ { match: 'gpt-4.1-nano', price: { input: 0.1, output: 0.4 } },
29
+ { match: 'gpt-4.1-mini', price: { input: 0.4, output: 1.6 } },
30
+ { match: 'gpt-4.1', price: { input: 2, output: 8 } },
31
+ { match: 'gpt-4-turbo', price: { input: 10, output: 30 } },
32
+ { match: 'gpt-4', price: { input: 30, output: 60 } },
33
+ { match: 'o4-mini', price: { input: 1.1, output: 4.4 } },
34
+ { match: 'o3-mini', price: { input: 1.1, output: 4.4 } },
35
+ { match: 'o3-pro', price: { input: 20, output: 80 } },
36
+ { match: 'o3', price: { input: 2, output: 8 } },
37
+ { match: 'o1-mini', price: { input: 1.1, output: 4.4 } },
38
+ { match: 'o1-pro', price: { input: 150, output: 600 } },
39
+ { match: 'o1', price: { input: 15, output: 60 } },
40
+ // Anthropic — specific model versions before generic family names
41
+ { match: 'claude-sonnet-4', price: { input: 3, output: 15 } },
42
+ { match: 'claude-opus-4', price: { input: 15, output: 75 } },
43
+ { match: 'claude-3-7-sonnet', price: { input: 3, output: 15 } },
44
+ { match: 'claude-3-5-haiku', price: { input: 0.8, output: 4 } },
45
+ { match: 'claude-3-haiku', price: { input: 0.25, output: 1.25 } },
46
+ { match: 'haiku', price: { input: 0.8, output: 4 } },
47
+ { match: 'claude-3-opus', price: { input: 15, output: 75 } },
48
+ { match: 'opus', price: { input: 15, output: 75 } },
49
+ { match: 'claude-3-5-sonnet', price: { input: 3, output: 15 } },
50
+ { match: 'sonnet', price: { input: 3, output: 15 } },
51
+ // Google Gemini
52
+ { match: 'gemini-2.5-pro', price: { input: 1.25, output: 10 } },
53
+ { match: 'gemini-2.5-flash', price: { input: 0.15, output: 0.6 } },
54
+ { match: 'gemini-2.0-flash', price: { input: 0.1, output: 0.4 } },
55
+ { match: 'gemini-1.5-pro', price: { input: 1.25, output: 5 } },
56
+ { match: 'gemini-1.5-flash', price: { input: 0.075, output: 0.3 } },
57
+ { match: 'gemini', price: { input: 1.25, output: 10 } },
58
+ // DeepSeek
59
+ { match: 'deepseek-r1', price: { input: 0.55, output: 2.19 } },
60
+ { match: 'deepseek', price: { input: 0.27, output: 1.10 } },
61
+ ];
62
+ /** Conservative generic fallback when a model is not in the table. */
63
+ const FALLBACK_PRICE = { input: 3, output: 15 };
64
+ // ─── Context Window Sizes ──────────────────────────────────────────
65
+ //
66
+ // Maximum input context window (in tokens) for known models. Used to
67
+ // auto-detect a safe contextWindowLimit when the user hasn't set one
68
+ // explicitly. Same substring-match strategy as the price table.
69
+ //
70
+ // Values are the TOTAL context window the model supports. The agent
71
+ // should use a fraction of this (e.g. 90%) as its limit to leave room
72
+ // for the completion.
73
+ const CONTEXT_WINDOW_TABLE = [
74
+ // OpenAI
75
+ { match: 'gpt-4o-mini', tokens: 128_000 },
76
+ { match: 'gpt-4o', tokens: 128_000 },
77
+ { match: 'gpt-4.1-nano', tokens: 1_047_576 },
78
+ { match: 'gpt-4.1-mini', tokens: 1_047_576 },
79
+ { match: 'gpt-4.1', tokens: 1_047_576 },
80
+ { match: 'gpt-4-turbo', tokens: 128_000 },
81
+ { match: 'gpt-4-32k', tokens: 32_768 },
82
+ { match: 'gpt-4', tokens: 8_192 },
83
+ { match: 'gpt-3.5-turbo', tokens: 16_385 },
84
+ { match: 'o4-mini', tokens: 200_000 },
85
+ { match: 'o3-mini', tokens: 200_000 },
86
+ { match: 'o3-pro', tokens: 200_000 },
87
+ { match: 'o3', tokens: 200_000 },
88
+ { match: 'o1-mini', tokens: 128_000 },
89
+ { match: 'o1-pro', tokens: 200_000 },
90
+ { match: 'o1', tokens: 200_000 },
91
+ // Anthropic
92
+ { match: 'claude-sonnet-4', tokens: 200_000 },
93
+ { match: 'claude-opus-4', tokens: 200_000 },
94
+ { match: 'claude-3-7-sonnet', tokens: 200_000 },
95
+ { match: 'claude-3-5-haiku', tokens: 200_000 },
96
+ { match: 'claude-3-haiku', tokens: 200_000 },
97
+ { match: 'claude-3-opus', tokens: 200_000 },
98
+ { match: 'claude-3-5-sonnet', tokens: 200_000 },
99
+ { match: 'haiku', tokens: 200_000 },
100
+ { match: 'opus', tokens: 200_000 },
101
+ { match: 'sonnet', tokens: 200_000 },
102
+ { match: 'claude', tokens: 200_000 },
103
+ // Google Gemini
104
+ { match: 'gemini-2.5-pro', tokens: 1_048_576 },
105
+ { match: 'gemini-2.5-flash', tokens: 1_048_576 },
106
+ { match: 'gemini-2.0-flash', tokens: 1_048_576 },
107
+ { match: 'gemini-1.5-pro', tokens: 2_097_152 },
108
+ { match: 'gemini-1.5-flash', tokens: 1_048_576 },
109
+ { match: 'gemini', tokens: 1_048_576 },
110
+ // DeepSeek
111
+ { match: 'deepseek-r1', tokens: 128_000 },
112
+ { match: 'deepseek', tokens: 128_000 },
113
+ ];
114
+ /** Fallback context window when the model is unknown. Conservative. */
115
+ const FALLBACK_CONTEXT_WINDOW = 128_000;
116
+ /**
117
+ * Look up the context window size (max input tokens) for a model.
118
+ * Returns the raw model limit; callers should apply a safety margin.
119
+ */
120
+ function contextWindowForModel(model) {
121
+ const m = (model || '').toLowerCase();
122
+ for (const entry of CONTEXT_WINDOW_TABLE) {
123
+ if (m.includes(entry.match))
124
+ return entry.tokens;
125
+ }
126
+ return FALLBACK_CONTEXT_WINDOW;
127
+ }
128
+ /**
129
+ * Compute a safe context window limit for the agent, leaving room for
130
+ * the model's output. Uses 90% of the model's context window, capped
131
+ * so we never exceed what the model actually supports.
132
+ */
133
+ function safeContextLimit(model) {
134
+ const raw = contextWindowForModel(model);
135
+ // Use 90% of the window — the remaining 10% is headroom for the
136
+ // completion and any token-counting inaccuracies.
137
+ return Math.floor(raw * 0.9);
138
+ }
139
+ /** Look up the per-1M price for a model name (case-insensitive substring). */
140
+ function priceForModel(model) {
141
+ const m = (model || '').toLowerCase();
142
+ for (const entry of PRICE_TABLE) {
143
+ if (m.includes(entry.match))
144
+ return entry.price;
145
+ }
146
+ return FALLBACK_PRICE;
147
+ }
148
+ /**
149
+ * Estimate the USD cost of a single call given its token usage.
150
+ */
151
+ function estimateCost(model, promptTokens, completionTokens) {
152
+ const price = priceForModel(model);
153
+ return (promptTokens / 1_000_000) * price.input + (completionTokens / 1_000_000) * price.output;
154
+ }
155
+ /** Format a USD amount for display (4 decimals under $1, else 2). */
156
+ function formatUsd(amount) {
157
+ if (amount < 1)
158
+ return `$${amount.toFixed(4)}`;
159
+ return `$${amount.toFixed(2)}`;
160
+ }
161
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { Logger, LogEntry } from './logger';
2
+ import { QueuedTask, RunStats } from './types';
3
+ export interface DashboardState {
4
+ /** Current agent status */
5
+ status: 'idle' | 'running' | 'paused' | 'stopped' | 'completed';
6
+ /** Current task being worked on */
7
+ currentTask: string;
8
+ /** The full task queue */
9
+ taskQueue: QueuedTask[];
10
+ /** Run statistics */
11
+ stats: RunStats;
12
+ /** Provider name (registry label when a provider/model selector is used) */
13
+ provider: string;
14
+ /** Model name */
15
+ model: string;
16
+ /** Optional cheaper model used for internal calls (summarize / task-gen) */
17
+ smallModel?: string;
18
+ /** Where the context limit came from: models.dev / endpoint / static / set */
19
+ contextLimitSource?: string;
20
+ /** Whether continuous mode is on */
21
+ continuous: boolean;
22
+ /** Recent log lines (ring buffer, last 500) */
23
+ recentLogs: LogEntry[];
24
+ /** Is the agent paused? */
25
+ paused: boolean;
26
+ /** Context window usage (0-1) */
27
+ contextUsage: number;
28
+ /** Context window limit in tokens */
29
+ contextLimit: number;
30
+ /** Token usage history for sparkline (last 60 data points) */
31
+ tokenHistory: number[];
32
+ /** Max iterations configured */
33
+ maxIterations: number;
34
+ }
35
+ export type DashboardCommand = {
36
+ type: 'pause';
37
+ } | {
38
+ type: 'resume';
39
+ } | {
40
+ type: 'stop';
41
+ } | {
42
+ type: 'add_task';
43
+ description: string;
44
+ priority: 'high' | 'medium' | 'low';
45
+ } | {
46
+ type: 'delete_task';
47
+ taskId: string;
48
+ } | {
49
+ type: 'get_state';
50
+ };
51
+ export declare class DashboardServer {
52
+ private httpServer;
53
+ private wss;
54
+ private clients;
55
+ private logger;
56
+ private port;
57
+ private host;
58
+ private state;
59
+ private logBuffer;
60
+ private maxLogBuffer;
61
+ /** Callback for when a command comes from the UI */
62
+ onCommand: ((cmd: DashboardCommand) => void) | null;
63
+ /**
64
+ * @param port Port to listen on.
65
+ * @param logger Logger instance.
66
+ * @param host Interface to bind to. Defaults to '127.0.0.1' (localhost only)
67
+ * so the dashboard — which has no authentication and can queue
68
+ * tasks for an agent that runs shell commands — is never exposed
69
+ * to the network by accident. Pass '0.0.0.0' to expose it
70
+ * deliberately (only do this on a trusted network).
71
+ */
72
+ constructor(port: number, logger: Logger, host?: string);
73
+ /**
74
+ * Start listening.
75
+ */
76
+ start(): Promise<void>;
77
+ /**
78
+ * Stop the server.
79
+ */
80
+ stop(): Promise<void>;
81
+ /**
82
+ * Update the dashboard state. Called by the Agent.
83
+ */
84
+ updateState(partial: Partial<DashboardState>): void;
85
+ /**
86
+ * Push a log entry to all connected clients.
87
+ */
88
+ pushLog(entry: LogEntry): void;
89
+ private getPublicState;
90
+ private broadcast;
91
+ private sendToClient;
92
+ private handleClientMessage;
93
+ private handleHttpRequest;
94
+ private getFallbackHtml;
95
+ }
96
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAChE,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,qBAAqB;IACrB,KAAK,EAAE,QAAQ,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,2BAA2B;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1B,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAO;IAE3B,oDAAoD;IAC7C,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAElE;;;;;;;;OAQG;gBACS,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB;IA6EpE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAoBnD;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAU9B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,eAAe;CAGxB"}
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // NotSleep - Web Dashboard Server
4
+ // ============================================================
5
+ //
6
+ // Embeds an HTTP + WebSocket server inside the agent process.
7
+ // Serves a single-page dashboard and streams real-time updates.
8
+ //
9
+ // Features:
10
+ // - Live log stream (WebSocket)
11
+ // - Task queue with live status
12
+ // - Agent stats (iterations, tokens, elapsed, errors)
13
+ // - Controls: pause/resume, stop, add task, delete task
14
+ // - Context window usage indicator
15
+ // - Token usage history for sparkline
16
+ // - Cost estimation
17
+ //
18
+ // ============================================================
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.DashboardServer = void 0;
54
+ const http = __importStar(require("http"));
55
+ const path = __importStar(require("path"));
56
+ const fs = __importStar(require("fs"));
57
+ const ws_1 = require("ws");
58
+ class DashboardServer {
59
+ httpServer;
60
+ wss;
61
+ clients = new Set();
62
+ logger;
63
+ port;
64
+ host;
65
+ state;
66
+ logBuffer = [];
67
+ maxLogBuffer = 500;
68
+ /** Callback for when a command comes from the UI */
69
+ onCommand = null;
70
+ /**
71
+ * @param port Port to listen on.
72
+ * @param logger Logger instance.
73
+ * @param host Interface to bind to. Defaults to '127.0.0.1' (localhost only)
74
+ * so the dashboard — which has no authentication and can queue
75
+ * tasks for an agent that runs shell commands — is never exposed
76
+ * to the network by accident. Pass '0.0.0.0' to expose it
77
+ * deliberately (only do this on a trusted network).
78
+ */
79
+ constructor(port, logger, host = '127.0.0.1') {
80
+ this.port = port;
81
+ this.host = host;
82
+ this.logger = logger;
83
+ this.state = {
84
+ status: 'idle',
85
+ currentTask: '',
86
+ taskQueue: [],
87
+ stats: {
88
+ startTime: Date.now(),
89
+ totalIterations: 0,
90
+ totalTokensUsed: 0,
91
+ totalToolCalls: 0,
92
+ errors: 0,
93
+ contextResets: 0,
94
+ tasksCompleted: 0,
95
+ tasksFailed: 0,
96
+ totalCostUsd: 0,
97
+ },
98
+ provider: '',
99
+ model: '',
100
+ continuous: false,
101
+ recentLogs: [],
102
+ paused: false,
103
+ contextUsage: 0,
104
+ contextLimit: 120000,
105
+ tokenHistory: [],
106
+ maxIterations: 1000,
107
+ };
108
+ // Create HTTP server
109
+ this.httpServer = http.createServer((req, res) => {
110
+ this.handleHttpRequest(req, res);
111
+ });
112
+ // Create WebSocket server on top of HTTP
113
+ this.wss = new ws_1.WebSocketServer({ server: this.httpServer });
114
+ this.wss.on('connection', (ws) => {
115
+ this.clients.add(ws);
116
+ this.logger.debug(`Dashboard: client connected (${this.clients.size} total)`);
117
+ // Send current state immediately
118
+ this.sendToClient(ws, { type: 'state', data: this.getPublicState() });
119
+ // Send buffered logs
120
+ for (const log of this.logBuffer) {
121
+ this.sendToClient(ws, { type: 'log', data: log });
122
+ }
123
+ ws.on('message', (raw) => {
124
+ try {
125
+ const msg = JSON.parse(raw.toString());
126
+ this.handleClientMessage(msg);
127
+ }
128
+ catch (e) {
129
+ // ignore bad messages
130
+ }
131
+ });
132
+ ws.on('close', () => {
133
+ this.clients.delete(ws);
134
+ this.logger.debug(`Dashboard: client disconnected (${this.clients.size} total)`);
135
+ });
136
+ ws.on('error', (err) => {
137
+ this.logger.warn(`Dashboard: WebSocket client error: ${err.message}`);
138
+ this.clients.delete(ws);
139
+ try {
140
+ ws.terminate();
141
+ }
142
+ catch { /* already dead */ }
143
+ });
144
+ });
145
+ this.wss.on('error', (err) => {
146
+ this.logger.warn(`Dashboard: WebSocket server error: ${err.message}`);
147
+ });
148
+ }
149
+ /**
150
+ * Start listening.
151
+ */
152
+ async start() {
153
+ return new Promise((resolve, reject) => {
154
+ this.httpServer.listen(this.port, this.host, () => {
155
+ const displayHost = this.host === '0.0.0.0' ? 'localhost' : this.host;
156
+ this.logger.info(`Dashboard running at http://${displayHost}:${this.port}`);
157
+ if (this.host === '0.0.0.0') {
158
+ this.logger.warn('Dashboard is bound to 0.0.0.0 (network-exposed) with NO authentication. Anyone on your network can control the agent.');
159
+ }
160
+ resolve();
161
+ });
162
+ this.httpServer.on('error', reject);
163
+ });
164
+ }
165
+ /**
166
+ * Stop the server.
167
+ */
168
+ async stop() {
169
+ for (const ws of this.clients) {
170
+ ws.close();
171
+ }
172
+ this.clients.clear();
173
+ return new Promise((resolve) => {
174
+ this.httpServer.close(() => resolve());
175
+ });
176
+ }
177
+ /**
178
+ * Update the dashboard state. Called by the Agent.
179
+ */
180
+ updateState(partial) {
181
+ Object.assign(this.state, partial);
182
+ // Track token history for sparkline. Only record a new data point when the
183
+ // token total actually changed, so non-iteration updates (pause/resume,
184
+ // add/delete task, get_state) don't flood the sparkline with duplicates.
185
+ if (partial.stats) {
186
+ const last = this.state.tokenHistory[this.state.tokenHistory.length - 1];
187
+ if (partial.stats.totalTokensUsed !== last) {
188
+ this.state.tokenHistory.push(partial.stats.totalTokensUsed);
189
+ // Keep last 60 data points
190
+ if (this.state.tokenHistory.length > 60) {
191
+ this.state.tokenHistory = this.state.tokenHistory.slice(-60);
192
+ }
193
+ }
194
+ }
195
+ this.broadcast({ type: 'state', data: this.getPublicState() });
196
+ }
197
+ /**
198
+ * Push a log entry to all connected clients.
199
+ */
200
+ pushLog(entry) {
201
+ this.logBuffer.push(entry);
202
+ if (this.logBuffer.length > this.maxLogBuffer) {
203
+ this.logBuffer.shift();
204
+ }
205
+ this.broadcast({ type: 'log', data: entry });
206
+ }
207
+ // ─── Private ──────────────────────────────────────────────
208
+ getPublicState() {
209
+ return { ...this.state, recentLogs: [] }; // logs are streamed separately
210
+ }
211
+ broadcast(msg) {
212
+ const data = JSON.stringify(msg);
213
+ for (const ws of this.clients) {
214
+ if (ws.readyState === ws_1.WebSocket.OPEN) {
215
+ try {
216
+ ws.send(data);
217
+ }
218
+ catch {
219
+ // Connection died between readyState check and send; clean up.
220
+ this.clients.delete(ws);
221
+ try {
222
+ ws.terminate();
223
+ }
224
+ catch { /* already dead */ }
225
+ }
226
+ }
227
+ }
228
+ }
229
+ sendToClient(ws, msg) {
230
+ if (ws.readyState === ws_1.WebSocket.OPEN) {
231
+ try {
232
+ ws.send(JSON.stringify(msg));
233
+ }
234
+ catch {
235
+ // Connection died between readyState check and send.
236
+ this.clients.delete(ws);
237
+ try {
238
+ ws.terminate();
239
+ }
240
+ catch { /* already dead */ }
241
+ }
242
+ }
243
+ }
244
+ handleClientMessage(msg) {
245
+ if (!msg || !msg.type)
246
+ return;
247
+ const validTypes = new Set(['pause', 'resume', 'stop', 'add_task', 'delete_task', 'get_state']);
248
+ if (!validTypes.has(msg.type)) {
249
+ this.logger.debug(`Dashboard: ignoring unknown command type: ${msg.type}`);
250
+ return;
251
+ }
252
+ const cmd = msg;
253
+ this.logger.debug(`Dashboard command: ${JSON.stringify(cmd)}`);
254
+ if (this.onCommand) {
255
+ this.onCommand(cmd);
256
+ }
257
+ }
258
+ handleHttpRequest(req, res) {
259
+ const url = req.url || '/';
260
+ if (url === '/' || url === '/index.html') {
261
+ // Serve the dashboard HTML
262
+ const htmlPath = path.join(__dirname, '..', 'dashboard', 'index.html');
263
+ try {
264
+ const html = fs.readFileSync(htmlPath, 'utf-8');
265
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
266
+ res.end(html);
267
+ }
268
+ catch {
269
+ // Fallback: serve embedded HTML
270
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
271
+ res.end(this.getFallbackHtml());
272
+ }
273
+ }
274
+ else if (url === '/api/state') {
275
+ res.writeHead(200, { 'Content-Type': 'application/json' });
276
+ res.end(JSON.stringify(this.getPublicState()));
277
+ }
278
+ else if (url === '/api/logs') {
279
+ res.writeHead(200, { 'Content-Type': 'application/json' });
280
+ res.end(JSON.stringify(this.logBuffer));
281
+ }
282
+ else {
283
+ res.writeHead(404);
284
+ res.end('Not found');
285
+ }
286
+ }
287
+ getFallbackHtml() {
288
+ return `<!DOCTYPE html><html><body><h1>NotSleep Dashboard</h1><p>Dashboard HTML file not found. Run from project root.</p></body></html>`;
289
+ }
290
+ }
291
+ exports.DashboardServer = DashboardServer;
292
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"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"}