repoburg 1.3.199 → 1.3.201
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/agent-pane/backend/data.db +0 -0
- package/agent-pane/backend/data.db-shm +0 -0
- package/agent-pane/backend/data.db-wal +0 -0
- package/agent-pane/backend/dist/index.js +1425 -272
- package/agent-pane/backend/src/claude/claude-provider.test.ts +393 -3
- package/agent-pane/backend/src/claude/claude-provider.ts +53 -50
- package/agent-pane/backend/src/db/index.ts +6 -0
- package/agent-pane/backend/src/index.ts +5 -2
- package/agent-pane/backend/src/integration/threads-claude-fork.test.ts +241 -0
- package/agent-pane/backend/src/providers/index.ts +3 -1
- package/agent-pane/backend/src/repoburg/action-mapping.ts +216 -0
- package/agent-pane/backend/src/repoburg/agent-runtime-client.test.ts +271 -0
- package/agent-pane/backend/src/repoburg/agent-runtime-client.ts +262 -0
- package/agent-pane/backend/src/repoburg/backend-resolver.test.ts +271 -0
- package/agent-pane/backend/src/repoburg/backend-resolver.ts +246 -0
- package/agent-pane/backend/src/repoburg/repoburg-client.test.ts +159 -0
- package/agent-pane/backend/src/repoburg/repoburg-client.ts +181 -0
- package/agent-pane/backend/src/repoburg/repoburg-provider.test.ts +723 -0
- package/agent-pane/backend/src/repoburg/repoburg-provider.ts +422 -0
- package/agent-pane/backend/src/repoburg/turn-projector.test.ts +475 -0
- package/agent-pane/backend/src/repoburg/turn-projector.ts +537 -0
- package/agent-pane/backend/src/routes/providers.test.ts +18 -1
- package/agent-pane/backend/src/routes/providers.ts +19 -1
- package/agent-pane/backend/src/routes/sessions.ts +12 -0
- package/agent-pane/backend/src/routes/threads.ts +21 -6
- package/agent-pane/backend/src/routes/turns.test.ts +45 -1
- package/agent-pane/frontend/dist/assets/{index-Dwwhx7YN.css → index-34WaZYsW.css} +1 -1
- package/agent-pane/frontend/dist/assets/index-y7xlT86e.js +362 -0
- package/agent-pane/frontend/dist/index.html +2 -2
- package/agent-pane/frontend/src/components/CommentableText.test.tsx +196 -0
- package/agent-pane/frontend/src/components/CommentableText.tsx +109 -21
- package/agent-pane/frontend/src/components/IdeWorkspace.test.tsx +39 -0
- package/agent-pane/frontend/src/components/IdeWorkspace.tsx +28 -2
- package/agent-pane/frontend/src/components/ResizeHandle.tsx +29 -0
- package/agent-pane/frontend/src/components/panels/ThreadsPanel.tsx +35 -3
- package/agent-pane/frontend/src/constants/models.ts +37 -0
- package/agent-pane/frontend/src/hooks/useResizable.test.ts +97 -0
- package/agent-pane/frontend/src/hooks/useResizable.ts +75 -0
- package/agent-pane/frontend/src/store/store.test.ts +35 -0
- package/agent-pane/frontend/src/store/uiSlice.ts +50 -0
- package/agent-pane/frontend/src/styles/app.css +10 -1
- package/agent-pane/frontend/src/test/component-helpers.ts +2 -0
- package/agent-pane-bug-repro-no-agent-reply.png +0 -0
- package/backend/dist/src/agent-runtime/agent-runtime-event-emitter.d.ts +20 -0
- package/backend/dist/src/agent-runtime/agent-runtime-event-emitter.js +112 -0
- package/backend/dist/src/agent-runtime/agent-runtime-event-emitter.js.map +1 -0
- package/backend/dist/src/agent-runtime/agent-runtime.controller.d.ts +11 -0
- package/backend/dist/src/agent-runtime/agent-runtime.controller.js +91 -0
- package/backend/dist/src/agent-runtime/agent-runtime.controller.js.map +1 -0
- package/backend/dist/src/agent-runtime/agent-runtime.module.d.ts +2 -0
- package/backend/dist/src/agent-runtime/agent-runtime.module.js +26 -0
- package/backend/dist/src/agent-runtime/agent-runtime.module.js.map +1 -0
- package/backend/dist/src/agent-runtime/agent-runtime.types.d.ts +77 -0
- package/backend/dist/src/agent-runtime/agent-runtime.types.js +3 -0
- package/backend/dist/src/agent-runtime/agent-runtime.types.js.map +1 -0
- package/backend/dist/src/app.module.js +4 -0
- package/backend/dist/src/app.module.js.map +1 -1
- package/backend/dist/src/interactive-chat/chat.module.js +4 -0
- package/backend/dist/src/interactive-chat/chat.module.js.map +1 -1
- package/backend/dist/src/interactive-chat/chat.service.d.ts +3 -1
- package/backend/dist/src/interactive-chat/chat.service.js +33 -6
- package/backend/dist/src/interactive-chat/chat.service.js.map +1 -1
- package/backend/dist/src/llm-orchestration/hooks/frontend-notification.hook.d.ts +3 -1
- package/backend/dist/src/llm-orchestration/hooks/frontend-notification.hook.js +20 -2
- package/backend/dist/src/llm-orchestration/hooks/frontend-notification.hook.js.map +1 -1
- package/backend/dist/src/llm-orchestration/llm-orchestration.module.js +2 -0
- package/backend/dist/src/llm-orchestration/llm-orchestration.module.js.map +1 -1
- package/backend/dist/src/llm-orchestration/llm-turn-processor.service.d.ts +4 -1
- package/backend/dist/src/llm-orchestration/llm-turn-processor.service.js +35 -2
- package/backend/dist/src/llm-orchestration/llm-turn-processor.service.js.map +1 -1
- package/backend/dist/src/llm-provider/ollama-llm.provider.d.ts +1 -0
- package/backend/dist/src/llm-provider/ollama-llm.provider.js +19 -1
- package/backend/dist/src/llm-provider/ollama-llm.provider.js.map +1 -1
- package/backend/dist/src/llm-responses/llm-responses.module.js +4 -0
- package/backend/dist/src/llm-responses/llm-responses.module.js.map +1 -1
- package/backend/dist/src/llm-responses/llm-responses.service.d.ts +4 -1
- package/backend/dist/src/llm-responses/llm-responses.service.js +52 -2
- package/backend/dist/src/llm-responses/llm-responses.service.js.map +1 -1
- package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/daemon/dist/index.js +0 -0
- package/package.json +1 -1
- package/agent-pane/frontend/dist/assets/index-BYo-lnxm.js +0 -362
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { renderHook, act } from '@testing-library/react';
|
|
3
|
+
import { useResizable } from './useResizable.ts';
|
|
4
|
+
|
|
5
|
+
/** Helper: simulate a native pointer event on window with a clientX.
|
|
6
|
+
* jsdom doesn't implement PointerEvent; MouseEvent carries clientX which is
|
|
7
|
+
* all the hook reads, so we use it as a stand-in. */
|
|
8
|
+
function fireWindowPointer(type: 'pointermove' | 'pointerup', clientX: number): void {
|
|
9
|
+
window.dispatchEvent(new MouseEvent(type, { clientX, bubbles: true }));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Build a minimal React.PointerEvent-like object for onPointerDown. */
|
|
13
|
+
function pointerDown(clientX: number) {
|
|
14
|
+
return {
|
|
15
|
+
clientX,
|
|
16
|
+
preventDefault: vi.fn(),
|
|
17
|
+
stopPropagation: vi.fn(),
|
|
18
|
+
} as unknown as React.PointerEvent;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
describe('useResizable', () => {
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
document.body.classList.remove('is-resizing');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('grows left-side width when dragging right (+delta)', () => {
|
|
27
|
+
const getWidth = vi.fn(() => 240);
|
|
28
|
+
const setWidth = vi.fn();
|
|
29
|
+
const { result } = renderHook(() =>
|
|
30
|
+
useResizable({ side: 'left', minWidth: 160, maxWidth: 480, getWidth, setWidth }),
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
act(() => {
|
|
34
|
+
result.current.onPointerDown(pointerDown(100));
|
|
35
|
+
});
|
|
36
|
+
expect(result.current.dragging).toBe(true);
|
|
37
|
+
expect(document.body.classList.contains('is-resizing')).toBe(true);
|
|
38
|
+
|
|
39
|
+
act(() => fireWindowPointer('pointermove', 150)); // +50
|
|
40
|
+
expect(setWidth).toHaveBeenLastCalledWith(290);
|
|
41
|
+
|
|
42
|
+
act(() => fireWindowPointer('pointerup', 150));
|
|
43
|
+
expect(result.current.dragging).toBe(false);
|
|
44
|
+
expect(document.body.classList.contains('is-resizing')).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('shrinks right-side width when dragging right (-delta)', () => {
|
|
48
|
+
const getWidth = vi.fn(() => 300);
|
|
49
|
+
const setWidth = vi.fn();
|
|
50
|
+
const { result } = renderHook(() =>
|
|
51
|
+
useResizable({ side: 'right', minWidth: 220, maxWidth: 600, getWidth, setWidth }),
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
act(() => {
|
|
55
|
+
result.current.onPointerDown(pointerDown(200));
|
|
56
|
+
});
|
|
57
|
+
act(() => fireWindowPointer('pointermove', 260)); // +60
|
|
58
|
+
expect(setWidth).toHaveBeenLastCalledWith(240);
|
|
59
|
+
act(() => fireWindowPointer('pointerup', 260));
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('clamps to maxWidth on left side', () => {
|
|
63
|
+
const getWidth = vi.fn(() => 460);
|
|
64
|
+
const setWidth = vi.fn();
|
|
65
|
+
const { result } = renderHook(() =>
|
|
66
|
+
useResizable({ side: 'left', minWidth: 160, maxWidth: 480, getWidth, setWidth }),
|
|
67
|
+
);
|
|
68
|
+
act(() => result.current.onPointerDown(pointerDown(0)));
|
|
69
|
+
act(() => fireWindowPointer('pointermove', 1000));
|
|
70
|
+
expect(setWidth).toHaveBeenLastCalledWith(480);
|
|
71
|
+
act(() => fireWindowPointer('pointerup', 1000));
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('clamps to minWidth on right side', () => {
|
|
75
|
+
const getWidth = vi.fn(() => 230);
|
|
76
|
+
const setWidth = vi.fn();
|
|
77
|
+
const { result } = renderHook(() =>
|
|
78
|
+
useResizable({ side: 'right', minWidth: 220, maxWidth: 600, getWidth, setWidth }),
|
|
79
|
+
);
|
|
80
|
+
act(() => result.current.onPointerDown(pointerDown(0)));
|
|
81
|
+
act(() => fireWindowPointer('pointermove', 5000)); // dragging far right shrinks right panel
|
|
82
|
+
expect(setWidth).toHaveBeenLastCalledWith(220);
|
|
83
|
+
act(() => fireWindowPointer('pointerup', 5000));
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('stops listening after pointerup', () => {
|
|
87
|
+
const getWidth = vi.fn(() => 240);
|
|
88
|
+
const setWidth = vi.fn();
|
|
89
|
+
const { result } = renderHook(() =>
|
|
90
|
+
useResizable({ side: 'left', minWidth: 160, maxWidth: 480, getWidth, setWidth }),
|
|
91
|
+
);
|
|
92
|
+
act(() => result.current.onPointerDown(pointerDown(0)));
|
|
93
|
+
act(() => fireWindowPointer('pointerup', 0));
|
|
94
|
+
act(() => fireWindowPointer('pointermove', 300));
|
|
95
|
+
expect(setWidth).not.toHaveBeenCalled();
|
|
96
|
+
});
|
|
97
|
+
});
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { useCallback, useRef, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
export type ResizeSide = 'left' | 'right';
|
|
4
|
+
|
|
5
|
+
interface UseResizableOptions {
|
|
6
|
+
/** Which edge is being dragged: 'left' grows when dragging right, 'right' grows when dragging left. */
|
|
7
|
+
side: ResizeSide;
|
|
8
|
+
minWidth: number;
|
|
9
|
+
maxWidth: number;
|
|
10
|
+
/** Current width (px) — read live inside the pointer handlers via a ref. */
|
|
11
|
+
getWidth: () => number;
|
|
12
|
+
/** Commit a new width (already clamped by the hook). */
|
|
13
|
+
setWidth: (w: number) => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface UseResizableResult {
|
|
17
|
+
/** Attach to the drag handle element. */
|
|
18
|
+
onPointerDown: (e: React.PointerEvent) => void;
|
|
19
|
+
/** True while a drag for this handle is in progress. */
|
|
20
|
+
dragging: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Dependency-free horizontal resize handle. Returns a pointerdown handler to
|
|
25
|
+
* attach to a thin handle element; while dragging it updates the store width
|
|
26
|
+
* (clamped to [min, max]) on every pointermove and cleans up on pointerup.
|
|
27
|
+
*
|
|
28
|
+
* Uses window listeners so the drag continues even when the cursor leaves the
|
|
29
|
+
* handle (standard desktop-app behavior).
|
|
30
|
+
*/
|
|
31
|
+
export function useResizable({
|
|
32
|
+
side,
|
|
33
|
+
minWidth,
|
|
34
|
+
maxWidth,
|
|
35
|
+
getWidth,
|
|
36
|
+
setWidth,
|
|
37
|
+
}: UseResizableOptions): UseResizableResult {
|
|
38
|
+
const [dragging, setDragging] = useState(false);
|
|
39
|
+
// Captured at drag start; the listeners close over these refs.
|
|
40
|
+
const startX = useRef(0);
|
|
41
|
+
const startWidth = useRef(0);
|
|
42
|
+
|
|
43
|
+
const onPointerMove = useCallback(
|
|
44
|
+
(e: PointerEvent) => {
|
|
45
|
+
const delta = e.clientX - startX.current;
|
|
46
|
+
const next = side === 'left' ? startWidth.current + delta : startWidth.current - delta;
|
|
47
|
+
const clamped = Math.min(maxWidth, Math.max(minWidth, next));
|
|
48
|
+
setWidth(clamped);
|
|
49
|
+
},
|
|
50
|
+
[side, minWidth, maxWidth, setWidth],
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const onPointerUp = useCallback(() => {
|
|
54
|
+
window.removeEventListener('pointermove', onPointerMove);
|
|
55
|
+
window.removeEventListener('pointerup', onPointerUp);
|
|
56
|
+
document.body.classList.remove('is-resizing');
|
|
57
|
+
setDragging(false);
|
|
58
|
+
}, [onPointerMove]);
|
|
59
|
+
|
|
60
|
+
const onPointerDown = useCallback(
|
|
61
|
+
(e: React.PointerEvent) => {
|
|
62
|
+
e.preventDefault();
|
|
63
|
+
e.stopPropagation();
|
|
64
|
+
startX.current = e.clientX;
|
|
65
|
+
startWidth.current = getWidth();
|
|
66
|
+
setDragging(true);
|
|
67
|
+
document.body.classList.add('is-resizing');
|
|
68
|
+
window.addEventListener('pointermove', onPointerMove);
|
|
69
|
+
window.addEventListener('pointerup', onPointerUp);
|
|
70
|
+
},
|
|
71
|
+
[getWidth, onPointerMove, onPointerUp],
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
return { onPointerDown, dragging };
|
|
75
|
+
}
|
|
@@ -1226,6 +1226,41 @@ describe('simple setters', () => {
|
|
|
1226
1226
|
|
|
1227
1227
|
// === New tests: init ===
|
|
1228
1228
|
|
|
1229
|
+
describe('setSidebarWidth / setRightPanelWidth', () => {
|
|
1230
|
+
beforeEach(() => {
|
|
1231
|
+
vi.clearAllMocks();
|
|
1232
|
+
resetStore();
|
|
1233
|
+
vi.spyOn(Storage.prototype, 'setItem').mockImplementation(() => {});
|
|
1234
|
+
});
|
|
1235
|
+
|
|
1236
|
+
it('clamps sidebar width to [SIDEBAR_MIN, SIDEBAR_MAX] and persists', () => {
|
|
1237
|
+
const setItem = vi.mocked(Storage.prototype.setItem);
|
|
1238
|
+
useStore.getState().setSidebarWidth(900);
|
|
1239
|
+
expect(useStore.getState().sidebarWidth).toBe(480);
|
|
1240
|
+
expect(setItem).toHaveBeenCalledWith('agentpane:sidebar-width', '480');
|
|
1241
|
+
|
|
1242
|
+
useStore.getState().setSidebarWidth(50);
|
|
1243
|
+
expect(useStore.getState().sidebarWidth).toBe(160);
|
|
1244
|
+
expect(setItem).toHaveBeenCalledWith('agentpane:sidebar-width', '160');
|
|
1245
|
+
});
|
|
1246
|
+
|
|
1247
|
+
it('clamps right panel width to [RIGHT_PANEL_MIN, RIGHT_PANEL_MAX] and persists', () => {
|
|
1248
|
+
const setItem = vi.mocked(Storage.prototype.setItem);
|
|
1249
|
+
useStore.getState().setRightPanelWidth(9999);
|
|
1250
|
+
expect(useStore.getState().rightPanelWidth).toBe(600);
|
|
1251
|
+
expect(setItem).toHaveBeenCalledWith('agentpane:right-panel-width', '600');
|
|
1252
|
+
|
|
1253
|
+
useStore.getState().setRightPanelWidth(10);
|
|
1254
|
+
expect(useStore.getState().rightPanelWidth).toBe(220);
|
|
1255
|
+
expect(setItem).toHaveBeenCalledWith('agentpane:right-panel-width', '220');
|
|
1256
|
+
});
|
|
1257
|
+
|
|
1258
|
+
it('rounds fractional widths', () => {
|
|
1259
|
+
useStore.getState().setSidebarWidth(240.7);
|
|
1260
|
+
expect(useStore.getState().sidebarWidth).toBe(241);
|
|
1261
|
+
});
|
|
1262
|
+
});
|
|
1263
|
+
|
|
1229
1264
|
describe('init', () => {
|
|
1230
1265
|
beforeEach(() => {
|
|
1231
1266
|
vi.clearAllMocks();
|
|
@@ -3,6 +3,30 @@ import type { LogEntry, RightTab, ChangesScope, ModelInfo } from '../types/index
|
|
|
3
3
|
import type { StoreState, Toast } from './store.ts';
|
|
4
4
|
import { fetchModels } from '../api/models.ts';
|
|
5
5
|
|
|
6
|
+
/** Default + clamp bounds for resizable side panels (px). */
|
|
7
|
+
export const SIDEBAR_MIN = 160;
|
|
8
|
+
export const SIDEBAR_MAX = 480;
|
|
9
|
+
export const SIDEBAR_DEFAULT = 240;
|
|
10
|
+
export const RIGHT_PANEL_MIN = 220;
|
|
11
|
+
export const RIGHT_PANEL_MAX = 600;
|
|
12
|
+
export const RIGHT_PANEL_DEFAULT = 300;
|
|
13
|
+
|
|
14
|
+
const SIDEBAR_KEY = 'agentpane:sidebar-width';
|
|
15
|
+
const RIGHT_PANEL_KEY = 'agentpane:right-panel-width';
|
|
16
|
+
|
|
17
|
+
/** Read a stored px width, falling back to `fallback` on missing/invalid data. */
|
|
18
|
+
function readWidth(key: string, min: number, max: number, fallback: number): number {
|
|
19
|
+
try {
|
|
20
|
+
const raw = localStorage.getItem(key);
|
|
21
|
+
if (raw == null) return fallback;
|
|
22
|
+
const n = Number(raw);
|
|
23
|
+
if (!Number.isFinite(n)) return fallback;
|
|
24
|
+
return Math.min(max, Math.max(min, n));
|
|
25
|
+
} catch {
|
|
26
|
+
return fallback;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
6
30
|
export type UiSlice = {
|
|
7
31
|
activeRightTab: RightTab;
|
|
8
32
|
changesScope: ChangesScope;
|
|
@@ -17,6 +41,8 @@ export type UiSlice = {
|
|
|
17
41
|
models: ModelInfo[];
|
|
18
42
|
modelsLoading: boolean;
|
|
19
43
|
showModelSelector: boolean;
|
|
44
|
+
sidebarWidth: number;
|
|
45
|
+
rightPanelWidth: number;
|
|
20
46
|
|
|
21
47
|
setActiveTurnIndex: (idx: number) => void;
|
|
22
48
|
switchRightTab: (tab: RightTab) => void;
|
|
@@ -25,6 +51,8 @@ export type UiSlice = {
|
|
|
25
51
|
setShowCommandPalette: (show: boolean) => void;
|
|
26
52
|
setShowModelSelector: (show: boolean) => void;
|
|
27
53
|
setSelectedChangePath: (path: string | null) => void;
|
|
54
|
+
setSidebarWidth: (w: number) => void;
|
|
55
|
+
setRightPanelWidth: (w: number) => void;
|
|
28
56
|
addToast: (type: Toast['type'], message: string, undoAction?: () => void, undoLabel?: string) => void;
|
|
29
57
|
removeToast: (id: string) => void;
|
|
30
58
|
addLogEntry: (level: LogEntry['level'], message: string) => void;
|
|
@@ -45,6 +73,8 @@ export const createUiSlice: StateCreator<StoreState, [], [], UiSlice> = (set, ge
|
|
|
45
73
|
models: [],
|
|
46
74
|
modelsLoading: false,
|
|
47
75
|
showModelSelector: false,
|
|
76
|
+
sidebarWidth: readWidth(SIDEBAR_KEY, SIDEBAR_MIN, SIDEBAR_MAX, SIDEBAR_DEFAULT),
|
|
77
|
+
rightPanelWidth: readWidth(RIGHT_PANEL_KEY, RIGHT_PANEL_MIN, RIGHT_PANEL_MAX, RIGHT_PANEL_DEFAULT),
|
|
48
78
|
|
|
49
79
|
setActiveTurnIndex: (idx) => set({ activeTurnIndex: idx }),
|
|
50
80
|
switchRightTab: (tab) => set({ activeRightTab: tab }),
|
|
@@ -54,6 +84,26 @@ export const createUiSlice: StateCreator<StoreState, [], [], UiSlice> = (set, ge
|
|
|
54
84
|
setShowModelSelector: (show) => set({ showModelSelector: show }),
|
|
55
85
|
setSelectedChangePath: (path) => set({ selectedChangePath: path }),
|
|
56
86
|
|
|
87
|
+
setSidebarWidth: (w) => {
|
|
88
|
+
const clamped = Math.min(SIDEBAR_MAX, Math.max(SIDEBAR_MIN, Math.round(w)));
|
|
89
|
+
set({ sidebarWidth: clamped });
|
|
90
|
+
try {
|
|
91
|
+
localStorage.setItem(SIDEBAR_KEY, String(clamped));
|
|
92
|
+
} catch {
|
|
93
|
+
/* ignore quota / disabled storage */
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
setRightPanelWidth: (w) => {
|
|
98
|
+
const clamped = Math.min(RIGHT_PANEL_MAX, Math.max(RIGHT_PANEL_MIN, Math.round(w)));
|
|
99
|
+
set({ rightPanelWidth: clamped });
|
|
100
|
+
try {
|
|
101
|
+
localStorage.setItem(RIGHT_PANEL_KEY, String(clamped));
|
|
102
|
+
} catch {
|
|
103
|
+
/* ignore quota / disabled storage */
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
|
|
57
107
|
addToast: (type, message, undoAction, undoLabel) => {
|
|
58
108
|
const id = Math.random().toString(36).slice(2, 9);
|
|
59
109
|
set((state) => ({ toasts: [...state.toasts, { id, type, message, undoAction, undoLabel }] }));
|
|
@@ -28,7 +28,16 @@ body {
|
|
|
28
28
|
|
|
29
29
|
/* === IDE Root Layout === */
|
|
30
30
|
.ide-root { display: flex; flex-direction: column; height: 100vh; }
|
|
31
|
-
|
|
31
|
+
/* Default track sizes match uiSlice defaults; IdeWorkspace overrides via inline style
|
|
32
|
+
once hydrated (and adds two 6px resize-handle tracks: 240px 6px 1fr 6px 300px). */
|
|
33
|
+
.ide-layout { display: grid; grid-template-columns: 240px 6px 1fr 6px 300px; flex: 1; overflow: hidden; }
|
|
34
|
+
|
|
35
|
+
/* === Resize handles === */
|
|
36
|
+
.resize-handle { width: 6px; cursor: col-resize; background: transparent; flex-shrink: 0; transition: background var(--dur-fast) var(--ease); }
|
|
37
|
+
.resize-handle:hover, .resize-handle.dragging { background: var(--border-hover); }
|
|
38
|
+
/* While dragging, suppress text selection across the whole app. */
|
|
39
|
+
body.is-resizing { user-select: none; }
|
|
40
|
+
body.is-resizing * { cursor: col-resize !important; }
|
|
32
41
|
|
|
33
42
|
/* === Sidebar === */
|
|
34
43
|
.ide-sidebar { background: var(--surface-0); border-right: 1px solid var(--border); overflow-y: auto; display: flex; flex-direction: column; }
|
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AgentRuntimeContentBlock, AgentRuntimeMessage, AgentRuntimeToolResultBlock, AgentRuntimeUsage, StreamEventMessage, AgentRuntimeResultSubtype } from './agent-runtime.types';
|
|
2
|
+
export declare class AgentRuntimeEventEmitter {
|
|
3
|
+
private readonly logger;
|
|
4
|
+
private readonly clients;
|
|
5
|
+
private readonly turnStates;
|
|
6
|
+
hasSubscribers(sessionId: string): boolean;
|
|
7
|
+
subscribe(sessionId: string, listener: (message: AgentRuntimeMessage) => void, opts?: {
|
|
8
|
+
deltas?: boolean;
|
|
9
|
+
}): () => void;
|
|
10
|
+
private emit;
|
|
11
|
+
emitStreamEvent(sessionId: string, inputId: string, delta: StreamEventMessage['delta']): void;
|
|
12
|
+
emitAssistant(sessionId: string, inputId: string, content: AgentRuntimeContentBlock[], usage?: AgentRuntimeUsage): void;
|
|
13
|
+
emitToolResult(sessionId: string, inputId: string, toolResult: AgentRuntimeToolResultBlock): void;
|
|
14
|
+
emitResult(sessionId: string, partial: {
|
|
15
|
+
subtype: AgentRuntimeResultSubtype;
|
|
16
|
+
is_error: boolean;
|
|
17
|
+
result: string;
|
|
18
|
+
errors?: string[];
|
|
19
|
+
}): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var AgentRuntimeEventEmitter_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.AgentRuntimeEventEmitter = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const emptyUsage = () => ({
|
|
13
|
+
input_tokens: 0,
|
|
14
|
+
output_tokens: 0,
|
|
15
|
+
cache_read_input_tokens: 0,
|
|
16
|
+
cache_creation_input_tokens: 0,
|
|
17
|
+
});
|
|
18
|
+
let AgentRuntimeEventEmitter = AgentRuntimeEventEmitter_1 = class AgentRuntimeEventEmitter {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.logger = new common_1.Logger(AgentRuntimeEventEmitter_1.name);
|
|
21
|
+
this.clients = new Map();
|
|
22
|
+
this.turnStates = new Map();
|
|
23
|
+
}
|
|
24
|
+
hasSubscribers(sessionId) {
|
|
25
|
+
return (this.clients.get(sessionId)?.size ?? 0) > 0;
|
|
26
|
+
}
|
|
27
|
+
subscribe(sessionId, listener, opts = {}) {
|
|
28
|
+
const client = { listener, deltas: opts.deltas !== false };
|
|
29
|
+
let set = this.clients.get(sessionId);
|
|
30
|
+
if (!set) {
|
|
31
|
+
set = new Set();
|
|
32
|
+
this.clients.set(sessionId, set);
|
|
33
|
+
}
|
|
34
|
+
set.add(client);
|
|
35
|
+
this.logger.log(`SSE client subscribed to session ${sessionId} (deltas: ${client.deltas})`);
|
|
36
|
+
return () => {
|
|
37
|
+
set.delete(client);
|
|
38
|
+
if (set.size === 0)
|
|
39
|
+
this.clients.delete(sessionId);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
emit(message) {
|
|
43
|
+
const set = this.clients.get(message.sessionId);
|
|
44
|
+
if (!set || set.size === 0)
|
|
45
|
+
return;
|
|
46
|
+
for (const client of set) {
|
|
47
|
+
if (message.type === 'stream_event' && !client.deltas)
|
|
48
|
+
continue;
|
|
49
|
+
try {
|
|
50
|
+
client.listener(message);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
this.logger.warn(`SSE listener failed: ${err.message}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
emitStreamEvent(sessionId, inputId, delta) {
|
|
58
|
+
this.emit({ type: 'stream_event', sessionId, inputId, delta });
|
|
59
|
+
}
|
|
60
|
+
emitAssistant(sessionId, inputId, content, usage) {
|
|
61
|
+
const state = this.turnStates.get(sessionId) ?? {
|
|
62
|
+
rounds: 0,
|
|
63
|
+
usage: emptyUsage(),
|
|
64
|
+
};
|
|
65
|
+
state.rounds += 1;
|
|
66
|
+
if (usage) {
|
|
67
|
+
state.usage.input_tokens += usage.input_tokens ?? 0;
|
|
68
|
+
state.usage.output_tokens += usage.output_tokens ?? 0;
|
|
69
|
+
state.usage.cache_read_input_tokens += usage.cache_read_input_tokens ?? 0;
|
|
70
|
+
state.usage.cache_creation_input_tokens +=
|
|
71
|
+
usage.cache_creation_input_tokens ?? 0;
|
|
72
|
+
}
|
|
73
|
+
this.turnStates.set(sessionId, state);
|
|
74
|
+
const message = {
|
|
75
|
+
type: 'assistant',
|
|
76
|
+
sessionId,
|
|
77
|
+
inputId,
|
|
78
|
+
content,
|
|
79
|
+
...(usage ? { usage } : {}),
|
|
80
|
+
};
|
|
81
|
+
this.emit(message);
|
|
82
|
+
}
|
|
83
|
+
emitToolResult(sessionId, inputId, toolResult) {
|
|
84
|
+
const message = {
|
|
85
|
+
type: 'user',
|
|
86
|
+
sessionId,
|
|
87
|
+
inputId,
|
|
88
|
+
content: [toolResult],
|
|
89
|
+
};
|
|
90
|
+
this.emit(message);
|
|
91
|
+
}
|
|
92
|
+
emitResult(sessionId, partial) {
|
|
93
|
+
const state = this.turnStates.get(sessionId);
|
|
94
|
+
const message = {
|
|
95
|
+
type: 'result',
|
|
96
|
+
subtype: partial.subtype,
|
|
97
|
+
sessionId,
|
|
98
|
+
is_error: partial.is_error,
|
|
99
|
+
result: partial.result,
|
|
100
|
+
num_rounds: state?.rounds ?? 0,
|
|
101
|
+
...(state && state.rounds > 0 ? { usage: state.usage } : {}),
|
|
102
|
+
...(partial.errors ? { errors: partial.errors } : {}),
|
|
103
|
+
};
|
|
104
|
+
this.turnStates.delete(sessionId);
|
|
105
|
+
this.emit(message);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
exports.AgentRuntimeEventEmitter = AgentRuntimeEventEmitter;
|
|
109
|
+
exports.AgentRuntimeEventEmitter = AgentRuntimeEventEmitter = AgentRuntimeEventEmitter_1 = __decorate([
|
|
110
|
+
(0, common_1.Injectable)()
|
|
111
|
+
], AgentRuntimeEventEmitter);
|
|
112
|
+
//# sourceMappingURL=agent-runtime-event-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-runtime-event-emitter.js","sourceRoot":"","sources":["../../../src/agent-runtime/agent-runtime-event-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Repository } from 'typeorm';
|
|
2
|
+
import { Response } from 'express';
|
|
3
|
+
import { Session } from '../core-entities';
|
|
4
|
+
import { AgentRuntimeEventEmitter } from './agent-runtime-event-emitter';
|
|
5
|
+
export declare class AgentRuntimeController {
|
|
6
|
+
private readonly emitter;
|
|
7
|
+
private readonly sessionsRepository;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
constructor(emitter: AgentRuntimeEventEmitter, sessionsRepository: Repository<Session>);
|
|
10
|
+
streamMessages(sessionId: string, stream: string | undefined, res: Response): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var AgentRuntimeController_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.AgentRuntimeController = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
19
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
20
|
+
const typeorm_2 = require("typeorm");
|
|
21
|
+
const core_entities_1 = require("../core-entities");
|
|
22
|
+
const agent_runtime_event_emitter_1 = require("./agent-runtime-event-emitter");
|
|
23
|
+
const HEARTBEAT_INTERVAL_MS = 15_000;
|
|
24
|
+
let AgentRuntimeController = AgentRuntimeController_1 = class AgentRuntimeController {
|
|
25
|
+
constructor(emitter, sessionsRepository) {
|
|
26
|
+
this.emitter = emitter;
|
|
27
|
+
this.sessionsRepository = sessionsRepository;
|
|
28
|
+
this.logger = new common_1.Logger(AgentRuntimeController_1.name);
|
|
29
|
+
}
|
|
30
|
+
async streamMessages(sessionId, stream, res) {
|
|
31
|
+
const session = await this.sessionsRepository.findOne({
|
|
32
|
+
where: { id: sessionId },
|
|
33
|
+
select: ['id', 'model_id'],
|
|
34
|
+
});
|
|
35
|
+
if (!session) {
|
|
36
|
+
res.status(404).json({ message: `Session "${sessionId}" not found.` });
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
res.status(200);
|
|
40
|
+
res.setHeader('Content-Type', 'text/event-stream');
|
|
41
|
+
res.setHeader('Cache-Control', 'no-cache, no-transform');
|
|
42
|
+
res.setHeader('Connection', 'keep-alive');
|
|
43
|
+
res.setHeader('X-Accel-Buffering', 'no');
|
|
44
|
+
res.flushHeaders();
|
|
45
|
+
const write = (message) => {
|
|
46
|
+
res.write(`data: ${JSON.stringify(message)}\n\n`);
|
|
47
|
+
};
|
|
48
|
+
write({
|
|
49
|
+
type: 'system',
|
|
50
|
+
subtype: 'init',
|
|
51
|
+
sessionId,
|
|
52
|
+
modelId: session.model_id ?? null,
|
|
53
|
+
});
|
|
54
|
+
const unsubscribe = this.emitter.subscribe(sessionId, write, {
|
|
55
|
+
deltas: stream !== '0',
|
|
56
|
+
});
|
|
57
|
+
const heartbeat = setInterval(() => {
|
|
58
|
+
res.write(': ping\n\n');
|
|
59
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
60
|
+
res.on('close', () => {
|
|
61
|
+
clearInterval(heartbeat);
|
|
62
|
+
unsubscribe();
|
|
63
|
+
this.logger.log(`SSE client disconnected from session ${sessionId}`);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
exports.AgentRuntimeController = AgentRuntimeController;
|
|
68
|
+
__decorate([
|
|
69
|
+
(0, common_1.Get)('sessions/:sessionId/messages'),
|
|
70
|
+
(0, swagger_1.ApiOperation)({
|
|
71
|
+
summary: 'Agent-runtime message stream (SSE)',
|
|
72
|
+
description: 'Ordered agent-runtime messages for a session. Opens with system/init; ' +
|
|
73
|
+
'the terminal result message ends a turn. Heartbeat comments keep the ' +
|
|
74
|
+
'connection alive between messages.',
|
|
75
|
+
}),
|
|
76
|
+
(0, swagger_1.ApiParam)({ name: 'sessionId', description: 'Session UUID', format: 'uuid' }),
|
|
77
|
+
__param(0, (0, common_1.Param)('sessionId', common_1.ParseUUIDPipe)),
|
|
78
|
+
__param(1, (0, common_1.Query)('stream')),
|
|
79
|
+
__param(2, (0, common_1.Res)()),
|
|
80
|
+
__metadata("design:type", Function),
|
|
81
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
82
|
+
__metadata("design:returntype", Promise)
|
|
83
|
+
], AgentRuntimeController.prototype, "streamMessages", null);
|
|
84
|
+
exports.AgentRuntimeController = AgentRuntimeController = AgentRuntimeController_1 = __decorate([
|
|
85
|
+
(0, swagger_1.ApiTags)('agent-runtime'),
|
|
86
|
+
(0, common_1.Controller)('agent-runtime'),
|
|
87
|
+
__param(1, (0, typeorm_1.InjectRepository)(core_entities_1.Session)),
|
|
88
|
+
__metadata("design:paramtypes", [agent_runtime_event_emitter_1.AgentRuntimeEventEmitter,
|
|
89
|
+
typeorm_2.Repository])
|
|
90
|
+
], AgentRuntimeController);
|
|
91
|
+
//# sourceMappingURL=agent-runtime.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-runtime.controller.js","sourceRoot":"","sources":["../../../src/agent-runtime/agent-runtime.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,6CAAkE;AAClE,6CAAmD;AACnD,qCAAqC;AAErC,oDAA2C;AAC3C,+EAAyE;AAGzE,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAW9B,IAAM,sBAAsB,8BAA5B,MAAM,sBAAsB;IAGjC,YACmB,OAAiC,EAElD,kBAAwD;QAFvC,YAAO,GAAP,OAAO,CAA0B;QAEjC,uBAAkB,GAAlB,kBAAkB,CAAqB;QALzC,WAAM,GAAG,IAAI,eAAM,CAAC,wBAAsB,CAAC,IAAI,CAAC,CAAC;IAM/D,CAAC;IAWE,AAAN,KAAK,CAAC,cAAc,CACiB,SAAiB,EACnC,MAA0B,EACpC,GAAa;QAEpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YACpD,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACxB,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,YAAY,SAAS,cAAc,EAAE,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;QACzD,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC1C,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACzC,GAAG,CAAC,YAAY,EAAE,CAAC;QAEnB,MAAM,KAAK,GAAG,CAAC,OAAgB,EAAQ,EAAE;YACvC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC,CAAC;QAGF,KAAK,CAAC;YACJ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,MAAM;YACf,SAAS;YACT,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;SAClC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE;YAC3D,MAAM,EAAE,MAAM,KAAK,GAAG;SACvB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAE1B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,WAAW,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAjEY,wDAAsB;AAkB3B;IATL,IAAA,YAAG,EAAC,8BAA8B,CAAC;IACnC,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,oCAAoC;QAC7C,WAAW,EACT,wEAAwE;YACxE,uEAAuE;YACvE,oCAAoC;KACvC,CAAC;IACD,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAE1E,WAAA,IAAA,cAAK,EAAC,WAAW,EAAE,sBAAa,CAAC,CAAA;IACjC,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;IACf,WAAA,IAAA,YAAG,GAAE,CAAA;;;;4DA2CP;iCAhEU,sBAAsB;IAFlC,IAAA,iBAAO,EAAC,eAAe,CAAC;IACxB,IAAA,mBAAU,EAAC,eAAe,CAAC;IAMvB,WAAA,IAAA,0BAAgB,EAAC,uBAAO,CAAC,CAAA;qCADA,sDAAwB;QAEb,oBAAU;GANtC,sBAAsB,CAiElC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.AgentRuntimeModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
12
|
+
const core_entities_1 = require("../core-entities");
|
|
13
|
+
const agent_runtime_controller_1 = require("./agent-runtime.controller");
|
|
14
|
+
const agent_runtime_event_emitter_1 = require("./agent-runtime-event-emitter");
|
|
15
|
+
let AgentRuntimeModule = class AgentRuntimeModule {
|
|
16
|
+
};
|
|
17
|
+
exports.AgentRuntimeModule = AgentRuntimeModule;
|
|
18
|
+
exports.AgentRuntimeModule = AgentRuntimeModule = __decorate([
|
|
19
|
+
(0, common_1.Module)({
|
|
20
|
+
imports: [typeorm_1.TypeOrmModule.forFeature([core_entities_1.Session])],
|
|
21
|
+
controllers: [agent_runtime_controller_1.AgentRuntimeController],
|
|
22
|
+
providers: [agent_runtime_event_emitter_1.AgentRuntimeEventEmitter],
|
|
23
|
+
exports: [agent_runtime_event_emitter_1.AgentRuntimeEventEmitter],
|
|
24
|
+
})
|
|
25
|
+
], AgentRuntimeModule);
|
|
26
|
+
//# sourceMappingURL=agent-runtime.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-runtime.module.js","sourceRoot":"","sources":["../../../src/agent-runtime/agent-runtime.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,oDAA2C;AAC3C,yEAAoE;AACpE,+EAAyE;AAalE,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAAG,CAAA;AAArB,gDAAkB;6BAAlB,kBAAkB;IAN9B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,uBAAO,CAAC,CAAC,CAAC;QAC9C,WAAW,EAAE,CAAC,iDAAsB,CAAC;QACrC,SAAS,EAAE,CAAC,sDAAwB,CAAC;QACrC,OAAO,EAAE,CAAC,sDAAwB,CAAC;KACpC,CAAC;GACW,kBAAkB,CAAG"}
|