@jmanuelcorral/openteam 0.19.0 → 0.21.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 (95) hide show
  1. package/README.es.md +10 -2
  2. package/README.md +9 -2
  3. package/dist/certificates/graph-release-certificate.json +2 -2
  4. package/dist/certificates/graph-shadow-certificate.json +2 -2
  5. package/dist/cli/consoleServe.d.ts +17 -0
  6. package/dist/cli/consoleServe.d.ts.map +1 -1
  7. package/dist/cli/graphOperator.d.ts +10 -1
  8. package/dist/cli/graphOperator.d.ts.map +1 -1
  9. package/dist/cli/lifecycleHistoryProvider.d.ts +21 -0
  10. package/dist/cli/lifecycleHistoryProvider.d.ts.map +1 -0
  11. package/dist/cli.d.ts +3 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +6862 -798
  14. package/dist/config/errors.d.ts.map +1 -1
  15. package/dist/config/historyEndpoint.d.ts +3 -0
  16. package/dist/config/historyEndpoint.d.ts.map +1 -0
  17. package/dist/config/schema.d.ts +43 -1
  18. package/dist/config/schema.d.ts.map +1 -1
  19. package/dist/console/assets.d.ts +23 -2
  20. package/dist/console/assets.d.ts.map +1 -1
  21. package/dist/console/conversation.d.ts +75 -0
  22. package/dist/console/conversation.d.ts.map +1 -0
  23. package/dist/console/historyBoundary.d.ts +6 -0
  24. package/dist/console/historyBoundary.d.ts.map +1 -0
  25. package/dist/console/inspector.d.ts +3 -0
  26. package/dist/console/inspector.d.ts.map +1 -0
  27. package/dist/console/labels.d.ts +12 -0
  28. package/dist/console/labels.d.ts.map +1 -0
  29. package/dist/console/opencodeClient.d.ts.map +1 -1
  30. package/dist/console/refresh.d.ts +3 -0
  31. package/dist/console/refresh.d.ts.map +1 -0
  32. package/dist/console/render.d.ts +19 -0
  33. package/dist/console/render.d.ts.map +1 -1
  34. package/dist/console/rootAssociation.d.ts +7 -0
  35. package/dist/console/rootAssociation.d.ts.map +1 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2935 -265
  38. package/dist/lifecycle/contracts.d.ts +618 -0
  39. package/dist/lifecycle/contracts.d.ts.map +1 -0
  40. package/dist/lifecycle/historyReader.d.ts +11 -0
  41. package/dist/lifecycle/historyReader.d.ts.map +1 -0
  42. package/dist/lifecycle/historySourceError.d.ts +7 -0
  43. package/dist/lifecycle/historySourceError.d.ts.map +1 -0
  44. package/dist/lifecycle/project.d.ts +3 -0
  45. package/dist/lifecycle/project.d.ts.map +1 -0
  46. package/dist/lifecycle/root.d.ts +3 -0
  47. package/dist/lifecycle/root.d.ts.map +1 -0
  48. package/dist/lifecycle/runtimeRecorder.d.ts +6 -0
  49. package/dist/lifecycle/runtimeRecorder.d.ts.map +1 -0
  50. package/dist/lifecycle/schema.d.ts +487 -0
  51. package/dist/lifecycle/schema.d.ts.map +1 -0
  52. package/dist/messages/consoleDetail.d.ts +54 -0
  53. package/dist/messages/consoleDetail.d.ts.map +1 -0
  54. package/dist/messages/index.d.ts +1 -0
  55. package/dist/messages/index.d.ts.map +1 -1
  56. package/dist/messages/lifecycle.d.ts +95 -0
  57. package/dist/messages/lifecycle.d.ts.map +1 -0
  58. package/dist/messages/lifecycleRuntime.d.ts +4 -0
  59. package/dist/messages/lifecycleRuntime.d.ts.map +1 -0
  60. package/dist/messages/lifecycleStorage.d.ts +4 -0
  61. package/dist/messages/lifecycleStorage.d.ts.map +1 -0
  62. package/dist/messages/orchestration.d.ts +3 -0
  63. package/dist/messages/orchestration.d.ts.map +1 -1
  64. package/dist/orchestrator/coordinator.d.ts +11 -1
  65. package/dist/orchestrator/coordinator.d.ts.map +1 -1
  66. package/dist/orchestrator/graphIngress.d.ts +5 -0
  67. package/dist/orchestrator/graphIngress.d.ts.map +1 -1
  68. package/dist/orchestrator/graphRuntime.d.ts +13 -1
  69. package/dist/orchestrator/graphRuntime.d.ts.map +1 -1
  70. package/dist/orchestrator/subsessions.d.ts +3 -0
  71. package/dist/orchestrator/subsessions.d.ts.map +1 -1
  72. package/dist/plugin/orchestrateTool.d.ts +3 -0
  73. package/dist/plugin/orchestrateTool.d.ts.map +1 -1
  74. package/dist/storage/lifecycle/codec.d.ts +19 -0
  75. package/dist/storage/lifecycle/codec.d.ts.map +1 -0
  76. package/dist/storage/lifecycle/fsLifecycleJournal.d.ts +3 -0
  77. package/dist/storage/lifecycle/fsLifecycleJournal.d.ts.map +1 -0
  78. package/dist/storage/lifecycle/fsLifecycleSupport.d.ts +17 -0
  79. package/dist/storage/lifecycle/fsLifecycleSupport.d.ts.map +1 -0
  80. package/dist/storage/lifecycle/fsLifecycleWriterLivenessProbe.d.ts +3 -0
  81. package/dist/storage/lifecycle/fsLifecycleWriterLivenessProbe.d.ts.map +1 -0
  82. package/dist/web/configApi.d.ts +1 -1
  83. package/dist/web/configApi.d.ts.map +1 -1
  84. package/dist/web/console.d.ts.map +1 -1
  85. package/dist/web/conversationRoute.d.ts +16 -0
  86. package/dist/web/conversationRoute.d.ts.map +1 -0
  87. package/dist/web/graphRoute.d.ts +39 -1
  88. package/dist/web/graphRoute.d.ts.map +1 -1
  89. package/dist/web/server.d.ts +24 -0
  90. package/dist/web/server.d.ts.map +1 -1
  91. package/dist/web/start.d.ts +17 -0
  92. package/dist/web/start.d.ts.map +1 -1
  93. package/dist/web/watch.d.ts +17 -2
  94. package/dist/web/watch.d.ts.map +1 -1
  95. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/config/errors.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,WAAW,CAAC;AAIlC,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAmHzE,CAAC;AAgIL,KAAK,6BAA6B,GAAG;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAClE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,6BAAkC,GAC1C,MAAM,CA0BR;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKxD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/config/errors.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,WAAW,CAAC;AAIlC,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAwHzE,CAAC;AAgIL,KAAK,6BAA6B,GAAG;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAClE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,6BAAkC,GAC1C,MAAM,CA0BR;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKxD"}
