@roackb2/heddle 0.0.15 → 0.0.16

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 (68) hide show
  1. package/README.md +31 -3
  2. package/dist/src/cli/chat/App.js +1 -1
  3. package/dist/src/cli/chat/App.js.map +1 -1
  4. package/dist/src/cli/chat/hooks/useChatSessions.d.ts +2 -2
  5. package/dist/src/cli/chat/hooks/useChatSessions.d.ts.map +1 -1
  6. package/dist/src/cli/chat/hooks/useChatSessions.js +4 -4
  7. package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
  8. package/dist/src/cli/chat/state/approval-rules.js +66 -5
  9. package/dist/src/cli/chat/state/approval-rules.js.map +1 -1
  10. package/dist/src/cli/chat/state/storage.d.ts +1 -1
  11. package/dist/src/cli/chat/state/storage.d.ts.map +1 -1
  12. package/dist/src/cli/chat/state/storage.js +1 -1
  13. package/dist/src/cli/chat/state/storage.js.map +1 -1
  14. package/dist/src/cli/chat/utils/runtime.d.ts +1 -1
  15. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  16. package/dist/src/cli/chat/utils/runtime.js +1 -1
  17. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  18. package/dist/src/cli/daemon.js +2 -2
  19. package/dist/src/cli/heartbeat.d.ts.map +1 -1
  20. package/dist/src/cli/heartbeat.js +136 -46
  21. package/dist/src/cli/heartbeat.js.map +1 -1
  22. package/dist/src/cli/main.js +107 -100
  23. package/dist/src/cli/main.js.map +1 -1
  24. package/dist/src/cli/session.d.ts +11 -0
  25. package/dist/src/cli/session.d.ts.map +1 -0
  26. package/dist/src/cli/session.js +30 -0
  27. package/dist/src/cli/session.js.map +1 -0
  28. package/dist/src/core/agent/mutation-tracking.js +13 -3
  29. package/dist/src/core/agent/mutation-tracking.js.map +1 -1
  30. package/dist/src/core/chat/session-submit.d.ts +9 -1
  31. package/dist/src/core/chat/session-submit.d.ts.map +1 -1
  32. package/dist/src/core/chat/session-submit.js +5 -2
  33. package/dist/src/core/chat/session-submit.js.map +1 -1
  34. package/dist/src/core/chat/storage.d.ts +20 -1
  35. package/dist/src/core/chat/storage.d.ts.map +1 -1
  36. package/dist/src/core/chat/storage.js +260 -23
  37. package/dist/src/core/chat/storage.js.map +1 -1
  38. package/dist/src/server/app.d.ts.map +1 -1
  39. package/dist/src/server/app.js +40 -0
  40. package/dist/src/server/app.js.map +1 -1
  41. package/dist/src/server/features/control-plane/router.d.ts +80 -0
  42. package/dist/src/server/features/control-plane/router.d.ts.map +1 -1
  43. package/dist/src/server/features/control-plane/router.js +79 -5
  44. package/dist/src/server/features/control-plane/router.js.map +1 -1
  45. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts +32 -7
  46. package/dist/src/server/features/control-plane/services/chat-sessions.d.ts.map +1 -1
  47. package/dist/src/server/features/control-plane/services/chat-sessions.js +191 -26
  48. package/dist/src/server/features/control-plane/services/chat-sessions.js.map +1 -1
  49. package/dist/src/server/features/control-plane/services/control-plane-state.js +1 -1
  50. package/dist/src/server/features/control-plane/services/control-plane-state.js.map +1 -1
  51. package/dist/src/server/features/control-plane/services/workspace-files.d.ts +9 -0
  52. package/dist/src/server/features/control-plane/services/workspace-files.d.ts.map +1 -0
  53. package/dist/src/server/features/control-plane/services/workspace-files.js +71 -0
  54. package/dist/src/server/features/control-plane/services/workspace-files.js.map +1 -0
  55. package/dist/src/server/features/control-plane/types.d.ts +13 -0
  56. package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
  57. package/dist/src/server/index.d.ts +2 -1
  58. package/dist/src/server/index.d.ts.map +1 -1
  59. package/dist/src/server/index.js +2 -1
  60. package/dist/src/server/index.js.map +1 -1
  61. package/dist/src/server/router.d.ts +80 -0
  62. package/dist/src/server/router.d.ts.map +1 -1
  63. package/dist/src/web/assets/index-C_kziU0x.css +1 -0
  64. package/dist/src/web/assets/index-DecqlZlx.js +12 -0
  65. package/dist/src/web/index.html +2 -2
  66. package/package.json +2 -1
  67. package/dist/src/web/assets/index-DH9iWMSO.js +0 -9
  68. package/dist/src/web/assets/index-DyCJ7Ml4.css +0 -1