@@ -0,0 +1,3 @@
1
+ /** Literal loopback origins only: no DNS, userinfo or redirectable path. */
2
+ export declare function isLocalHistoryEndpoint(value: string): boolean;
3
+ //# sourceMappingURL=historyEndpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyEndpoint.d.ts","sourceRoot":"","sources":["../../src/config/historyEndpoint.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAe7D"}
@@ -57,6 +57,18 @@ export declare const GraphEngineSchema: z.ZodEnum<{
57
57
  */
58
58
  export declare const DEFAULT_GRAPH_JOURNAL_ROOT = ".opencode/openteam-local/graph/runs";
59
59
  export declare const DEFAULT_GRAPH_WORKTREES_DIR = ".opencode/openteam-local/graph/worktrees";
60
+ export declare const DEFAULT_LIFECYCLE_ROOT = ".opencode/openteam-local/lifecycle/runs";
61
+ export declare const DEFAULT_LIFECYCLE_MAX_TERMINAL_RUNS = 200;
62
+ export declare const DEFAULT_LIFECYCLE_MAX_AGE_DAYS = 30;
63
+ export declare const DEFAULT_LIFECYCLE_MAX_BYTES = 268435456;
64
+ export declare const LifecycleConfigSchema: z.ZodDefault<z.ZodObject<{
65
+ root: z.ZodDefault<z.ZodString>;
66
+ retention: z.ZodDefault<z.ZodObject<{
67
+ maxTerminalRuns: z.ZodDefault<z.ZodNumber>;
68
+ maxAgeDays: z.ZodDefault<z.ZodNumber>;
69
+ maxBytes: z.ZodDefault<z.ZodNumber>;
70
+ }, z.core.$strict>>;
71
+ }, z.core.$strict>>;
60
72
  export declare const GraphConfigSchema: z.ZodObject<{
61
73
  mode: z.ZodDefault<z.ZodEnum<{
62
74
  active: "active";
@@ -89,6 +101,10 @@ export declare const ConsoleConfigSchema: z.ZodDefault<z.ZodObject<{
89
101
  recentRoutes: z.ZodDefault<z.ZodNumber>;
90
102
  openBrowser: z.ZodDefault<z.ZodBoolean>;
91
103
  remoteStorage: z.ZodDefault<z.ZodBoolean>;
104
+ sessionHistory: z.ZodOptional<z.ZodObject<{
105
+ contentEnabled: z.ZodDefault<z.ZodBoolean>;
106
+ endpoint: z.ZodOptional<z.ZodString>;
107
+ }, z.core.$strict>>;
92
108
  terminal: z.ZodDefault<z.ZodObject<{
93
109
  enabled: z.ZodDefault<z.ZodBoolean>;
94
110
  pty: z.ZodOptional<z.ZodBoolean>;
@@ -413,6 +429,10 @@ export declare const OpenTeamConfigObjectSchema: z.ZodObject<{
413
429
  recentRoutes: z.ZodDefault<z.ZodNumber>;
414
430
  openBrowser: z.ZodDefault<z.ZodBoolean>;
415
431
  remoteStorage: z.ZodDefault<z.ZodBoolean>;
432
+ sessionHistory: z.ZodOptional<z.ZodObject<{
433
+ contentEnabled: z.ZodDefault<z.ZodBoolean>;
434
+ endpoint: z.ZodOptional<z.ZodString>;
435
+ }, z.core.$strict>>;
416
436
  terminal: z.ZodDefault<z.ZodObject<{
417
437
  enabled: z.ZodDefault<z.ZodBoolean>;
418
438
  pty: z.ZodOptional<z.ZodBoolean>;
@@ -469,6 +489,14 @@ export declare const OpenTeamConfigObjectSchema: z.ZodObject<{
469
489
  }, z.core.$strict>>;
470
490
  }, z.core.$strict>>;
471
491
  }, z.core.$strict>>;
492
+ lifecycle: z.ZodDefault<z.ZodObject<{
493
+ root: z.ZodDefault<z.ZodString>;
494
+ retention: z.ZodDefault<z.ZodObject<{
495
+ maxTerminalRuns: z.ZodDefault<z.ZodNumber>;
496
+ maxAgeDays: z.ZodDefault<z.ZodNumber>;
497
+ maxBytes: z.ZodDefault<z.ZodNumber>;
498
+ }, z.core.$strict>>;
499
+ }, z.core.$strict>>;
472
500
  graph: z.ZodDefault<z.ZodObject<{
473
501
  mode: z.ZodDefault<z.ZodEnum<{
474
502
  active: "active";
@@ -593,6 +621,10 @@ export declare const OpenTeamConfigSchema: z.ZodObject<{
593
621
  recentRoutes: z.ZodDefault<z.ZodNumber>;
594
622
  openBrowser: z.ZodDefault<z.ZodBoolean>;
595
623
  remoteStorage: z.ZodDefault<z.ZodBoolean>;
624
+ sessionHistory: z.ZodOptional<z.ZodObject<{
625
+ contentEnabled: z.ZodDefault<z.ZodBoolean>;
626
+ endpoint: z.ZodOptional<z.ZodString>;
627
+ }, z.core.$strict>>;
596
628
  terminal: z.ZodDefault<z.ZodObject<{
597
629
  enabled: z.ZodDefault<z.ZodBoolean>;
598
630
  pty: z.ZodOptional<z.ZodBoolean>;
@@ -649,6 +681,14 @@ export declare const OpenTeamConfigSchema: z.ZodObject<{
649
681
  }, z.core.$strict>>;
650
682
  }, z.core.$strict>>;
651
683
  }, z.core.$strict>>;
684
+ lifecycle: z.ZodDefault<z.ZodObject<{
685
+ root: z.ZodDefault<z.ZodString>;
686
+ retention: z.ZodDefault<z.ZodObject<{
687
+ maxTerminalRuns: z.ZodDefault<z.ZodNumber>;
688
+ maxAgeDays: z.ZodDefault<z.ZodNumber>;
689
+ maxBytes: z.ZodDefault<z.ZodNumber>;
690
+ }, z.core.$strict>>;
691
+ }, z.core.$strict>>;
652
692
  graph: z.ZodDefault<z.ZodObject<{
653
693
  mode: z.ZodDefault<z.ZodEnum<{
654
694
  active: "active";
@@ -693,15 +733,17 @@ export type ExecutionMode = z.infer<typeof ExecutionModeSchema>;
693
733
  export type PrivacyMode = z.infer<typeof PrivacyModeSchema>;
694
734
  export type GraphMode = z.infer<typeof GraphModeSchema>;
695
735
  export type GraphConfig = z.infer<typeof GraphConfigSchema>;
736
+ export type LifecycleConfig = z.infer<typeof LifecycleConfigSchema>;
696
737
  export type LocalRuntime = z.infer<typeof LocalRuntimeSchema>;
697
738
  type ParsedConsoleConfig = z.infer<typeof ConsoleConfigSchema>;
698
739
  export type ConsoleConfig = Omit<ParsedConsoleConfig, "graphView"> & {
699
740
  readonly graphView?: ParsedConsoleConfig["graphView"];
700
741
  };
701
742
  type ParsedOpenTeamConfig = z.infer<typeof OpenTeamConfigSchema>;
702
- export type OpenTeamConfig = Omit<ParsedOpenTeamConfig, "console" | "graph"> & {
743
+ export type OpenTeamConfig = Omit<ParsedOpenTeamConfig, "console" | "graph" | "lifecycle"> & {
703
744
  readonly console: ConsoleConfig;
704
745
  readonly graph?: ParsedOpenTeamConfig["graph"];
746
+ readonly lifecycle?: ParsedOpenTeamConfig["lifecycle"];
705
747
  };
706
748
  export type StorageConfig = z.infer<typeof StorageConfigSchema>;
707
749
  export type MemoryConfig = z.infer<typeof MemoryConfigSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * composición de paneles. No contienen datos de usuario; el `render.ts` escapa
5
5
  * todo el contenido dinámico antes de insertarlo.
6
6
  */
7
- export declare const CONSOLE_STYLE = "\n:root{color-scheme:dark;--bg:#0f0f0f;--surface:#17181b;--surface-2:#1e2024;--panel:var(--surface);--fg:#eceef1;--muted:#a2a8b2;--faint:#6b7079;--border:rgba(255,255,255,.08);--border-strong:rgba(255,255,255,.16);--line:var(--border);--accent:#35c07a;--accent-bg:rgba(53,192,122,.12);--accent-fg:#57d492;--good:var(--accent-fg);--local:#6aa6f5;--frontier:#e0a53a;--warn:#e0a53a;--warn-bg:rgba(224,165,58,.12);--danger:#f0687f;--danger-bg:rgba(240,104,127,.12);--info:#6aa6f5;--info-bg:rgba(106,166,245,.12);--font-sans:-apple-system,BlinkMacSystemFont,\"Segoe UI\",system-ui,sans-serif;--font-mono:\"JetBrains Mono\",\"IBM Plex Mono\",ui-monospace,\"SFMono-Regular\",Consolas,monospace;--shadow-pop:0 8px 28px rgba(0,0,0,.5);--sidebar-w:248px}\n*{box-sizing:border-box;margin:0;padding:0}\nhtml,body{height:100%}\nbody{background:var(--bg);color:var(--fg);font:14px/1.55 var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-variant-numeric:tabular-nums}\n.mono,code,.hash{font-family:var(--font-mono);font-variant-numeric:tabular-nums}\nbutton{font:inherit;cursor:pointer}\nbutton:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:1px}\n::selection{background:var(--accent-bg)}\n.app{display:grid;grid-template-columns:var(--sidebar-w) 1fr;grid-template-rows:100vh;min-height:100vh}\n.sidebar{background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;min-height:0}\n.brand{display:flex;align-items:center;gap:10px;padding:18px 18px 16px;border-bottom:1px solid var(--border)}\n.logo{width:26px;height:26px;border-radius:6px;background:var(--accent);color:#fff;display:grid;place-items:center;flex:none}\n.logo svg{width:15px;height:15px}.brand .name{font-weight:600;letter-spacing:-.01em}.brand .tag{font:10px/1 var(--font-mono);letter-spacing:.08em;color:var(--accent-fg);background:var(--accent-bg);padding:3px 6px;border-radius:4px;margin-left:auto;text-transform:uppercase}\n.nav{padding:10px;display:flex;flex-direction:column;gap:2px}.nav-label{font:10px/1 var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint);padding:14px 8px 6px}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:7px;color:var(--muted);background:transparent;border:0;width:100%;text-align:left;letter-spacing:-.005em;transition:background .12s,color .12s}.nav-item svg{width:17px;height:17px;flex:none}.nav-item .count{margin-left:auto;font:11px/1 var(--font-mono);color:var(--faint)}.nav-item .pill{margin-left:auto}.nav-item:hover{background:var(--surface-2);color:var(--fg)}.nav-item[aria-current=\"page\"]{background:var(--accent-bg);color:var(--accent-fg);font-weight:550}.nav-item[aria-current=\"page\"] .count{color:var(--accent-fg)}\n.sidebar-foot{margin-top:auto;padding:14px 16px;border-top:1px solid var(--border);font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:8px}.host-row{display:flex;align-items:center;gap:8px}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none;background:var(--muted)}.dot.live,.dot.status-running{background:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}.dot.warn,.dot.status-waiting-input{background:var(--warn)}.dot.down{background:var(--danger)}.dot.status-idle{background:var(--muted)}.dot.status-ended{background:#6e7681}\n.main{min-width:0;min-height:0;display:flex;flex-direction:column}.topbar{height:56px;flex:none;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface) 82%,transparent);backdrop-filter:blur(8px);display:flex;align-items:center;gap:14px;padding:0 20px}.topbar h1{font-size:15px;font-weight:600;letter-spacing:-.01em}.refresh,.token-chip{display:inline-flex;align-items:center;gap:7px;font:11px/1 var(--font-mono);color:var(--muted);padding:5px 9px;border:1px solid var(--border);border-radius:6px;background:var(--surface)}.refresh .beat{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:beat 2s ease-in-out infinite}@keyframes beat{0%,100%{opacity:1}50%{opacity:.25}}.spacer{margin-left:auto}.icon-btn{width:34px;height:34px;border-radius:7px;border:1px solid var(--border);background:var(--surface);color:var(--muted);display:grid;place-items:center;transition:background .12s,color .12s,border-color .12s}.icon-btn:hover{background:var(--surface-2);color:var(--fg);border-color:var(--border-strong)}.icon-btn svg{width:17px;height:17px}.token-chip b{color:var(--fg);font-weight:600}\n.scroll{flex:1;overflow-y:auto;min-height:0}.screen{display:none;padding:22px 24px 40px;max-width:1320px}.screen.active{display:block}.screen[hidden]{display:none!important}.screen-head{margin-bottom:18px}.screen-head h2{font-size:19px;font-weight:600;letter-spacing:-.02em;display:flex;align-items:center;gap:8px}.screen-head p{color:var(--muted);font-size:13px;margin-top:3px;max-width:74ch;text-wrap:pretty}.screen-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}.screen-grid .wide,.panel.wide{grid-column:1/-1}\n.panel,.card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:16px}.panel h2,.panel h3,.card-head h3{font-size:13px;margin:0 0 12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.card-head{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--border);margin:-16px -16px 14px}.card-head .sub{font:11px/1 var(--font-mono);color:var(--faint);margin-left:auto}.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.stat{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:15px 16px;display:flex;flex-direction:column;gap:2px}.stat .k{font:11px/1 var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--faint)}.stat .v{font-size:20px;font-weight:600;letter-spacing:-.02em;margin-top:6px}.stat .d{font-size:12px;color:var(--muted);margin-top:4px;display:flex;align-items:center;gap:6px}.good{color:var(--good)}.local{color:var(--local)}.frontier{color:var(--frontier)}.muted{color:var(--muted)}.faint{color:var(--faint)}\ntable{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--border)}th{font:11px/1 var(--font-mono);letter-spacing:.05em;text-transform:uppercase;color:var(--faint);font-weight:500}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:var(--surface-2)}td.num{text-align:right;font-family:var(--font-mono)}.hash{color:var(--faint)}\n.pill,.badge{display:inline-flex;align-items:center;gap:5px;font:11px/1 var(--font-mono);letter-spacing:.02em;padding:3px 8px;border-radius:999px;border:1px solid transparent}.pill.local,.badge.status-running{color:var(--accent-fg);background:var(--accent-bg);border-color:var(--accent-bg)}.pill.frontier{color:var(--info);background:var(--info-bg)}.pill.warn,.badge.status-waiting-input{color:var(--warn);background:var(--warn-bg);border-color:var(--warn-bg)}.pill.danger{color:var(--danger);background:var(--danger-bg)}.pill.idle,.badge.status-idle,.badge.status-ended{color:var(--muted);background:var(--surface-2)}\n.progress{height:10px;background:var(--surface-2);border-radius:6px;overflow:hidden;border:1px solid var(--border)}.progress .bar{height:100%;background:var(--accent)}ul.items,ul.timeline{list-style:none;margin:8px 0 0;padding:0;max-height:320px;overflow:auto}ul.items li,ul.timeline li{padding:6px 0;border-bottom:1px solid var(--border)}ul.items li.done{color:var(--muted)}ul.items .box{font-family:var(--font-mono)}.who{color:var(--local)}.tag{color:var(--frontier);font-size:12px}.kind{display:inline-block;min-width:66px;color:var(--muted);font-size:12px}code{background:var(--bg);padding:1px 5px;border-radius:4px}\n.logs-layout{display:grid;grid-template-columns:220px 1fr;gap:16px;align-items:start;margin-bottom:16px}.session-list{padding:6px;max-height:70vh;overflow-y:auto}.session-btn{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;border-radius:7px;border:0;background:transparent;color:var(--muted);text-align:left;font:12px/1.3 var(--font-mono)}.session-btn:hover{background:var(--surface-2);color:var(--fg)}.session-btn.sel,.session-btn[aria-selected=\"true\"]{background:var(--accent-bg);color:var(--accent-fg)}.session-btn .sid{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-btn .n{margin-left:auto;color:var(--faint)}.session-detail{display:flex;flex-direction:column;gap:16px}.session-detail[hidden]{display:none}.empty-state{padding:28px;text-align:center;color:var(--muted)}\n.term .termlog,.pty .ptylog{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px;max-height:340px;overflow:auto;font-family:var(--font-mono);font-size:12px;white-space:pre-wrap}.term .tl{padding:1px 0}.term .tl.input{color:var(--local)}.term .tl.tool{color:var(--frontier)}.term .tl.status{color:var(--muted)}.term .tl.error{color:var(--danger)}.term .tl.permission{color:var(--frontier);font-weight:600}.term form.terminput,.pty form.ptyinput{display:flex;gap:8px;margin-top:10px}.term form.terminput input,.pty form.ptyinput input{flex:1;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:8px;padding:8px 10px;font:inherit}.term form.terminput button{background:var(--local);color:#04122b;border:none;border-radius:8px;padding:8px 16px;font:inherit;font-weight:600}.pty .ptylog{background:#05070a;color:#c8d1dc}.pty form.ptyinput button,.pty .pty-start{background:var(--frontier);color:#1a1200;border:none;border-radius:8px;padding:8px 16px;font:inherit;font-weight:600;margin-top:8px}.pty .pty-start:disabled{opacity:.5;cursor:default}\n.config-panel{grid-column:1/-1}.config-form{display:flex;flex-direction:column;gap:12px}.config-note{margin:0;font-size:12px;color:var(--muted)}.config-note.config-overlay{color:var(--frontier)}.reload-legend h3,.config-summary h4{font-size:12px;margin:0 0 6px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.reload-table{width:100%}.reload-table th{white-space:nowrap;vertical-align:top;width:1%}.reload-table th.reload-hot{color:var(--good)}.reload-table th.reload-restart{color:var(--frontier)}.config-label{font-size:12px;color:var(--muted)}.config-json{width:100%;min-height:280px;resize:vertical;background:var(--bg);color:var(--fg);border:1px solid var(--border-strong);border-radius:8px;padding:10px;font-family:var(--font-mono);font-size:12px;line-height:1.5}.config-actions{display:flex;gap:8px}.config-save{background:var(--accent);color:#fff;border:0;border-radius:8px;padding:8px 16px;font-weight:600;cursor:pointer}.config-save:disabled{opacity:.5;cursor:default}.config-result:empty{display:none}.config-summary{border:1px solid var(--border);border-radius:8px;padding:12px;margin-top:4px}.config-ok{margin:0 0 8px;color:var(--good);font-weight:600}.config-err{margin:0;color:var(--frontier);font-weight:600}.config-applied h4{color:var(--good)}.config-restart h4{color:var(--frontier)}.config-warn{margin:0 0 6px;color:var(--frontier);font-size:13px}.config-summary ul{margin:0;padding-left:18px}.config-summary li{padding:2px 0;border:0}\n.diag-banner{border-bottom:1px solid color-mix(in srgb,var(--warn) 40%,transparent);background:var(--warn-bg);color:var(--warn);padding:10px 20px;font-size:13px}.graph-panel{min-height:240px}.graph-disabled,.graph-empty{border:1px solid var(--border);border-radius:8px;padding:14px;background:var(--surface-2)}.graph-empty{border-color:color-mix(in srgb,var(--info) 35%,var(--border));background:var(--info-bg)}.graph-disabled .hint{margin-top:6px}.scrim{display:none}.menu-btn{display:none}\n@media (max-width:900px){.app{grid-template-columns:1fr}.sidebar{position:fixed;inset:0 auto 0 0;width:280px;z-index:50;transform:translateX(-100%);transition:transform .22s ease}body.nav-open .sidebar{transform:translateX(0);box-shadow:var(--shadow-pop)}body.nav-open .scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:40}.menu-btn{display:grid}.logs-layout{grid-template-columns:1fr}.grid{grid-template-columns:1fr}.token-chip .lbl{display:none}}\n@media (max-width:560px){.screen{padding:16px 14px 32px}.screen-grid{grid-template-columns:1fr}.topbar{padding:0 14px}.refresh{display:none}}\n@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important}}\n";
7
+ export declare const CONSOLE_STYLE = "\n:root{color-scheme:dark;--bg:#0f0f0f;--surface:#17181b;--surface-2:#1e2024;--panel:var(--surface);--fg:#eceef1;--muted:#a2a8b2;--faint:#6b7079;--border:rgba(255,255,255,.08);--border-strong:rgba(255,255,255,.16);--line:var(--border);--accent:#35c07a;--accent-bg:rgba(53,192,122,.12);--accent-fg:#57d492;--good:var(--accent-fg);--local:#6aa6f5;--frontier:#e0a53a;--warn:#e0a53a;--warn-bg:rgba(224,165,58,.12);--danger:#f0687f;--danger-bg:rgba(240,104,127,.12);--info:#6aa6f5;--info-bg:rgba(106,166,245,.12);--font-sans:-apple-system,BlinkMacSystemFont,\"Segoe UI\",system-ui,sans-serif;--font-mono:\"JetBrains Mono\",\"IBM Plex Mono\",ui-monospace,\"SFMono-Regular\",Consolas,monospace;--shadow-pop:0 8px 28px rgba(0,0,0,.5);--sidebar-w:248px}\n*{box-sizing:border-box;margin:0;padding:0}\n[data-log-controls]{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:16px}\n[data-log-controls] input,[data-log-controls] button{padding:6px;border:1px solid var(--cp-border);border-radius:.625rem;background:var(--cp-surface);color:var(--cp-text)}\n[data-session-target][hidden]{display:none}\nhtml,body{height:100%}\nbody{background:var(--bg);color:var(--fg);font:14px/1.55 var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-variant-numeric:tabular-nums}\n.mono,code,.hash{font-family:var(--font-mono);font-variant-numeric:tabular-nums}\nbutton{font:inherit;cursor:pointer}\nbutton:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:1px}\n::selection{background:var(--accent-bg)}\n.app{display:grid;grid-template-columns:var(--sidebar-w) 1fr;grid-template-rows:100vh;min-height:100vh}\n.sidebar{background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;min-height:0}\n.brand{display:flex;align-items:center;gap:10px;padding:18px 18px 16px;border-bottom:1px solid var(--border)}\n.logo{width:26px;height:26px;border-radius:6px;background:var(--accent);color:#fff;display:grid;place-items:center;flex:none}\n.logo svg{width:15px;height:15px}.brand .name{font-weight:600;letter-spacing:-.01em}.brand .tag{font:10px/1 var(--font-mono);letter-spacing:.08em;color:var(--accent-fg);background:var(--accent-bg);padding:3px 6px;border-radius:4px;margin-left:auto;text-transform:uppercase}\n.nav{padding:10px;display:flex;flex-direction:column;gap:2px}.nav-label{font:10px/1 var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint);padding:14px 8px 6px}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:7px;color:var(--muted);background:transparent;border:0;width:100%;text-align:left;letter-spacing:-.005em;transition:background .12s,color .12s}.nav-item svg{width:17px;height:17px;flex:none}.nav-item .count{margin-left:auto;font:11px/1 var(--font-mono);color:var(--faint)}.nav-item .pill{margin-left:auto}.nav-item:hover{background:var(--surface-2);color:var(--fg)}.nav-item[aria-current=\"page\"]{background:var(--accent-bg);color:var(--accent-fg);font-weight:550}.nav-item[aria-current=\"page\"] .count{color:var(--accent-fg)}\n.sidebar-foot{margin-top:auto;padding:14px 16px;border-top:1px solid var(--border);font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:8px}.host-row{display:flex;align-items:center;gap:8px}.dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none;background:var(--muted)}.dot.live,.dot.status-running{background:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}.dot.warn,.dot.status-waiting-input{background:var(--warn)}.dot.down{background:var(--danger)}.dot.status-idle{background:var(--muted)}.dot.status-ended{background:#6e7681}\n.main{min-width:0;min-height:0;display:flex;flex-direction:column}.topbar{height:56px;flex:none;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface) 82%,transparent);backdrop-filter:blur(8px);display:flex;align-items:center;gap:14px;padding:0 20px}.topbar h1{font-size:15px;font-weight:600;letter-spacing:-.01em}.refresh,.token-chip{display:inline-flex;align-items:center;gap:7px;font:11px/1 var(--font-mono);color:var(--muted);padding:5px 9px;border:1px solid var(--border);border-radius:6px;background:var(--surface)}.refresh .beat{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:beat 2s ease-in-out infinite}@keyframes beat{0%,100%{opacity:1}50%{opacity:.25}}.spacer{margin-left:auto}.icon-btn{width:34px;height:34px;border-radius:7px;border:1px solid var(--border);background:var(--surface);color:var(--muted);display:grid;place-items:center;transition:background .12s,color .12s,border-color .12s}.icon-btn:hover{background:var(--surface-2);color:var(--fg);border-color:var(--border-strong)}.icon-btn svg{width:17px;height:17px}.token-chip b{color:var(--fg);font-weight:600}\n.scroll{flex:1;overflow-y:auto;min-height:0}.screen{display:none;padding:22px 24px 40px;max-width:1320px}.screen.active{display:block}.screen[hidden]{display:none!important}.screen-head{margin-bottom:18px}.screen-head h2{font-size:19px;font-weight:600;letter-spacing:-.02em;display:flex;align-items:center;gap:8px}.screen-head p{color:var(--muted);font-size:13px;margin-top:3px;max-width:74ch;text-wrap:pretty}.screen-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}.screen-grid .wide,.panel.wide{grid-column:1/-1}\n.panel,.card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:16px}.panel h2,.panel h3,.card-head h3{font-size:13px;margin:0 0 12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.card-head{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--border);margin:-16px -16px 14px}.card-head .sub{font:11px/1 var(--font-mono);color:var(--faint);margin-left:auto}.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.stat{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:15px 16px;display:flex;flex-direction:column;gap:2px}.stat .k{font:11px/1 var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--faint)}.stat .v{font-size:20px;font-weight:600;letter-spacing:-.02em;margin-top:6px}.stat .d{font-size:12px;color:var(--muted);margin-top:4px;display:flex;align-items:center;gap:6px}.good{color:var(--good)}.local{color:var(--local)}.frontier{color:var(--frontier)}.muted{color:var(--muted)}.faint{color:var(--faint)}\ntable{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--border)}th{font:11px/1 var(--font-mono);letter-spacing:.05em;text-transform:uppercase;color:var(--faint);font-weight:500}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:var(--surface-2)}td.num{text-align:right;font-family:var(--font-mono)}.hash{color:var(--faint)}\n.pill,.badge{display:inline-flex;align-items:center;gap:5px;font:11px/1 var(--font-mono);letter-spacing:.02em;padding:3px 8px;border-radius:999px;border:1px solid transparent}.pill.local,.badge.status-running{color:var(--accent-fg);background:var(--accent-bg);border-color:var(--accent-bg)}.pill.frontier{color:var(--info);background:var(--info-bg)}.pill.warn,.badge.status-waiting-input{color:var(--warn);background:var(--warn-bg);border-color:var(--warn-bg)}.pill.danger{color:var(--danger);background:var(--danger-bg)}.pill.idle,.badge.status-idle,.badge.status-ended{color:var(--muted);background:var(--surface-2)}\n.progress{height:10px;background:var(--surface-2);border-radius:6px;overflow:hidden;border:1px solid var(--border)}.progress .bar{height:100%;background:var(--accent)}ul.items,ul.timeline{list-style:none;margin:8px 0 0;padding:0;max-height:320px;overflow:auto}ul.items li,ul.timeline li{padding:6px 0;border-bottom:1px solid var(--border)}ul.items li.done{color:var(--muted)}ul.items .box{font-family:var(--font-mono)}.who{color:var(--local)}.tag{color:var(--frontier);font-size:12px}.kind{display:inline-block;min-width:66px;color:var(--muted);font-size:12px}code{background:var(--bg);padding:1px 5px;border-radius:4px}\n.logs-layout{display:grid;grid-template-columns:220px 1fr;gap:16px;align-items:start;margin-bottom:16px}.session-list{padding:6px;max-height:70vh;overflow-y:auto}.session-btn{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;border-radius:7px;border:0;background:transparent;color:var(--muted);text-align:left;font:12px/1.3 var(--font-mono)}.session-btn:hover{background:var(--surface-2);color:var(--fg)}.session-btn.sel,.session-btn[aria-selected=\"true\"]{background:var(--accent-bg);color:var(--accent-fg)}.session-btn .sid{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-btn .n{margin-left:auto;color:var(--faint)}.session-detail{display:flex;flex-direction:column;gap:16px}.session-detail[hidden]{display:none}.empty-state{padding:28px;text-align:center;color:var(--muted)}\n.term .termlog,.pty .ptylog{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px;max-height:340px;overflow:auto;font-family:var(--font-mono);font-size:12px;white-space:pre-wrap}.term .tl{padding:1px 0}.term .tl.input{color:var(--local)}.term .tl.tool{color:var(--frontier)}.term .tl.status{color:var(--muted)}.term .tl.error{color:var(--danger)}.term .tl.permission{color:var(--frontier);font-weight:600}.term form.terminput,.pty form.ptyinput{display:flex;gap:8px;margin-top:10px}.term form.terminput input,.pty form.ptyinput input{flex:1;background:var(--bg);color:var(--fg);border:1px solid var(--border);border-radius:8px;padding:8px 10px;font:inherit}.term form.terminput button{background:var(--local);color:#04122b;border:none;border-radius:8px;padding:8px 16px;font:inherit;font-weight:600}.pty .ptylog{background:#05070a;color:#c8d1dc}.pty form.ptyinput button,.pty .pty-start{background:var(--frontier);color:#1a1200;border:none;border-radius:8px;padding:8px 16px;font:inherit;font-weight:600;margin-top:8px}.pty .pty-start:disabled{opacity:.5;cursor:default}\n.config-panel{grid-column:1/-1}.config-form{display:flex;flex-direction:column;gap:12px}.config-note{margin:0;font-size:12px;color:var(--muted)}.config-note.config-overlay{color:var(--frontier)}.reload-legend h3,.config-summary h4{font-size:12px;margin:0 0 6px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.reload-table{width:100%}.reload-table th{white-space:nowrap;vertical-align:top;width:1%}.reload-table th.reload-hot{color:var(--good)}.reload-table th.reload-restart{color:var(--frontier)}.config-label{font-size:12px;color:var(--muted)}.config-json{width:100%;min-height:280px;resize:vertical;background:var(--bg);color:var(--fg);border:1px solid var(--border-strong);border-radius:8px;padding:10px;font-family:var(--font-mono);font-size:12px;line-height:1.5}.config-actions{display:flex;gap:8px}.config-save{background:var(--accent);color:#fff;border:0;border-radius:8px;padding:8px 16px;font-weight:600;cursor:pointer}.config-save:disabled{opacity:.5;cursor:default}.config-result:empty{display:none}.config-summary{border:1px solid var(--border);border-radius:8px;padding:12px;margin-top:4px}.config-ok{margin:0 0 8px;color:var(--good);font-weight:600}.config-err{margin:0;color:var(--frontier);font-weight:600}.config-applied h4{color:var(--good)}.config-restart h4{color:var(--frontier)}.config-warn{margin:0 0 6px;color:var(--frontier);font-size:13px}.config-summary ul{margin:0;padding-left:18px}.config-summary li{padding:2px 0;border:0}\n.diag-banner{border-bottom:1px solid color-mix(in srgb,var(--warn) 40%,transparent);background:var(--warn-bg);color:var(--warn);padding:10px 20px;font-size:13px}.graph-panel{min-height:240px}.graph-disabled,.graph-empty{border:1px solid var(--border);border-radius:8px;padding:14px;background:var(--surface-2)}.graph-empty{border-color:color-mix(in srgb,var(--info) 35%,var(--border));background:var(--info-bg)}.graph-disabled .hint{margin-top:6px}.scrim{display:none}.menu-btn{display:none}\n@media (max-width:900px){.app{grid-template-columns:1fr}.sidebar{position:fixed;inset:0 auto 0 0;width:280px;z-index:50;transform:translateX(-100%);transition:transform .22s ease}body.nav-open .sidebar{transform:translateX(0);box-shadow:var(--shadow-pop)}body.nav-open .scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:40}.menu-btn{display:grid}.logs-layout{grid-template-columns:1fr}.grid{grid-template-columns:1fr}.token-chip .lbl{display:none}}\n@media (max-width:560px){.screen{padding:16px 14px 32px}.screen-grid{grid-template-columns:1fr}.topbar{padding:0 14px}.refresh{display:none}}\n@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important}}\n";
8
8
  /**
9
9
  * Estilos del render del grafo de agentes (GE-083). Se inyectan en el `<style>`
10
10
  * **solo** cuando la vista del grafo está habilitada, de modo que con la vista
@@ -13,5 +13,26 @@ export declare const CONSOLE_STYLE = "\n:root{color-scheme:dark;--bg:#0f0f0f;--s
13
13
  * cancelación/veredicto/linaje/artefacto).
14
14
  */
15
15
  export declare const GRAPH_STYLE = "\n.graph-wrap{overflow:auto;background:#0b0d11;border:1px solid var(--line);border-radius:8px;padding:8px}\nsvg.graph{display:block}\n.gedge{stroke:#3a4250;stroke-width:1.5;marker-end:url(#garrow)}\n.gnode rect{fill:var(--panel);stroke:var(--line);stroke-width:1.5;rx:8}\n.gnode .gname{fill:var(--fg);font:600 12px ui-monospace,Consolas,monospace}\n.gnode .grole{fill:var(--muted);font-size:11px}\n.gnode .gstate{font-size:10px;text-transform:uppercase;letter-spacing:.05em}\n.gnode.state-pending rect{stroke:#6e7681}\n.gnode.state-pending .gstate{fill:#6e7681}\n.gnode.state-ready rect{stroke:var(--local)}\n.gnode.state-ready .gstate{fill:var(--local)}\n.gnode.state-active rect{stroke:var(--frontier)}\n.gnode.state-active .gstate{fill:var(--frontier)}\n.gnode.state-succeeded rect{stroke:var(--good)}\n.gnode.state-succeeded .gstate{fill:var(--good)}\n.gnode.state-failed rect{stroke:#f85149}\n.gnode.state-failed .gstate{fill:#f85149}\n.gnode.state-cancelled rect{stroke:#484f58}\n.gnode.state-cancelled .gstate{fill:#484f58}\n.gbadge{font-size:10px;font-family:ui-monospace,Consolas,monospace}\n.gbadge.badge-retry{fill:var(--frontier)}\n.gbadge.badge-error{fill:#f85149}\n.gbadge.badge-cancelled{fill:#484f58}\n.gbadge.badge-verdict.verdict-approved{fill:var(--good)}\n.gbadge.badge-verdict.verdict-rejected{fill:#f85149}\n.gbadge.badge-verdict.verdict-inconclusive{fill:var(--frontier)}\n.gbadge.badge-lineage{fill:var(--local)}\n.gbadge.badge-artifact{fill:var(--muted)}\n.gnode[data-session]{cursor:pointer}\n.gnode[data-session]:hover rect{stroke-width:2.5}\n.graph-health{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}\n.gchip{font-size:11px;padding:2px 10px;border-radius:10px;border:1px solid var(--line);color:var(--muted)}\n.gchip.on{font-weight:600}\n.gchip.gh-recovery.on,.gchip.gh-unknown.on{color:var(--frontier);border-color:var(--frontier)}\n.gchip.gh-conflict.on,.gchip.gh-kill.on{color:#f85149;border-color:#f85149}\n.graph-drill{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}\n.graph-drill h3{font-size:13px;margin:0 0 8px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}\n.graph-drill .drilllog{background:#0b0d11;border:1px solid var(--line);border-radius:8px;padding:10px;max-height:280px;overflow:auto;font-family:ui-monospace,Consolas,monospace;font-size:12px;white-space:pre-wrap}\n.graph-drill .drilllog .tl{padding:1px 0}\n.graph-drill .drilllog .tl.tool{color:var(--frontier)}\n.graph-drill .drilllog .tl.status{color:var(--muted)}\n.graph-drill .drilllog .tl.permission{color:var(--frontier);font-weight:600}\n.graph-drill .drilllog .tl.error{color:#f85149}\n";
16
- export declare const CONSOLE_CLIENT_JS = "\n(function(){\n var authTok='';\n try{\n var qp=new URLSearchParams(window.location.search).get('token');\n if(qp){authTok='?token='+encodeURIComponent(qp)}\n }catch(e){/* ignore */}\n function reloadIfChanged(prev){\n fetch('/api/state'+authTok).then(function(r){return r.json()}).then(function(s){\n if(s.generatedAt!==prev&&!configActive()){location.reload()}\n }).catch(function(){});\n }\n var current=document.documentElement.getAttribute('data-generated')||'';\n if('EventSource' in window){\n try{\n var es=new EventSource('/events'+authTok);\n es.addEventListener('state',function(){if(!configActive()){location.reload()}});\n es.onerror=function(){/* fallback below */};\n }catch(e){/* ignore */}\n }\n var ms=parseInt(document.documentElement.getAttribute('data-refresh')||'2000',10);\n setInterval(function(){reloadIfChanged(current)},isNaN(ms)?2000:Math.max(250,ms));\n\n function configActive(){\n var s=document.getElementById('screen-config');\n return !!(s&&!s.hidden);\n }\n function wireLogsScreen(screen){\n if(screen.__logsWired){return}\n screen.__logsWired=true;\n var buttons=screen.querySelectorAll('[data-session-target]');\n var cards=screen.querySelectorAll('[data-session-view]');\n function showSession(id){\n var matched=false;\n for(var i=0;i<buttons.length;i++){\n var on=buttons[i].getAttribute('data-session-target')===id;\n buttons[i].classList.toggle('sel',on);\n buttons[i].setAttribute('aria-selected',on?'true':'false');\n }\n for(var j=0;j<cards.length;j++){\n var show=cards[j].getAttribute('data-session-view')===id;\n cards[j].hidden=!show;\n if(show){matched=true;connectTerminal(cards[j],id)}\n }\n return matched;\n }\n for(var k=0;k<buttons.length;k++){\n buttons[k].addEventListener('click',function(e){\n var id=e.currentTarget.getAttribute('data-session-target');\n if(id){showSession(id)}\n });\n }\n if(buttons.length>0){\n showSession(buttons[0].getAttribute('data-session-target'));\n }\n }\n function selectScreen(name){\n var screens=document.querySelectorAll('.screen');\n var items=document.querySelectorAll('[data-screen]');\n var matched=false;\n var titleText='';\n var activeScreen=null;\n for(var i=0;i<screens.length;i++){\n var show=screens[i].id==='screen-'+name;\n screens[i].classList.toggle('active',show);\n screens[i].hidden=!show;\n if(show){matched=true;activeScreen=screens[i]}\n }\n if(!matched){return false}\n for(var j=0;j<items.length;j++){\n var on=items[j].getAttribute('data-screen')===name;\n if(on){\n items[j].setAttribute('aria-current','page');\n titleText=items[j].getAttribute('data-title')||'';\n }else{\n items[j].removeAttribute('aria-current');\n }\n }\n var title=document.getElementById('screen-title');\n if(title){title.textContent=titleText}\n if(name==='config'&&activeScreen){loadConfig(activeScreen)}\n if(name==='logs'&&activeScreen){wireLogsScreen(activeScreen)}\n try{localStorage.setItem('openteam.screen',name)}catch(e){}\n document.body.classList.remove('nav-open');\n return true;\n }\n function esc(s){return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')}\n // Config editor (W7-S09 / #193). The config values travel only over the\n // token-gated /api/config, never in this open page, so the browser fetches\n // the server-rendered form with the bearer token and injects it. The\n // applied/pending-restart summary is likewise server-rendered and injected\n // verbatim, so the P14 honesty is enforced server-side, not here.\n function loadConfig(view){\n var root=document.documentElement;\n if(root.getAttribute('data-config')!=='1'||view.__configWired){return}\n var mount=view.querySelector('[data-config-mount]');\n if(!mount){return}\n var token=root.getAttribute('data-token');\n if(!token){mount.innerHTML='<p class=\"muted\">Read-only: no console token present.</p>';return}\n view.__configWired=true;\n fetch('/api/config',{headers:{Authorization:'Bearer '+token}})\n .then(function(r){return r.json()})\n .then(function(d){\n mount.innerHTML=d.render||'<p class=\"config-err\">Could not load configuration.</p>';\n wireConfigForm(mount,token);\n })\n .catch(function(){view.__configWired=false;mount.innerHTML='<p class=\"config-err\">Could not load configuration.</p>'});\n }\n function wireConfigForm(mount,token){\n var form=mount.querySelector('[data-config-form]');\n if(!form){return}\n var out=form.querySelector('[data-config-result]');\n form.addEventListener('submit',function(e){\n e.preventDefault();\n var ta=form.querySelector('textarea[name=\"config\"]');\n var parsed;\n try{parsed=JSON.parse(ta.value)}catch(err){out.innerHTML='<div class=\"config-summary\"><p class=\"config-err\">Invalid JSON: '+esc(err.message||err)+'</p></div>';return}\n var btn=form.querySelector('.config-save');\n if(btn){btn.disabled=true}\n fetch('/api/config',{method:'POST',headers:{Authorization:'Bearer '+token,'content-type':'application/json'},body:JSON.stringify(parsed)})\n .then(function(r){return r.json().then(function(b){return{status:r.status,body:b}})})\n .then(function(res){\n if(btn){btn.disabled=false}\n if(res.status===200){out.innerHTML=res.body.render||''}\n else{out.innerHTML='<div class=\"config-summary\"><p class=\"config-err\">'+esc(res.body&&res.body.error?res.body.error:'Save failed.')+'</p></div>'}\n })\n .catch(function(){if(btn){btn.disabled=false}out.innerHTML='<div class=\"config-summary\"><p class=\"config-err\">Save failed.</p></div>'});\n });\n }\n function connectTerminal(view,id){\n if(view.__wired){return}\n var root=document.documentElement;\n var token=root.getAttribute('data-token');\n if(root.getAttribute('data-terminal')!=='1'||!token){return}\n var log=view.querySelector('.termlog');\n if(!log){return}\n view.__wired=true;\n function append(cls,text){\n var line=document.createElement('div');\n line.className='tl '+cls;line.textContent=text;\n log.appendChild(line);log.scrollTop=log.scrollHeight;\n }\n var q='/console/session/'+encodeURIComponent(id);\n var tk='token='+encodeURIComponent(token);\n if('EventSource' in window){\n try{\n var es=new EventSource(q+'/stream?'+tk);\n es.addEventListener('frame',function(e){try{var f=JSON.parse(e.data);append(f.kind,f.text)}catch(_){}}); \n es.onerror=function(){/* reconnects on its own */};\n }catch(_){/* ignore */}\n }\n var form=view.querySelector('form.terminput');\n if(form){\n form.addEventListener('submit',function(e){\n e.preventDefault();\n var inp=form.querySelector('input[name=text]');\n var text=inp.value;\n if(!text){return}\n inp.value='';append('input','\u203A '+text);\n fetch(q+'/input?'+tk,{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({text:text})})\n .then(function(r){if(!r.ok){append('error','\u2716 send rejected ('+r.status+')')}})\n .catch(function(){append('error','\u2716 could not send')});\n });\n }\n connectPty(view,id,q,tk);\n }\n function connectPty(view,id,q,tk){\n var root=document.documentElement;\n if(root.getAttribute('data-pty')!=='1'){return}\n var pane=view.querySelector('.pty');\n if(!pane){return}\n var log=pane.querySelector('.ptylog');\n var startBtn=pane.querySelector('.pty-start');\n var input=pane.querySelector('form.ptyinput');\n function plog(text){\n var d=document.createElement('span');d.textContent=text;\n log.appendChild(d);log.scrollTop=log.scrollHeight;\n }\n if(!startBtn){return}\n startBtn.addEventListener('click',function(){\n startBtn.disabled=true;plog('Opening shell\u2026\n');\n fetch(q+'/pty?'+tk,{method:'POST',headers:{'content-type':'application/json'},body:'{}'})\n .then(function(r){return r.ok?r.json():Promise.reject(r.status)})\n .then(function(info){openPtyWs(info.wsUrl)})\n .catch(function(s){plog('\u2716 could not open PTY ('+s+')\n');startBtn.disabled=false});\n });\n function openPtyWs(url){\n try{\n var ws=new WebSocket(url);\n ws.binaryType='arraybuffer';\n ws.onmessage=function(e){\n var data=e.data;\n if(data instanceof ArrayBuffer){data=new TextDecoder().decode(new Uint8Array(data))}\n plog(data);\n };\n ws.onclose=function(){plog('\n[shell closed]\n');startBtn.disabled=false};\n ws.onerror=function(){plog('\n\u2716 WebSocket error\n')};\n if(input){\n input.hidden=false;\n input.addEventListener('submit',function(e){\n e.preventDefault();\n var c=input.querySelector('input[name=cmd]');\n if(!c.value){return}\n ws.send(c.value+'\r');c.value='';\n });\n }\n }catch(_){plog('\n\u2716 WebSocket unavailable\n');startBtn.disabled=false}\n }\n }\n function wireGraphDrill(){\n var root=document.documentElement;\n if(root.getAttribute('data-drilldown')!=='1'){return}\n var token=root.getAttribute('data-token');\n if(!token){return}\n var drill=document.querySelector('.graph-drill');\n if(!drill){return}\n var gview=drill.closest('.screen');\n if(!gview){return}\n var log=drill.querySelector('.drilllog');\n var title=drill.querySelector('.drill-title');\n if(!log){return}\n var es=null;\n function append(cls,text){\n var line=document.createElement('div');\n line.className='tl '+cls;line.textContent=text;\n log.appendChild(line);log.scrollTop=log.scrollHeight;\n }\n function open(id){\n if(es){try{es.close()}catch(_){}}\n log.textContent='';drill.hidden=false;\n if(title){title.textContent='Conversation \u00B7 '+id}\n var tk='token='+encodeURIComponent(token);\n var base='/console/session/'+encodeURIComponent(id);\n fetch(base+'/messages?'+tk).then(function(r){return r.ok?r.json():Promise.reject(r.status)})\n .then(function(d){(d&&d.frames||[]).forEach(function(f){append(f.kind,f.text)})})\n .catch(function(s){append('error','\u2716 could not load conversation ('+s+')')});\n if('EventSource' in window){\n try{\n es=new EventSource(base+'/stream?'+tk);\n es.addEventListener('frame',function(e){try{var f=JSON.parse(e.data);append(f.kind,f.text)}catch(_){}}); \n es.onerror=function(){/* reconnects on its own */};\n }catch(_){/* ignore */}\n }\n }\n gview.addEventListener('click',function(e){\n var t=e.target;\n while(t&&t!==gview&&!(t.getAttribute&&t.getAttribute('data-session'))){t=t.parentNode}\n if(t&&t.getAttribute&&t.getAttribute('data-session')){open(t.getAttribute('data-session'))}\n });\n }\n var nav=document.querySelector('.nav');\n if(nav){\n nav.addEventListener('click',function(e){\n var t=e.target;\n while(t&&t!==nav&&!(t.getAttribute&&t.getAttribute('data-screen'))){t=t.parentNode}\n if(t&&t.getAttribute&&t.getAttribute('data-screen')){selectScreen(t.getAttribute('data-screen'))}\n });\n }\n var toggle=document.querySelector('[data-toggle-nav]');\n if(toggle){toggle.addEventListener('click',function(){document.body.classList.toggle('nav-open')})}\n var close=document.querySelector('[data-close-nav]');\n if(close){close.addEventListener('click',function(){document.body.classList.remove('nav-open')})}\n var saved='tree';\n try{saved=localStorage.getItem('openteam.screen')||'tree'}catch(e){}\n if(!selectScreen(saved)){selectScreen('tree')}\n wireGraphDrill();\n})();\n";
16
+ export declare const CONSOLE_CLIENT_JS: string;
17
+ /**
18
+ * Styles for the lifecycle history timeline surface. Uses `var(--cp-*)` from
19
+ * the Clawpilot theme — injected only when lifecycle history is enabled.
20
+ * Theme detection (prefers-color-scheme / ?scoutTheme) is bootstrapped by
21
+ * LIFECYCLE_THEME_BOOT inserted once into the HTML <head>.
22
+ */
23
+ export declare const LIFECYCLE_STYLE = "\n:root {\n color-scheme: light;\n --cp-bg: #f7f4ef;\n --cp-bg-elevated: #fcfbf8;\n --cp-surface: #ffffff;\n --cp-surface-soft: #f5f5f5;\n --cp-border: #dedede;\n --cp-border-strong: #919191;\n --cp-text: #242424;\n --cp-text-muted: #5c5c5c;\n --cp-text-soft: #6f6f6f;\n --cp-accent: #b11f4b;\n --cp-accent-hover: #9a1a41;\n --cp-accent-soft: rgba(177, 31, 75, 0.08);\n --cp-accent-fg: #ffffff;\n --cp-success: #16a34a;\n --cp-danger: #dc2626;\n --cp-warning: #f59e0b;\n --cp-link: #0078d4;\n --cp-shadow: 0 18px 48px rgba(0, 0, 0, 0.12);\n --cp-overlay: rgba(255, 255, 255, 0.8);\n --cp-panel: rgba(255, 255, 255, 0.86);\n --cp-panel-strong: rgba(255, 255, 255, 0.96);\n --cp-sheen: rgba(255, 255, 255, 0.55);\n --cp-highlight: rgba(177, 31, 75, 0.12);\n --cp-card-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.14);\n}\nhtml[data-theme=\"dark\"] {\n color-scheme: dark;\n --cp-bg: #3d3b3a;\n --cp-bg-elevated: #343231;\n --cp-surface: #292929;\n --cp-surface-soft: #2e2e2e;\n --cp-border: #474747;\n --cp-border-strong: #5f5f5f;\n --cp-text: #dedede;\n --cp-text-muted: #919191;\n --cp-text-soft: #b0b0b0;\n --cp-accent: #fd8ea1;\n --cp-accent-hover: #fb7b91;\n --cp-accent-soft: rgba(253, 142, 161, 0.14);\n --cp-accent-fg: #1a1a1a;\n --cp-success: #4ade80;\n --cp-danger: #f87171;\n --cp-warning: #fbbf24;\n --cp-link: #4da6ff;\n --cp-shadow: 0 18px 48px rgba(0, 0, 0, 0.32);\n --cp-overlay: rgba(41, 41, 41, 0.88);\n --cp-panel: rgba(41, 41, 41, 0.72);\n --cp-panel-strong: rgba(41, 41, 41, 0.96);\n --cp-sheen: rgba(255, 255, 255, 0.04);\n --cp-highlight: rgba(253, 142, 161, 0.12);\n --cp-card-shadow: 0 0 2px rgba(0, 0, 0, 0.32), 0 1px 2px rgba(0, 0, 0, 0.36);\n}\n/* Clawpilot lifecycle hierarchy \u2014 scoped, no repaint of other Console screens. */\n.lifecycle-primary{background:var(--cp-bg-elevated);border-color:var(--cp-border)}\n.lc-host{box-sizing:border-box;color:var(--cp-text);font-family:\"Segoe UI\",Aptos,Calibri,-apple-system,BlinkMacSystemFont,sans-serif}\n.lc-host *{box-sizing:border-box}\n.lc-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}\n.lc-panel-head h3{margin:2px 0 0;color:var(--cp-text);font-size:18px}\n.lc-eyebrow{color:var(--cp-accent);font-size:10px;font-weight:700;letter-spacing:.09em;text-transform:uppercase}\n.lc-cursor-feedback{display:flex;flex-direction:column;align-items:flex-end;gap:3px;min-width:180px;color:var(--cp-text-muted)}\n.lc-cursor-count{font-family:Consolas,\"Courier New\",Courier,monospace;font-size:12px;font-weight:700;color:var(--cp-text)}\n.lc-cursor-time{font-family:Consolas,\"Courier New\",Courier,monospace;font-size:10px}\n.lc-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}\n.lc-run-select{min-width:180px;max-width:300px;padding:7px 28px 7px 10px;border:1px solid var(--cp-border);border-radius:.625rem;background:var(--cp-surface);color:var(--cp-text);font:inherit;font-size:12px}\n.lc-live-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border:1px solid var(--cp-border-strong);border-radius:.625rem;background:var(--cp-surface);color:var(--cp-text);font:600 12px inherit;cursor:pointer}\n.lc-live-btn.active{border-color:var(--cp-accent);background:var(--cp-accent);color:var(--cp-accent-fg)}\n.lc-live-btn:hover:not(:disabled){border-color:var(--cp-accent);color:var(--cp-accent)}\n.lc-live-btn.active:hover:not(:disabled){background:var(--cp-accent-hover);color:var(--cp-accent-fg)}\n.lc-live-btn.paused{border-color:var(--cp-accent);color:var(--cp-accent)}\n.lc-live-btn:disabled{opacity:.45;cursor:not-allowed}\n.lc-live-dot{width:7px;height:7px;border-radius:50%;background:var(--cp-text-muted)}\n.lc-live-btn.active .lc-live-dot{background:var(--cp-accent-fg)}\n.lc-activity{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border:1px solid var(--cp-border);border-radius:999px;background:var(--cp-surface);color:var(--cp-text-muted);font-size:11px}\n.lc-activity-dot{width:6px;height:6px;border-radius:50%;background:var(--cp-text-muted)}\n.lc-activity.active{border-color:var(--cp-success);color:var(--cp-success)}\n.lc-activity.active .lc-activity-dot{background:var(--cp-success);animation:lc-pulse 1.8s infinite}\n.lc-activity.unknown{border-color:var(--cp-warning);color:var(--cp-warning)}\n.lc-activity.unknown .lc-activity-dot{background:var(--cp-warning)}\n.lc-activity.terminal{border-color:var(--cp-border-strong);color:var(--cp-text-muted)}\n@keyframes lc-pulse{0%,100%{opacity:1}50%{opacity:.35}}\n.lc-incoming-badge{padding:4px 8px;border-radius:999px;background:var(--cp-accent-soft);color:var(--cp-accent);font-size:11px;font-weight:600}\n.lc-slider-row{display:flex;align-items:center;gap:10px;margin:8px 0 14px}\n.lc-slider{flex:1;min-width:120px;accent-color:var(--cp-accent)}\n.lc-slider:disabled{opacity:.4}\n.lc-counts{font-family:Consolas,\"Courier New\",Courier,monospace;font-size:11px;color:var(--cp-text-muted);white-space:nowrap}\n.lc-tree-mount{min-height:80px;max-height:min(70vh,760px);padding:4px 4px 16px;overflow:auto}\n.lc-empty,.lc-error,.lc-legacy-note,.lc-partial-note{padding:12px 14px;border:1px solid var(--cp-border);border-radius:.625rem;background:var(--cp-surface-soft);color:var(--cp-text-muted);font-size:12px}\n.lc-error{border-color:var(--cp-danger);color:var(--cp-danger);background:var(--cp-surface)}\n.lc-legacy-note,.lc-partial-note{border-color:var(--cp-warning);color:var(--cp-text);margin-bottom:10px}\n.lct-tree{min-width:42rem;padding:4px}\n.lct-operation{position:relative;display:block;min-width:38rem;margin:0 0 14px}\n.lct-operation-card{position:relative;z-index:1;padding:14px;border:1px solid var(--cp-border);border-left:4px solid var(--cp-accent);border-radius:16px;background:var(--cp-surface);box-shadow:var(--cp-card-shadow)}\n.lct-operation[data-op-state=\"succeeded\"]>.lct-operation-card{border-left-color:var(--cp-success)}\n.lct-operation[data-op-state=\"failed\"]>.lct-operation-card,.lct-operation[data-op-state=\"cancelled\"]>.lct-operation-card{border-left-color:var(--cp-danger)}\n.lct-operation-head,.lct-attempt-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}\n.lct-operation-label{display:block;margin-bottom:3px;color:var(--cp-text-muted);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}\n.lct-operation-id{display:block;max-width:48rem;overflow:hidden;color:var(--cp-text);font-size:13px;text-overflow:ellipsis;white-space:nowrap}\n.lct-state{display:inline-flex;flex:none;padding:3px 8px;border:1px solid var(--cp-border-strong);border-radius:999px;background:var(--cp-surface-soft);color:var(--cp-text);font-size:10px;font-weight:700}\n.lct-state[data-state=\"succeeded\"]{border-color:var(--cp-success);color:var(--cp-success)}\n.lct-state[data-state=\"failed\"],.lct-state[data-state=\"cancelled\"]{border-color:var(--cp-danger);color:var(--cp-danger)}\n.lct-state[data-state=\"running\"],.lct-state[data-state=\"queued\"],.lct-state[data-state=\"selected\"]{border-color:var(--cp-accent);color:var(--cp-accent)}\n.lct-operation-meta,.lct-attempt-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin:12px 0 0}\n.lct-meta-item{min-width:0}\n.lct-meta-item dt{margin:0 0 2px;color:var(--cp-text-muted);font-size:10px}\n.lct-meta-item dd{margin:0;overflow-wrap:anywhere;color:var(--cp-text);font-size:11px}\n.lct-dependencies,.lct-parent-reference{display:flex;align-items:flex-start;gap:8px;margin-top:12px;padding:9px 10px;border-left:3px solid var(--cp-warning);border-radius:.625rem;background:var(--cp-surface-soft);font-size:11px}\n.lct-relation-label,.lct-parent-reference>span:first-child{flex:none;color:var(--cp-text-muted);font-weight:700}\n.lct-dependencies ul{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}\n.lct-dependencies li{padding:2px 6px;border:1px dashed var(--cp-border-strong);border-radius:.625rem;background:var(--cp-surface)}\n.lct-missing-reference{color:var(--cp-danger);font-weight:700}\n.lct-attempts{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:10px;margin-top:14px}\n.lct-attempt{min-width:0;padding:11px;border:1px solid var(--cp-border);border-radius:.625rem;background:var(--cp-surface-soft)}\n.lct-attempt-head strong{font-size:12px}\n.lct-times{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:10px}\n.lct-time-item{display:flex;gap:5px;color:var(--cp-text-muted);font-size:10px}\n.lct-time-item time{font-family:Consolas,\"Courier New\",Courier,monospace;color:var(--cp-text-soft)}\n.lct-failure{display:flex;flex-wrap:wrap;gap:6px 10px;margin-top:10px;padding:8px;border:1px solid var(--cp-danger);border-radius:.625rem;background:var(--cp-surface);color:var(--cp-danger);font-size:10px}\n.lct-failure-label{font-weight:700}\n.lct-model,.lct-session,.lct-session-empty{margin-top:10px;padding:9px 10px;border-left:3px solid var(--cp-accent);border-radius:.625rem;background:var(--cp-surface);font-size:10px}\n.lct-model,.lct-session{display:flex;flex-wrap:wrap;gap:5px 8px;align-items:center}\n.lct-model>span:first-child,.lct-session>span:first-child{color:var(--cp-accent);font-weight:700}\n.lct-parent-session{color:var(--cp-text-muted)}\n.lct-session-empty,.lct-no-attempts{color:var(--cp-text-muted)}\n.lct-operation-children{position:relative;margin:14px 0 0 24px;padding-left:24px;border-left:2px solid var(--cp-border-strong)}\n.lct-operation-children>.lct-operation::before{position:absolute;top:30px;left:-24px;width:24px;border-top:2px solid var(--cp-border-strong);content:\"\"}\n.lct-operation-children>.lct-operation:last-child::after{position:absolute;top:32px;bottom:-15px;left:-26px;width:4px;background:var(--cp-bg-elevated);content:\"\"}\n.lct-unlinked{margin-top:18px;padding:12px;border:1px dashed var(--cp-warning);border-radius:16px;background:var(--cp-surface-soft)}\n.lct-unlinked h4{margin:0;color:var(--cp-warning)}\n.lct-unlinked p{margin:4px 0 12px;color:var(--cp-text-muted);font-size:11px}\n.lct-root-missing{margin-bottom:12px;color:var(--cp-danger);font-size:12px}\n.lct-route-local{color:var(--cp-link)}.lct-route-frontier{color:var(--cp-warning)}\n.lc-graph-supplement{margin-top:18px;border-top:1px solid var(--cp-border);padding-top:14px}\n.lc-graph-supplement summary{cursor:pointer;color:var(--cp-link);font-size:12px}\n.lc-graph-supplement-body{margin-top:12px}\n@media(max-width:700px){\n .lc-panel-head{flex-direction:column}\n .lc-cursor-feedback{align-items:flex-start;min-width:0}\n .lc-controls{align-items:stretch}\n .lc-run-select{max-width:none;flex:1}\n .lct-tree{min-width:34rem}\n .lct-operation{min-width:31rem}\n}\n";
24
+ /**
25
+ * Theme detection boot fragment — inserted once per page before lifecycle JS.
26
+ * Uses the Clawpilot `?scoutTheme` param + `prefers-color-scheme` fallback.
27
+ * Pure, side-effect-limited: only sets `data-theme` on the root element.
28
+ */
29
+ export declare const LIFECYCLE_THEME_BOOT = "\n(() => {\n const param = new URLSearchParams(window.location.search).get(\"scoutTheme\");\n const theme =\n param || (window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\");\n document.documentElement.setAttribute(\"data-theme\", theme);\n})();\n";
30
+ /**
31
+ * Lifecycle timeline client JS. Wired by `wireLifecycleTimeline()` (called
32
+ * from CONSOLE_CLIENT_JS after the console initialisation). No inline
33
+ * user-facing message strings — labels come from `data-*` attributes set
34
+ * server-side. No dynamic `innerHTML` from user data; escaping is done on
35
+ * the server side.
36
+ */
37
+ export declare const LIFECYCLE_CLIENT_JS: string;
17
38
  //# sourceMappingURL=assets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/console/assets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,aAAa,upYA6BzB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,klFA4CvB,CAAC;AAEF,eAAO,MAAM,iBAAiB,4vXA2Q7B,CAAC"}
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/console/assets.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AAEH,eAAO,MAAM,aAAa,k9YAgCzB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,klFA4CvB,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAwW7B,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,w/UAiJ3B,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,gSAOhC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,QA+4B/B,CAAC"}
@@ -0,0 +1,75 @@
1
+ import type { LifecycleProjectionV1 } from "../lifecycle/contracts";
2
+ import { type SessionLabel } from "./labels";
3
+ export { AssociationError } from "./historyBoundary";
4
+ export declare const CONVERSATION_LIMITS: {
5
+ readonly bytes: number;
6
+ readonly messages: 200;
7
+ readonly parts: 100;
8
+ readonly tools: 200;
9
+ readonly fieldChars: 16384;
10
+ readonly totalChars: 262144;
11
+ readonly argumentDepth: 8;
12
+ readonly argumentEntries: 512;
13
+ };
14
+ export declare const SESSION_HISTORY_LIMITS: {
15
+ readonly bytes: number;
16
+ readonly timeoutMs: 10000;
17
+ readonly labels: 64;
18
+ };
19
+ export type SessionLabelReadOptions = {
20
+ budget: {
21
+ remaining: number;
22
+ };
23
+ timeoutMs?: number;
24
+ };
25
+ export declare class ConversationTooLargeError extends Error {
26
+ constructor();
27
+ }
28
+ export type Conversation = {
29
+ session?: SessionLabel;
30
+ truncated?: boolean;
31
+ messages: Array<{
32
+ id: string;
33
+ role: "user" | "assistant";
34
+ createdAt: number;
35
+ completedAt?: number;
36
+ text: string[];
37
+ tools: Array<{
38
+ id: string;
39
+ name: string;
40
+ status: "pending" | "running" | "completed" | "error";
41
+ arguments: string;
42
+ result?: string;
43
+ startedAt?: number;
44
+ endedAt?: number;
45
+ }>;
46
+ }>;
47
+ };
48
+ /** Allowlist projection of the public SDK response; never serializes provider metadata. */
49
+ export declare function projectConversation(raw: unknown, sessionID: string): Conversation;
50
+ export type ConversationReader = ((endpoint: string, sessionID: string, signal?: AbortSignal) => Promise<Conversation>) & {
51
+ root?: (endpoint: string, projection: LifecycleProjectionV1, signal?: AbortSignal) => Promise<Conversation & {
52
+ session: SessionLabel;
53
+ association: "sdk-parent" | "tool-result";
54
+ }>;
55
+ labels?: (endpoint: string, ids: readonly string[], signal?: AbortSignal, options?: SessionLabelReadOptions) => Promise<SessionLabel[]>;
56
+ };
57
+ /** Public SDK GET only. No process spawning, SQLite access, inference, or transcript persistence. */
58
+ export type ScopedSession = {
59
+ id: string;
60
+ directory: string;
61
+ projectID: string;
62
+ parentID?: string;
63
+ label: SessionLabel;
64
+ };
65
+ export type SessionHistoryPort = {
66
+ get(id: string): Promise<ScopedSession>;
67
+ messages(id: string): Promise<unknown>;
68
+ primaries(projectID: string): Promise<ScopedSession[]>;
69
+ };
70
+ export declare function createConversationReader(deps: {
71
+ directory: string;
72
+ password?: string;
73
+ fetch?: typeof fetch;
74
+ }): ConversationReader;
75
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/console/conversation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function only(keys: readonly string[]): (value: unknown) => unknown;
2
+ export declare class AssociationError extends Error {
3
+ readonly reason: "unavailable" | "ambiguous" | "incomplete";
4
+ constructor(reason: "unavailable" | "ambiguous" | "incomplete");
5
+ }
6
+ //# sourceMappingURL=historyBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyBoundary.d.ts","sourceRoot":"","sources":["../../src/console/historyBoundary.ts"],"names":[],"mappings":"AAIA,wBAAgB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,WAC3B,OAAO,KAAG,OAAO,CAUjC;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,YAAY;IAAvE,YAAqB,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,YAAY,EAQtE;CACF"}
@@ -0,0 +1,3 @@
1
+ export declare const CONVERSATION_CLIENT_JS: string;
2
+ export declare const CONVERSATION_STYLE = "\n.lc-conversation{margin-top:12px;padding:12px;min-width:0;border:1px solid var(--cp-border);border-radius:16px;background:var(--cp-surface);color:var(--cp-text);overflow-anchor:none}\n.lc-conversation[hidden]{display:none}\n.lc-conversation-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}\n.lc-conversation h3,.lc-conversation h4,.lc-conversation p{margin:8px 0}\n.lc-conversation h3{scroll-margin-top:12px}\n.lc-conversation pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:400px;overflow:auto;background:var(--cp-surface-soft);padding:12px;font-family:Consolas,\"Courier New\",Courier,monospace}\n.lc-conversation [data-conversation-role=\"user\"] pre{max-height:180px}\n.lc-conversation [data-conversation-tool-list]{max-height:160px;overflow:auto}\n.lc-conversation details{margin-top:12px;padding:8px;border:1px solid var(--cp-border);border-radius:.625rem}\n.lc-conversation summary{cursor:pointer;color:var(--cp-accent)}\n.lc-conversation time{font-size:11px;color:var(--cp-text-muted)}\n.lc-conversation button,[data-inspect-attempt],[data-inspect-root]{padding:6px 10px;margin:6px;border:1px solid var(--cp-border);border-radius:.625rem;background:var(--cp-surface);color:var(--cp-accent)}\n.lct-operation-name{display:block;font-size:16px}\n.lct-operation-head details,.lct-session details{font-size:11px;color:var(--cp-text-muted)}\n.lct-session small,.session-btn small{display:block;color:var(--cp-text-muted)}\n.lc-run-select{max-width:650px}\n";
3
+ //# sourceMappingURL=inspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/console/inspector.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,QAwNlC,CAAC;AAEF,eAAO,MAAM,kBAAkB,8+CAiB9B,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type SessionLabel = {
2
+ id: string;
3
+ title?: string;
4
+ createdAt?: number;
5
+ };
6
+ export declare const boundedTitle: (value: unknown) => string | undefined, utcTime: (value: unknown) => string, runLabel: (run: {
7
+ runID: string;
8
+ startedAt: number | null;
9
+ executionAuthority: string;
10
+ }, title?: string) => string;
11
+ export declare const LABELS_CLIENT_JS: string;
12
+ //# sourceMappingURL=labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/console/labels.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAqC9E,eAAO,MAAQ,YAAY,UAhCI,OAAO,KAAG,MAAM,GAAG,SAAS,EAgC9B,OAAO,UAtBV,OAAO,KAAG,MAAM,EAsBJ,QAAQ,QAZrC;IACH,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,UACO,MAAM,KACb,MAMkE,CAAC;AAExE,eAAO,MAAM,gBAAgB,QA0D5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"opencodeClient.d.ts","sourceRoot":"","sources":["../../src/console/opencodeClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAGvB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAEjE;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAErC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,iFAAiF;IACjF,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,2CAA2C;IAC3C,iBAAiB,EAAE,CACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,KACnC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;;;;OAKG;IACH,YAAY,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7B;;;;OAIG;IACH,YAAY,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,EACtC,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAgBF,oFAAoF;AACpF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,YAAY,GAAG,SAAS,CAK1B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CA+E1E"}
1
+ {"version":3,"file":"opencodeClient.d.ts","sourceRoot":"","sources":["../../src/console/opencodeClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAGvB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAEjE;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAErC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,iFAAiF;IACjF,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,2CAA2C;IAC3C,iBAAiB,EAAE,CACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,KACnC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;;;;OAKG;IACH,YAAY,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7B;;;;OAIG;IACH,YAAY,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,EACtC,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAgBF,oFAAoF;AACpF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,YAAY,GAAG,SAAS,CAK1B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAqF1E"}
@@ -0,0 +1,3 @@
1
+ /** Incremental metadata refresh. The editor, transcript and transport DOM are owned separately. */
2
+ export declare const CONSOLE_REFRESH_JS = "\n var viewRevision='',viewRequest=null,viewPending=false,viewStopped=false,latestView=null;\n var appliedRouting='',appliedLogs='',appliedTree='';\n function protectedContent(element){\n var active=document.activeElement;\n if(active&&element.contains(active)&&/^(INPUT|TEXTAREA|SELECT)$/.test(active.tagName)){return true}\n var selection=window.getSelection&&window.getSelection();\n return !!(selection&&!selection.isCollapsed&&element.contains(selection.anchorNode));\n }\n function nodeKey(node){\n if(node.nodeType!==1){return ''}\n return (node.hasAttribute('data-session-target')?'session-target:'+node.getAttribute('data-session-target'):\n node.hasAttribute('data-session-view')?'session-view:'+node.getAttribute('data-session-view'):node.id)||\n ((node.tagName==='LI'||node.tagName==='TR')?node.outerHTML:'');\n }\n function patchNode(old,next){\n if(old.isEqualNode(next)){return}\n if(old.nodeType!==next.nodeType||old.nodeName!==next.nodeName){\n old.replaceWith(next.cloneNode(true));return;\n }\n if(old.nodeType===3){old.nodeValue=next.nodeValue;return}\n if(old.nodeType!==1){return}\n if(old.matches('[data-session-name],[data-session-time]')){\n if(old.getAttribute('data-label-fallback')!==next.textContent){old.setAttribute('data-label-fallback',next.textContent)}\n return;\n }\n if(old.matches('input,textarea,select,.term,.pty,.graph-drill,[data-config-mount]')){return}\n Array.from(old.attributes).forEach(function(a){\n if(a.name!=='open'&&a.name!=='hidden'&&a.name!=='aria-selected'&&!next.hasAttribute(a.name)){old.removeAttribute(a.name)}\n });\n Array.from(next.attributes).forEach(function(a){\n if(a.name!=='open'&&a.name!=='hidden'&&a.name!=='aria-selected'&&old.getAttribute(a.name)!==a.value){old.setAttribute(a.name,a.value)}\n });\n var originals=Array.from(old.childNodes),used=new Set();\n Array.from(next.childNodes).forEach(function(child,index){\n var key=nodeKey(child),match;\n if(key){match=originals.find(function(n){return !used.has(n)&&nodeKey(n)===key})}\n else{match=originals.find(function(n){return !used.has(n)&&!nodeKey(n)&&n.nodeName===child.nodeName})}\n if(match){used.add(match);patchNode(match,child)}\n else{match=child.cloneNode(true)}\n if(old.childNodes[index]!==match){\n var scrolls=match.nodeType===1?[match].concat(Array.from(match.querySelectorAll('*'))).map(function(n){return [n,n.scrollTop,n.scrollLeft]}):[];\n old.insertBefore(match,old.childNodes[index]||null);\n scrolls.forEach(function(s){s[0].scrollTop=s[1];s[0].scrollLeft=s[2]});\n }\n });\n originals.forEach(function(n){\n if(!used.has(n)&&n.parentNode===old){\n if(n.nodeType===1){\n disconnectTerminal(n);\n n.querySelectorAll('[data-session-view]').forEach(disconnectTerminal);\n }\n old.removeChild(n);\n }\n });\n }\n function patchHtml(element,html){\n var next=document.createElement('div');\n next.innerHTML=html;\n var shell=element.cloneNode(false);\n while(next.firstChild){shell.appendChild(next.firstChild)}\n patchNode(element,shell);\n }\n function applyView(forceLogs){\n if(!latestView){return}\n var tree=document.querySelector('#screen-tree > .graph-panel');\n if(tree&&latestView.tree&&latestView.tree!==appliedTree&&!protectedContent(tree)){\n var graph=document.createElement('div');graph.innerHTML=latestView.tree;\n if(graph.firstElementChild){patchNode(tree,graph.firstElementChild)}\n appliedTree=latestView.tree;\n }\n var routing=document.querySelector('#screen-routing > .screen-grid');\n if(routing&&latestView.routing!==appliedRouting&&!protectedContent(routing)){\n var next=document.createElement('div');next.innerHTML=latestView.routing;\n if(next.firstElementChild){patchNode(routing,next.firstElementChild)}\n appliedRouting=latestView.routing;\n }\n var logs=document.getElementById('screen-logs');\n var content=logs&&logs.querySelector('[data-log-content]');\n var follow=logs&&logs.querySelector('[data-log-follow]');\n var incoming=logs&&logs.querySelector('[data-log-incoming]');\n var scroll=document.querySelector('.scroll');\n if(content&&latestView.logs!==appliedLogs){\n if(appliedLogs===''&&content.innerHTML===latestView.logs){appliedLogs=latestView.logs}\n else{\n var atBottom=!scroll||scroll.scrollHeight-scroll.scrollTop-scroll.clientHeight<40;\n var safe=logs.hidden||(follow&&follow.checked&&atBottom);\n if((forceLogs||safe)&&!protectedContent(content)){\n var top=scroll&&scroll.scrollTop;\n patchHtml(content,latestView.logs);\n appliedLogs=latestView.logs;\n wireLogsScreen(logs);\n if(scroll&&!logs.hidden){scroll.scrollTop=follow&&follow.checked?scroll.scrollHeight:top}\n }\n }\n if(incoming){incoming.hidden=latestView.logs===appliedLogs&&!Array.from(content.querySelectorAll('.termlog')).some(function(log){return log.__incoming})}\n }\n var count=document.querySelector('[data-screen=\"logs\"] .count');\n if(count&&count.textContent!==String(latestView.sessionCount)){count.textContent=String(latestView.sessionCount)}\n if(typeof consoleLabels!=='undefined'){consoleLabels.refresh()}\n }\n function refreshView(){\n if(viewStopped){return}\n applyView(false);\n if(viewRequest){viewPending=true;return}\n viewPending=false;\n var controller=new AbortController();\n viewRequest=controller;\n var timeout=setTimeout(function(){controller.abort()},15000);\n fetch('/api/view'+authTok,{headers:viewRevision?{'If-None-Match':viewRevision}:{},signal:controller.signal})\n .then(function(r){\n var error=document.querySelector('[data-refresh-error]');\n if(error){error.hidden=r.ok||r.status===304}\n if(r.status===304){return null}\n if(!r.ok){throw new Error()}\n var revision=r.headers.get('etag')||'';\n return r.json().then(function(d){return {data:d,revision:revision}});\n }).then(function(result){\n if(viewStopped||viewRequest!==controller||!result){return}\n if(typeof result.data.routing!=='string'||typeof result.data.logs!=='string'){return}\n latestView=result.data;viewRevision=result.revision;\n var updated=document.querySelector('.token-chip b');\n if(updated&&typeof latestView.updatedAt==='string'){updated.textContent=latestView.updatedAt}\n if(Number.isInteger(latestView.refreshMs)&&latestView.refreshMs>=250&&latestView.refreshMs!==ms){\n ms=latestView.refreshMs;document.documentElement.setAttribute('data-refresh',String(ms));\n clearInterval(refreshTimer);refreshTimer=null;startRefresh();\n document.dispatchEvent(new CustomEvent('console-refresh-changed',{detail:ms}));\n }\n applyView(false);\n }).catch(function(){\n var error=document.querySelector('[data-refresh-error]');\n if(error&&!viewStopped){error.hidden=false}\n }).finally(function(){\n clearTimeout(timeout);\n if(viewRequest!==controller){return}\n viewRequest=null;\n if(viewPending&&!viewStopped){refreshView()}\n });\n }\n var refreshTimer=null;\n function startRefresh(){\n if(refreshTimer!==null){return}\n viewStopped=false;\n refreshTimer=setInterval(refreshView,isNaN(ms)?2000:Math.max(250,ms));\n }\n window.addEventListener('pagehide',function(){\n viewStopped=true;clearInterval(refreshTimer);refreshTimer=null;\n if(viewRequest){viewRequest.abort();viewRequest=null}\n if(es){es.close();es=null}\n document.querySelectorAll('[data-session-view]').forEach(disconnectTerminal);\n });\n window.addEventListener('pageshow',function(e){\n if(e.persisted){\n startRefresh();openStateStream();refreshView();\n var logs=document.getElementById('screen-logs');\n if(logs&&!logs.hidden){wireLogsScreen(logs)}\n }\n });\n";
3
+ //# sourceMappingURL=refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../src/console/refresh.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,85PA8J9B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { GraphMode } from "../config/schema";
2
+ import type { LifecycleHistoryResponseV1 } from "../lifecycle/contracts";
2
3
  import type { GraphViewProjectionV1 } from "../telemetry/graphView";
3
4
  import type { ConsoleState } from "./types";
4
5
  export declare const GRAPH_EMPTY_REMEDIATION: "No graph run yet. The tree fills when openteam-orchestrate dispatches roles; ordinary chat does not create a graph run.";
@@ -58,6 +59,17 @@ export type RenderOptions = {
58
59
  configEditor?: {
59
60
  readonly hasToken: boolean;
60
61
  };
62
+ /**
63
+ * Lifecycle history timeline surface (#222). When provided, renders the
64
+ * timeline panel in the tree screen and injects the lifecycle CSS/JS.
65
+ * `response` is the current history view (or disabled/empty/etc.); may be
66
+ * `null` when the provider is wired but has not yet responded.
67
+ */
68
+ lifecycleView?: {
69
+ readonly response: LifecycleHistoryResponseV1 | null;
70
+ /** Run ID from the URL query (for initial state). */
71
+ readonly initialRunID?: string;
72
+ };
61
73
  };
62
74
  /**
63
75
  * Renderiza el console como un único HTML autocontenido (CSS + JS inline, sin
@@ -65,4 +77,11 @@ export type RenderOptions = {
65
77
  * Determinista. Pure.
66
78
  */
67
79
  export declare function renderConsoleHtml(state: ConsoleState, options?: RenderOptions): string;
80
+ /** Incremental metadata only; no config editor, scripts or conversation content. */
81
+ export declare function renderConsoleUpdate(state: ConsoleState, options?: Pick<RenderOptions, "terminalEnabled" | "ptyEnabled" | "graphView" | "drilldownEnabled">): {
82
+ routing: string;
83
+ logs: string;
84
+ sessionCount: number;
85
+ tree?: string;
86
+ };
68
87
  //# sourceMappingURL=render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/console/render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AASlD,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,KAAK,EAGV,YAAY,EAIb,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,uBAAuB,EAClC,yHAAkI,CAAC;AASrI,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAwmBD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,qBAAqB,GAAG,IAAI,EACxC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,MAAM,CA2BR;AAuOD,MAAM,MAAM,aAAa,GAAG;IAC1B,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;QAClD,sEAAsE;QACtE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;QACzB;;;WAGG;QACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAmGR"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/console/render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAEV,0BAA0B,EAK3B,MAAM,wBAAwB,CAAC;AAWhC,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAchC,OAAO,KAAK,EAGV,YAAY,EAIb,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,uBAAuB,EAClC,yHAAkI,CAAC;AASrI,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AA6nBD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,qBAAqB,GAAG,IAAI,EACxC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,MAAM,CA2BR;AA89BD,MAAM,MAAM,aAAa,GAAG;IAC1B,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;QAClD,sEAAsE;QACtE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;QACzB;;;WAGG;QACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9C;;;;;OAKG;IACH,aAAa,CAAC,EAAE;QACd,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAAC;QACrD,qDAAqD;QACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CA4GR;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,IAAI,CACX,aAAa,EACb,iBAAiB,GAAG,YAAY,GAAG,WAAW,GAAG,kBAAkB,CAC/D,GACL;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAoBxE"}
@@ -0,0 +1,7 @@
1
+ import type { LifecycleProjectionV1 } from "../lifecycle/contracts";
2
+ import type { ScopedSession, SessionHistoryPort } from "./conversation";
3
+ export declare function recoverRootSession(port: SessionHistoryPort, projection: LifecycleProjectionV1): Promise<{
4
+ session: ScopedSession;
5
+ association: "sdk-parent" | "tool-result";
6
+ }>;
7
+ //# sourceMappingURL=rootAssociation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rootAssociation.d.ts","sourceRoot":"","sources":["../../src/console/rootAssociation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA2IxE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,kBAAkB,EACxB,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC;IACT,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,YAAY,GAAG,aAAa,CAAC;CAC3C,CAAC,CAgED"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}