@@ -9,7 +9,7 @@ export async function loadControlPlaneState(context) {
9
9
  return {
10
10
  workspaceRoot: context.workspaceRoot,
11
11
  stateRoot: context.stateRoot,
12
- sessions: readChatSessionViews(resolve(context.stateRoot, 'chat-sessions.json')),
12
+ sessions: readChatSessionViews(resolve(context.stateRoot, 'chat-sessions.catalog.json')),
13
13
  heartbeat: {
14
14
  tasks,
15
15
  runs,
@@ -1 +1 @@
1
- {"version":3,"file":"control-plane-state.js","sourceRoot":"","sources":["../../../../../../src/server/features/control-plane/services/control-plane-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAE/F,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAA4B;IACtE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtC,8BAA8B,CAAC,OAAO,CAAC,SAAS,CAAC;QACjD,6BAA6B,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;KAChE,CAAC,CAAC;IAEH,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAChF,SAAS,EAAE;YACT,KAAK;YACL,IAAI;SACL;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"control-plane-state.js","sourceRoot":"","sources":["../../../../../../src/server/features/control-plane/services/control-plane-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAE/F,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAA4B;IACtE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtC,8BAA8B,CAAC,OAAO,CAAC,SAAS,CAAC;QACjD,6BAA6B,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;KAChE,CAAC,CAAC;IAEH,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;QACxF,SAAS,EAAE;YACT,KAAK;YACL,IAAI;SACL;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type WorkspaceFileSuggestion = {
2
+ path: string;
3
+ };
4
+ export declare function searchWorkspaceFiles(args: {
5
+ workspaceRoot: string;
6
+ query: string;
7
+ limit?: number;
8
+ }): Promise<WorkspaceFileSuggestion[]>;
9
+ //# sourceMappingURL=workspace-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-files.d.ts","sourceRoot":"","sources":["../../../../../../src/server/features/control-plane/services/workspace-files.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAWF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CA8CrC"}
@@ -0,0 +1,71 @@
1
+ import { readdir } from 'node:fs/promises';
2
+ import { join, relative } from 'node:path';
3
+ const IGNORED_DIRS = new Set(['.git', '.heddle', 'coverage', 'dist', 'local', 'node_modules']);
4
+ const MAX_SCANNED_ENTRIES = 5000;
5
+ export async function searchWorkspaceFiles(args) {
6
+ const query = normalizeQuery(args.query);
7
+ const limit = Math.max(1, Math.min(args.limit ?? 20, 50));
8
+ const candidates = [];
9
+ let scanned = 0;
10
+ async function visit(dir) {
11
+ if (scanned >= MAX_SCANNED_ENTRIES) {
12
+ return;
13
+ }
14
+ let entries;
15
+ try {
16
+ entries = await readdir(dir, { withFileTypes: true });
17
+ }
18
+ catch {
19
+ return;
20
+ }
21
+ for (const entry of entries) {
22
+ if (scanned >= MAX_SCANNED_ENTRIES) {
23
+ return;
24
+ }
25
+ if (entry.isDirectory() && IGNORED_DIRS.has(entry.name)) {
26
+ continue;
27
+ }
28
+ scanned++;
29
+ const fullPath = join(dir, entry.name);
30
+ const relPath = toWorkspacePath(args.workspaceRoot, fullPath);
31
+ if (!relPath || relPath.startsWith('../')) {
32
+ continue;
33
+ }
34
+ if (entry.isFile()) {
35
+ candidates.push({ path: relPath });
36
+ }
37
+ if (entry.isDirectory()) {
38
+ await visit(fullPath);
39
+ }
40
+ }
41
+ }
42
+ await visit(args.workspaceRoot);
43
+ return rankMatches(candidates.filter((candidate) => matchesQuery(candidate.path, query)), query).slice(0, limit);
44
+ }
45
+ function normalizeQuery(query) {
46
+ return query.trim().replace(/^@/, '').toLowerCase();
47
+ }
48
+ function matchesQuery(path, query) {
49
+ if (!query) {
50
+ return true;
51
+ }
52
+ const normalizedPath = path.toLowerCase();
53
+ const basename = normalizedPath.split('/').at(-1) ?? normalizedPath;
54
+ return normalizedPath.includes(query) || basename.includes(query);
55
+ }
56
+ function rankMatches(matches, query) {
57
+ return [...matches].sort((left, right) => {
58
+ const leftPath = left.path.toLowerCase();
59
+ const rightPath = right.path.toLowerCase();
60
+ const leftIndex = query ? leftPath.indexOf(query) : 0;
61
+ const rightIndex = query ? rightPath.indexOf(query) : 0;
62
+ if (leftIndex !== rightIndex) {
63
+ return leftIndex - rightIndex;
64
+ }
65
+ return left.path.localeCompare(right.path);
66
+ });
67
+ }
68
+ function toWorkspacePath(workspaceRoot, path) {
69
+ return relative(workspaceRoot, path).split('\\').join('/');
70
+ }
71
+ //# sourceMappingURL=workspace-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-files.js","sourceRoot":"","sources":["../../../../../../src/server/features/control-plane/services/workspace-files.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { AgentLoopEvent } from '../../../core/runtime/agent-loop.js';
1
2
  import type { HeartbeatRunView, HeartbeatTaskView } from '../../../core/runtime/heartbeat-views.js';
2
3
  export type ChatSessionView = {
3
4
  id: string;
@@ -6,6 +7,7 @@ export type ChatSessionView = {
6
7
  updatedAt?: string;
7
8
  model?: string;
8
9
  driftEnabled?: boolean;
10
+ driftLevel?: 'unknown' | 'low' | 'medium' | 'high';
9
11
  messageCount: number;
10
12
  turnCount: number;
11
13
  lastPrompt?: string;
@@ -63,6 +65,17 @@ export type ChatSessionDetail = ChatSessionView & {
63
65
  turns: ChatTurnView[];
64
66
  lastContinuePrompt?: string;
65
67
  };
68
+ export type ControlPlanePendingApproval = {
69
+ tool: string;
70
+ callId: string;
71
+ input: unknown;
72
+ requestedAt: string;
73
+ };
74
+ export type ControlPlaneSessionLiveEvent = {
75
+ sessionId: string;
76
+ timestamp: string;
77
+ event: AgentLoopEvent;
78
+ };
66
79
  export type ControlPlaneState = {
67
80
  workspaceRoot: string;
68
81
  stateRoot: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/server/features/control-plane/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAEpG,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE;QACR,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;IACxC,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG;IAChD,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,SAAS,EAAE;QACT,KAAK,EAAE,iBAAiB,EAAE,CAAC;QAC3B,IAAI,EAAE,gBAAgB,EAAE,CAAC;KAC1B,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/server/features/control-plane/types.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,6 @@ export { appRouter, type AppRouter } from './router.js';
4
4
  export { createHeddleServerApp } from './app.js';
5
5
  export { createServerLogger } from './logger.js';
6
6
  export { projectChatSessionView } from './features/control-plane/services/chat-sessions.js';
7
- export declare function listenHeddleServer(options: HeddleServerListenOptions): Promise<void>;
7
+ export declare function listenHeddleDaemon(options: HeddleServerListenOptions): Promise<void>;
8
+ export declare const listenHeddleServer: typeof listenHeddleDaemon;
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,YAAY,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAE5F,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB1F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,YAAY,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAE5F,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB1F;AAED,eAAO,MAAM,kBAAkB,2BAAqB,CAAC"}
@@ -7,7 +7,7 @@ export { appRouter } from './router.js';
7
7
  export { createHeddleServerApp } from './app.js';
8
8
  export { createServerLogger } from './logger.js';
9
9
  export { projectChatSessionView } from './features/control-plane/services/chat-sessions.js';
10
- export async function listenHeddleServer(options) {
10
+ export async function listenHeddleDaemon(options) {
11
11
  const assetsDir = options.assetsDir ?? resolveDefaultAssetsDir();
12
12
  assertWebAssetsBuilt(assetsDir);
13
13
  const logger = options.logger ?? createServerLogger({ stateRoot: options.stateRoot });
@@ -32,6 +32,7 @@ export async function listenHeddleServer(options) {
32
32
  });
33
33
  });
34
34
  }
35
+ export const listenHeddleServer = listenHeddleDaemon;
35
36
  function resolveDefaultAssetsDir() {
36
37
  if (process.env.HEDDLE_WEB_DIST) {
37
38
  return resolve(process.env.HEDDLE_WEB_DIST);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAInD,OAAO,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAE5F,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAkC;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,uBAAuB,EAAE,CAAC;IACjE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtF,MAAM,GAAG,GAAG,qBAAqB,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAErE,MAAM,IAAI,OAAO,CAAO,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS;aACV,EAAE,uBAAuB,CAAC,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;YAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;YAC7D,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC7B,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAC;YAChD,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAInD,OAAO,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAE5F,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAkC;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,uBAAuB,EAAE,CAAC;IACjE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtF,MAAM,GAAG,GAAG,qBAAqB,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAErE,MAAM,IAAI,OAAO,CAAO,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS;aACV,EAAE,uBAAuB,CAAC,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;YAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;YAC7D,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC7B,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAC;YAChD,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD,SAAS,uBAAuB;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC"}
@@ -32,6 +32,13 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
32
32
  };
33
33
  meta: object;
34
34
  }>;
35
+ sessionCreate: import("@trpc/server").TRPCMutationProcedure<{
36
+ input: {
37
+ name?: string | undefined;
38
+ } | undefined;
39
+ output: import("./features/control-plane/types.js").ChatSessionDetail;
40
+ meta: object;
41
+ }>;
35
42
  session: import("@trpc/server").TRPCQueryProcedure<{
36
43
  input: {
37
44
  id: string;
@@ -39,6 +46,22 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
39
46
  output: import("./features/control-plane/types.js").ChatSessionDetail | null;
40
47
  meta: object;
41
48
  }>;
49
+ modelOptions: import("@trpc/server").TRPCQueryProcedure<{
50
+ input: void;
51
+ output: {
52
+ groups: import("../index.js").BuiltInModelGroup[];
53
+ };
54
+ meta: object;
55
+ }>;
56
+ sessionSettingsUpdate: import("@trpc/server").TRPCMutationProcedure<{
57
+ input: {
58
+ id: string;
59
+ model?: string | undefined;
60
+ driftEnabled?: boolean | undefined;
61
+ };
62
+ output: import("./features/control-plane/types.js").ChatSessionDetail;
63
+ meta: object;
64
+ }>;
42
65
  sessionTurnReview: import("@trpc/server").TRPCQueryProcedure<{
43
66
  input: {
44
67
  sessionId: string;
@@ -47,6 +70,42 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
47
70
  output: import("./features/control-plane/types.js").ChatTurnReview | null;
48
71
  meta: object;
49
72
  }>;
73
+ sessionPendingApproval: import("@trpc/server").TRPCQueryProcedure<{
74
+ input: {
75
+ id: string;
76
+ };
77
+ output: import("./features/control-plane/types.js").ControlPlanePendingApproval | null;
78
+ meta: object;
79
+ }>;
80
+ sessionRunning: import("@trpc/server").TRPCQueryProcedure<{
81
+ input: {
82
+ id: string;
83
+ };
84
+ output: {
85
+ running: boolean;
86
+ };
87
+ meta: object;
88
+ }>;
89
+ sessionResolveApproval: import("@trpc/server").TRPCMutationProcedure<{
90
+ input: {
91
+ sessionId: string;
92
+ approved: boolean;
93
+ reason?: string | undefined;
94
+ };
95
+ output: {
96
+ resolved: boolean;
97
+ };
98
+ meta: object;
99
+ }>;
100
+ sessionCancel: import("@trpc/server").TRPCMutationProcedure<{
101
+ input: {
102
+ id: string;
103
+ };
104
+ output: {
105
+ cancelled: boolean;
106
+ };
107
+ meta: object;
108
+ }>;
50
109
  sessionSendPrompt: import("@trpc/server").TRPCMutationProcedure<{
51
110
  input: {
52
111
  sessionId: string;
@@ -59,6 +118,17 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
59
118
  };
60
119
  meta: object;
61
120
  }>;
121
+ sessionContinue: import("@trpc/server").TRPCMutationProcedure<{
122
+ input: {
123
+ id: string;
124
+ };
125
+ output: {
126
+ session: import("./features/control-plane/types.js").ChatSessionDetail;
127
+ outcome: import("../index.js").StopReason;
128
+ summary: string;
129
+ };
130
+ meta: object;
131
+ }>;
62
132
  heartbeatTasks: import("@trpc/server").TRPCQueryProcedure<{
63
133
  input: void;
64
134
  output: {
@@ -76,6 +146,16 @@ export declare const appRouter: import("@trpc/server").TRPCBuiltRouter<{
76
146
  };
77
147
  meta: object;
78
148
  }>;
149
+ workspaceFileSearch: import("@trpc/server").TRPCQueryProcedure<{
150
+ input: {
151
+ query?: string | undefined;
152
+ limit?: number | undefined;
153
+ } | undefined;
154
+ output: {
155
+ files: import("./features/control-plane/services/workspace-files.js").WorkspaceFileSuggestion[];
156
+ };
157
+ meta: object;
158
+ }>;
79
159
  }>>;
80
160
  }>>;
81
161
  export type AppRouter = typeof appRouter;
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/server/router.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/server/router.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ :root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0b0f14;--panel:#111827;--panel-alt:#0f172a;--panel-muted:#0b1220;--text:#e5e7eb;--muted:#94a3b8;--line:#94a3b829;--line-strong:#94a3b847;--accent:#7dd3fc;--good:#86efac;--warn:#fcd34d;--bad:#fda4af}*{box-sizing:border-box}html,body,#root{height:100vh}body{background:var(--bg);color:var(--text);margin:0;font:14px/1.5 ui-sans-serif,-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,sans-serif;overflow:hidden}button,textarea{font:inherit;color:inherit}button{cursor:pointer}h1,h2,h3,p{margin-top:0}h1{letter-spacing:-.03em;margin-bottom:8px;font-size:28px;line-height:1.1}h2{letter-spacing:-.02em;margin-bottom:4px;font-size:18px}h3{letter-spacing:-.01em;margin-bottom:10px;font-size:14px}.app-shell{flex-direction:column;gap:14px;height:100vh;padding:16px;display:flex;overflow:hidden}.topbar{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.toolbar{justify-content:space-between;align-items:center;gap:16px;display:flex}.toolbar-tabs{min-width:0}.toolbar-status{flex-direction:row;justify-content:flex-end;align-items:center;gap:12px;min-width:0;display:flex}.topbar-title-row{justify-content:flex-end;align-items:center;gap:12px;max-width:100%;display:flex}.topbar-eyebrow{color:var(--accent);letter-spacing:.12em;text-transform:uppercase;margin:0;font-size:11px;font-weight:700;line-height:1}.workspace-path-label{max-width:220px;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1;overflow:hidden}.topbar-copy,.muted,.button-copy.muted-copy,.list-button span,.kv-key,.event-line{color:var(--muted)}.topbar-copy{max-width:760px;margin:0}.status-badge{border:1px solid var(--line);max-width:min(260px,100%);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;background:#111827eb;border-radius:999px;align-items:center;padding:7px 12px;font-size:12px;line-height:1;display:inline-flex;overflow:hidden}.status-badge.bad{color:var(--bad);border-color:#fda4af4d}.tabs{flex-wrap:wrap;gap:8px;display:flex}.tab-button{border:1px solid var(--line);background:var(--panel);color:var(--muted);border-radius:10px;padding:8px 12px}.tab-button.active,.side-tabs button.active{color:var(--text);background:#7dd3fc1f;border-color:#7dd3fc57}.overview-grid{flex:auto;grid-template-columns:repeat(12,minmax(0,1fr));gap:14px;min-height:0;display:grid;overflow:auto}.panel{border:1px solid var(--line);background:var(--panel);border-radius:16px;grid-column:span 4;min-width:0;padding:18px}.panel.wide{grid-column:span 6}.metric{letter-spacing:-.04em;margin-bottom:6px;font-size:40px;font-weight:800;line-height:1}.workspace-shell{grid-template-columns:var(--session-sidebar-width,288px) 6px minmax(420px, 1fr) 6px var(--session-side-width,344px);border:1px solid var(--line);background:linear-gradient(#111827fa,#0f172af5);border-radius:18px;flex:auto;min-height:0;display:grid;overflow:hidden;box-shadow:0 20px 48px #0000003d}.workspace-sidebar,.workspace-main,.workspace-side{flex-direction:column;min-height:0;display:flex}.workspace-sidebar,.workspace-side{background:var(--panel-muted)}.workspace-sidebar{border-right:0}.workspace-side{border-left:0}.workspace-main{background:var(--panel-alt);grid-template-rows:auto minmax(0,1fr) auto;min-height:0;display:grid;overflow:hidden}.workspace-resizer{cursor:col-resize;touch-action:none;background:#080c1457;border:0;border-left:1px solid #94a3b81f;border-right:1px solid #94a3b81f;border-radius:0;width:6px;min-width:6px}.workspace-resizer:hover,.workspace-resizer:focus-visible{background:#7dd3fc29;border-color:#7dd3fc4d;outline:none}.workspace-header{border-bottom:1px solid #94a3b81f;justify-content:space-between;align-items:flex-start;gap:12px;padding:14px 16px;display:flex}.workspace-header h2{margin-bottom:2px}.workspace-header .muted{font-size:12px;line-height:1.45}.session-controls{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.select-control{color:var(--muted);align-items:center;gap:6px;font-size:12px;display:flex}.select-control select{border:1px solid var(--line);max-width:190px;color:var(--text);background:#0f172acc;border-radius:8px;padding:5px 8px}.drift-button{color:var(--muted);background:0 0;border:1px solid #94a3b838;border-radius:999px;padding:3px 9px;font-size:12px}.drift-button.active{color:var(--good);border-color:#86efac47}.drift-button:disabled,.select-control select:disabled{opacity:.65;cursor:not-allowed}.sidebar-scroll,.conversation-scroll,.side-scroll,.task-detail-scroll{flex:auto;min-height:0;overflow:auto}.sidebar-scroll,.side-scroll,.task-detail-scroll{padding:12px}.split-scroll{flex-direction:column;gap:16px;display:flex}.stack-list{flex-direction:column;gap:10px;display:flex}.stack-list.compact{gap:8px}.list-button{text-align:left;background:#0f172a8a;border:1px solid #94a3b814;border-radius:12px;width:100%;padding:11px;transition:border-color .12s,background .12s,transform .12s}.list-button:hover{background:#1e293bc7;border-color:#7dd3fc2e}.list-button.active{background:linear-gradient(#7dd3fc1f,#7dd3fc0f);border-color:#7dd3fc57;box-shadow:inset 0 0 0 1px #7dd3fc14}.list-button-header{justify-content:space-between;gap:8px;margin-bottom:6px;display:flex}.list-button-header strong{font-size:13px}.compact-button{padding:10px}.button-copy{color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0 0;font-size:13px}.pills{flex-wrap:wrap;gap:6px;margin:8px 0;display:flex}.compact-pills{margin:0}.pill{color:var(--muted);border:1px solid #94a3b838;border-radius:999px;align-items:center;padding:2px 8px;font-size:12px;display:inline-flex}.pill.good{color:var(--good);border-color:#86efac47}.pill.warn{color:var(--warn);border-color:#fcd34d47}.pill.bad{color:var(--bad);border-color:#fda4af47}.conversation-scroll{flex-direction:column;min-height:0;padding:14px 18px 28px;display:flex;overflow:auto}.conversation-stack{flex-direction:column;gap:16px;min-height:100%;display:flex}.conversation-spacer{flex:1 0 32px}.message{overflow-wrap:anywhere;background:#111827e0;border:1px solid #94a3b81f;border-radius:14px;min-width:0;max-width:min(760px,84%);padding:12px 13px;box-shadow:0 8px 18px #00000029}.message.user{background:linear-gradient(#38bdf829,#38bdf81a);border-color:#7dd3fc3d;align-self:flex-end}.message.assistant{align-self:flex-start}.message.tool-result{background:#0f172ab8;border-color:#94a3b82e;max-width:min(820px,88%)}.message.working{border-color:#fcd34d47;box-shadow:inset 0 0 0 1px #fcd34d14}.message-header{color:var(--muted);justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;font-size:12px;display:flex}.message-body,.summary,.kv-value{white-space:pre-wrap;overflow-wrap:anywhere}.markdown-body{white-space:normal;line-height:1.65}.markdown-body>:last-child{margin-bottom:0}.markdown-body p,.markdown-body ul,.markdown-body ol,.markdown-body pre,.markdown-body blockquote,.markdown-body table{margin:0 0 12px}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{margin:0 0 10px;line-height:1.25}.markdown-body ul,.markdown-body ol{padding-left:20px}.markdown-body li+li{margin-top:4px}.markdown-body blockquote{color:var(--muted);border-left:3px solid #7dd3fc47;padding-left:12px}.markdown-body table{border-collapse:collapse;width:100%;font-size:13px}.markdown-body th,.markdown-body td{border:1px solid var(--line);text-align:left;vertical-align:top;padding:8px 10px}.markdown-body th{background:#94a3b814}.tool-result-body{flex-direction:column;gap:8px;display:flex}.tool-result-meta{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.tool-command{color:var(--muted);overflow-wrap:anywhere;font:12px/1.45 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace}.tool-error{color:var(--bad);margin:0}.tool-output{color:#dbe4f3;white-space:pre-wrap;background:#070b10d1;border:1px solid #94a3b81a;border-radius:8px;max-height:280px;margin:0;padding:10px;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;overflow:auto}.inline-code{background:#94a3b81f;border-radius:6px;padding:1px 5px;font:12px/1.45 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace}.composer-shell{background:#080c1457;border-top:1px solid #94a3b81f;padding:14px 16px 16px;position:relative}.composer-shell textarea{resize:none;background:#0b1220e6;border:1px solid #94a3b824;border-radius:12px;width:100%;min-height:96px;padding:12px 13px;transition:border-color .12s,box-shadow .12s}.composer-shell textarea:focus{border-color:#7dd3fc57;outline:none;box-shadow:0 0 0 3px #7dd3fc14}.composer-shell textarea::placeholder{color:var(--muted)}.mention-menu{z-index:12;border:1px solid var(--line-strong);background:#0b1220fa;border-radius:8px;max-height:260px;padding:8px;position:absolute;bottom:calc(100% - 8px);left:16px;right:16px;overflow:auto;box-shadow:0 16px 36px #00000057}.mention-menu-header{color:var(--muted);justify-content:space-between;gap:12px;padding:4px 6px 8px;font-size:12px;display:flex}.mention-option{width:100%;color:var(--text);text-align:left;background:0 0;border:1px solid #0000;border-radius:8px;padding:8px 9px}.mention-option.active,.mention-option:hover{background:#7dd3fc1f;border-color:#7dd3fc47}.mention-option span{overflow-wrap:anywhere;font:12px/1.45 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace}.mention-empty{color:var(--muted);margin:0;padding:10px 8px}.composer-footer{justify-content:space-between;align-items:flex-end;gap:12px;margin-top:8px;display:flex}.composer-status{flex-flow:wrap;flex:auto;align-items:center;gap:6px;min-width:0;display:flex}.composer-status p{max-width:560px;margin:0;font-size:12px;line-height:1.35}.composer-actions{flex-shrink:0;justify-content:flex-end}.primary-button{color:#03131c;background:linear-gradient(#8ee3ff,#67c7ef);border:0;border-radius:10px;padding:9px 14px;font-weight:700;box-shadow:0 8px 18px #67c7ef33}.sidebar-action-button{color:var(--text);white-space:nowrap;background:#7dd3fc1a;border:1px solid #7dd3fc38;border-radius:10px;padding:7px 11px;font-size:12px;font-weight:600;transition:border-color .12s,background .12s,transform .12s}.sidebar-action-button:hover{background:#7dd3fc29;border-color:#7dd3fc57}.sidebar-action-button:disabled{opacity:.65;cursor:not-allowed}.primary-button:disabled,.composer-shell textarea:disabled{opacity:.6;cursor:not-allowed}.side-tabs{border-bottom:1px solid var(--line);gap:8px;padding:14px;display:flex}.side-tabs button{border:1px solid var(--line);color:var(--muted);background:0 0;border-radius:10px;padding:8px 12px}.side-section{flex-direction:column;gap:10px;display:flex}.detail-stack{flex-direction:column;gap:14px;display:flex}.compact-stack{gap:10px}.detail-card,.empty-state{background:#0f172a8f;border:1px solid #94a3b81a;border-radius:12px;padding:12px}.error-card{border-color:#fda4af3d}.card-title,.section-label{margin-bottom:6px;font-size:13px;font-weight:700}.kv-list{gap:8px;display:grid}.kv-list>div{gap:2px;display:grid}.kv-key{text-transform:uppercase;letter-spacing:.08em;font-size:11px}.path{word-break:break-all}.event-list{flex-direction:column;gap:8px;display:flex}.event-line{border-left:2px solid #94a3b83d;margin:0;padding-left:10px;font-size:13px}.code-block{color:#dbe4f3;white-space:pre-wrap;background:#070b10;border-radius:12px;margin:0;padding:12px;font:12px/1.45 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;overflow:auto}.empty-state{flex-direction:column;gap:6px;display:flex}.sidebar-empty-state{padding-top:8px}.toast-viewport{z-index:20;pointer-events:none;flex-direction:column;gap:10px;width:min(380px,100vw - 36px);display:flex;position:fixed;bottom:18px;right:18px}.toast{border:1px solid var(--line-strong);pointer-events:auto;background:#0f172af5;border-radius:8px;justify-content:space-between;align-items:flex-start;gap:12px;padding:12px;display:flex;box-shadow:0 16px 36px #00000052}.toast.success{border-color:#86efac5c}.toast.error{border-color:#fda4af61}.toast-title{margin:0;font-weight:700}.toast-body{color:var(--muted);overflow-wrap:anywhere;margin:4px 0 0;font-size:13px}.toast-dismiss{border:1px solid var(--line);width:26px;height:26px;color:var(--muted);background:#0b1220b8;border-radius:8px;flex:none}@media (width<=1180px){.workspace-shell{grid-template-columns:var(--session-sidebar-width,252px) 6px minmax(420px, 1fr) 6px var(--session-side-width,312px)}}@media (width<=980px){html,body,#root{height:100dvh;min-height:100dvh}body{overflow:hidden}.app-shell{gap:10px;height:100dvh;min-height:100dvh;padding:10px;overflow:hidden}.topbar{flex-direction:column}.toolbar{flex-direction:row;align-items:center;gap:8px}.toolbar-status{flex:auto;justify-content:flex-end;gap:8px;width:auto}.toolbar-tabs{flex:none}.tab-button{padding:7px 10px}.topbar-title-row{gap:8px}.workspace-path-label{max-width:150px}.status-badge{max-width:180px;padding:6px 10px}.composer-footer{flex-direction:column;align-items:stretch}.composer-actions{justify-content:flex-start}.overview-grid{grid-template-columns:1fr}.panel,.panel.wide{grid-column:auto}}.mobile-nav-button,.mobile-side-header{display:none}@media (width<=760px){.workspace-shell{display:none}.mobile-session-screen{flex:auto;height:100%;min-height:0;display:flex;overflow:hidden}.mobile-pane{border:1px solid var(--line);border-radius:12px;width:100%;min-height:0;overflow:hidden}.mobile-session-list .mobile-pane,.mobile-session-review .mobile-pane{background:var(--panel-muted);flex-direction:column;display:flex}.mobile-session-chat{min-height:0}.mobile-chat-pane{background:var(--panel-alt);flex-direction:column;min-height:0;display:flex}.workspace-resizer{display:none}.mobile-nav-button{color:var(--text);background:#7dd3fc14;border:1px solid #7dd3fc38;border-radius:10px;align-items:center;padding:7px 10px;font-size:12px;font-weight:600;display:inline-flex}.mobile-side-header{background:var(--panel-muted);padding:12px 12px 0;display:block}.workspace-header{padding:12px}.workspace-sidebar .workspace-header .muted{display:none}.workspace-header h2{font-size:17px}.workspace-header>div{min-width:0}.workspace-header .muted{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.session-controls{justify-content:flex-start;width:100%}.select-control{flex:180px}.select-control select{width:100%;max-width:none}.conversation-scroll{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:auto;min-height:0;padding:12px 12px 20px;overflow:auto}.conversation-stack{gap:12px}.conversation-spacer{flex-basis:10px}.message,.message.tool-result{border-radius:10px;max-width:100%}.composer-shell{z-index:1;padding:10px 12px env(safe-area-inset-bottom,0px);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#080c14f5;flex:none;position:relative}.composer-shell textarea{border-radius:8px;min-height:78px}.composer-actions{justify-content:flex-end;width:100%}.composer-actions .primary-button{margin-left:auto}}@media (width<=620px){.toolbar{align-items:flex-start}.workspace-header{flex-direction:column;align-items:stretch}.toolbar-status{flex-wrap:wrap}.topbar-eyebrow{font-size:10px}.workspace-path-label{max-width:120px}.status-badge{max-width:150px}}@media (width<=500px){.toolbar{flex-wrap:wrap}.toolbar-tabs,.toolbar-status,.topbar-title-row,.topbar-eyebrow,.workspace-path-label,.status-badge,.workspace-header .muted,.composer-status,.pills.compact-pills,.mobile-inspector-button,.select-control,.drift-button,.session-controls .pill{display:none}.workspace-main{height:auto;min-height:0}.workspace-header{gap:8px}.workspace-header,.side-tabs,.sidebar-scroll,.side-scroll,.task-detail-scroll{padding:10px}.workspace-header h2{font-size:15px;line-height:1.2}.session-controls{gap:6px}.conversation-scroll{padding:8px 10px 12px}.message,.message.tool-result{max-width:100%;padding:10px 11px}.message.user{max-width:92%}.message-header{margin-bottom:6px}.composer-shell{padding:8px 10px env(safe-area-inset-bottom,0px)}.composer-footer{gap:8px;margin-top:8px}.composer-actions{justify-content:space-between}.composer-actions .tab-button:not(:last-child){display:none}.composer-actions .primary-button{width:100%;margin-left:0}}