@jmanuelcorral/openteam 0.1.23 → 0.1.25

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/.opencode/command/openteam.md +2 -2
  2. package/README.md +45 -16
  3. package/dist/cli/{dashboardServe.d.ts → consoleServe.d.ts} +23 -13
  4. package/dist/cli/consoleServe.d.ts.map +1 -0
  5. package/dist/cli/tunnel.d.ts +89 -0
  6. package/dist/cli/tunnel.d.ts.map +1 -0
  7. package/dist/cli.js +1170 -197
  8. package/dist/commands/console.d.ts +9 -0
  9. package/dist/commands/console.d.ts.map +1 -0
  10. package/dist/commands/dispatch.d.ts.map +1 -1
  11. package/dist/commands/setup.d.ts +0 -1
  12. package/dist/commands/setup.d.ts.map +1 -1
  13. package/dist/config/schema.d.ts +88 -6
  14. package/dist/config/schema.d.ts.map +1 -1
  15. package/dist/console/backlog.d.ts.map +1 -0
  16. package/dist/console/opencodeClient.d.ts +30 -0
  17. package/dist/console/opencodeClient.d.ts.map +1 -0
  18. package/dist/console/protocol.d.ts +42 -0
  19. package/dist/console/protocol.d.ts.map +1 -0
  20. package/dist/console/pty.d.ts +47 -0
  21. package/dist/console/pty.d.ts.map +1 -0
  22. package/dist/console/render.d.ts +20 -0
  23. package/dist/console/render.d.ts.map +1 -0
  24. package/dist/console/session.d.ts +23 -0
  25. package/dist/console/session.d.ts.map +1 -0
  26. package/dist/console/sse.d.ts +21 -0
  27. package/dist/console/sse.d.ts.map +1 -0
  28. package/dist/{dashboard → console}/state.d.ts +10 -5
  29. package/dist/console/state.d.ts.map +1 -0
  30. package/dist/console/token.d.ts +24 -0
  31. package/dist/console/token.d.ts.map +1 -0
  32. package/dist/{dashboard → console}/types.d.ts +24 -3
  33. package/dist/console/types.d.ts.map +1 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +85 -36
  36. package/dist/plugin/capture.d.ts +12 -1
  37. package/dist/plugin/capture.d.ts.map +1 -1
  38. package/dist/plugin/commandTool.d.ts +1 -1
  39. package/dist/plugin/commandTool.d.ts.map +1 -1
  40. package/dist/telemetry/aggregate.d.ts +15 -1
  41. package/dist/telemetry/aggregate.d.ts.map +1 -1
  42. package/dist/telemetry/decisions.d.ts +1 -1
  43. package/dist/telemetry/eventLog.d.ts +1 -1
  44. package/dist/telemetry/eventLog.d.ts.map +1 -1
  45. package/dist/telemetry/events.d.ts +28 -1
  46. package/dist/telemetry/events.d.ts.map +1 -1
  47. package/dist/web/console.d.ts +28 -0
  48. package/dist/web/console.d.ts.map +1 -0
  49. package/dist/web/git.d.ts +1 -1
  50. package/dist/web/git.d.ts.map +1 -1
  51. package/dist/web/paths.d.ts +1 -1
  52. package/dist/web/paths.d.ts.map +1 -1
  53. package/dist/web/server.d.ts +20 -9
  54. package/dist/web/server.d.ts.map +1 -1
  55. package/dist/web/snapshot.d.ts +6 -6
  56. package/dist/web/snapshot.d.ts.map +1 -1
  57. package/dist/web/start.d.ts +19 -9
  58. package/dist/web/start.d.ts.map +1 -1
  59. package/package.json +1 -1
  60. package/dist/cli/dashboardServe.d.ts.map +0 -1
  61. package/dist/commands/dashboard.d.ts +0 -9
  62. package/dist/commands/dashboard.d.ts.map +0 -1
  63. package/dist/dashboard/backlog.d.ts.map +0 -1
  64. package/dist/dashboard/render.d.ts +0 -14
  65. package/dist/dashboard/render.d.ts.map +0 -1
  66. package/dist/dashboard/state.d.ts.map +0 -1
  67. package/dist/dashboard/types.d.ts.map +0 -1
  68. /package/dist/{dashboard → console}/backlog.d.ts +0 -0
package/dist/index.js CHANGED
@@ -110,7 +110,7 @@ function buildOrchestratorAgent(frontier, options = {}) {
110
110
  "- **scribe** — memoria silenciosa del equipo. Registra decisiones y",
111
111
  " aprendizajes en un log compartido (`.opencode/openteam-decisions.md`) sin",
112
112
  " ejecutar cambios de código. Modelo **local**; permisos de solo lectura más",
113
- " edición de ese log. **Formato parseable** para el dashboard: una decisión",
113
+ " edición de ese log. **Formato parseable** para el console: una decisión",
114
114
  " por línea como item de lista Markdown, ya **redactada** (sin prompts ni",
115
115
  " datos sensibles):",
116
116
  " `- YYYY-MM-DD [agente] Resumen breve de la decisión #tag1 #tag2`",
@@ -215,23 +215,26 @@ var PrivacyModeSchema = z.enum([
215
215
  "off"
216
216
  ]);
217
217
  var BaselineModeSchema = z.enum(["auto", "pinned"]);
218
- var DashboardHostSchema = z.enum(["127.0.0.1", "localhost"]);
219
- var DashboardConfigSchema = z.object({
220
- enabled: z.boolean().default(false),
221
- host: DashboardHostSchema.default("127.0.0.1"),
218
+ var ConsoleHostSchema = z.enum(["127.0.0.1", "localhost"]);
219
+ var ConsoleConfigSchema = z.object({
220
+ host: ConsoleHostSchema.default("127.0.0.1"),
222
221
  port: z.number().int().min(1024).max(65535).default(4599),
223
222
  autoPortFallback: z.boolean().default(true),
224
223
  refreshMs: z.number().int().min(250).default(2000),
225
224
  recentRoutes: z.number().int().positive().default(50),
226
- openBrowser: z.boolean().default(false)
225
+ openBrowser: z.boolean().default(false),
226
+ terminal: z.object({
227
+ enabled: z.boolean().default(true),
228
+ pty: z.boolean().optional()
229
+ }).default({ enabled: true })
227
230
  }).default({
228
- enabled: false,
229
231
  host: "127.0.0.1",
230
232
  port: 4599,
231
233
  autoPortFallback: true,
232
234
  refreshMs: 2000,
233
235
  recentRoutes: 50,
234
- openBrowser: false
236
+ openBrowser: false,
237
+ terminal: { enabled: true }
235
238
  });
236
239
  var defaultLocalModel = {
237
240
  providerID: "ollama",
@@ -248,7 +251,7 @@ var LocalRuntimeSchema = z.object({
248
251
  discovery: z.enum(["cli", "sdk", "manual"]).optional(),
249
252
  defaultModel: ModelRefSchema
250
253
  });
251
- var OpenTeamConfigSchema = z.object({
254
+ var OpenTeamConfigObjectSchema = z.object({
252
255
  baseline: z.object({
253
256
  mode: BaselineModeSchema.default("auto"),
254
257
  pinnedModel: ModelRefSchema.nullable().default(null),
@@ -295,8 +298,9 @@ var OpenTeamConfigSchema = z.object({
295
298
  hardStopOnBudgetExhaustion: z.boolean().default(false)
296
299
  }).default({ hardStopOnBudgetExhaustion: false }),
297
300
  privacyMode: PrivacyModeSchema.default("forceLocalOnSensitive"),
298
- dashboard: DashboardConfigSchema
301
+ console: ConsoleConfigSchema
299
302
  });
303
+ var OpenTeamConfigSchema = OpenTeamConfigObjectSchema;
300
304
 
301
305
  // src/config/persist.ts
302
306
  var DEFAULT_CONFIG_PATH = ".opencode/openteam.json";
@@ -865,13 +869,21 @@ var ActivityEventSchema = EventBaseSchema.extend({
865
869
  agent: z3.string().min(1).optional(),
866
870
  summary: z3.string().min(1)
867
871
  });
872
+ var SessionEndpointEventSchema = EventBaseSchema.extend({
873
+ type: z3.literal("session-endpoint"),
874
+ url: z3.string().url(),
875
+ directory: z3.string().min(1).optional(),
876
+ worktree: z3.string().min(1).optional(),
877
+ title: z3.string().min(1).optional()
878
+ });
868
879
  var OpenTeamEventSchema = z3.discriminatedUnion("type", [
869
880
  RouteEventSchema,
870
881
  MessageEventSchema,
871
882
  ToolcallEventSchema,
872
883
  MeetingEventSchema,
873
884
  DecisionEventSchema,
874
- ActivityEventSchema
885
+ ActivityEventSchema,
886
+ SessionEndpointEventSchema
875
887
  ]);
876
888
 
877
889
  // src/plugin/capture.ts
@@ -913,6 +925,34 @@ function messageEventFrom(info, now) {
913
925
  }
914
926
  return event;
915
927
  }
928
+ function sessionEndpointEventFrom(sessionID, url, now, meta = {}) {
929
+ let origin;
930
+ try {
931
+ origin = new URL(url).origin;
932
+ } catch {
933
+ return;
934
+ }
935
+ if (origin === "null" || origin.length === 0) {
936
+ return;
937
+ }
938
+ const event = {
939
+ v: EVENT_SCHEMA_VERSION,
940
+ type: "session-endpoint",
941
+ ts: now(),
942
+ sessionID,
943
+ url: origin
944
+ };
945
+ if (meta.directory !== undefined) {
946
+ event.directory = meta.directory;
947
+ }
948
+ if (meta.worktree !== undefined) {
949
+ event.worktree = meta.worktree;
950
+ }
951
+ if (meta.title !== undefined) {
952
+ event.title = meta.title;
953
+ }
954
+ return event;
955
+ }
916
956
  var ACTIVITY_SUMMARIES = {
917
957
  "session.created": "Sesión creada",
918
958
  "session.idle": "Sesión en reposo",
@@ -1167,18 +1207,18 @@ function autoBaseline(config) {
1167
1207
  };
1168
1208
  }
1169
1209
 
1170
- // src/commands/dashboard.ts
1171
- function renderDashboardStatus(dashboard) {
1172
- const url = `http://${dashboard.host}:${dashboard.port}`;
1210
+ // src/commands/console.ts
1211
+ function renderConsoleStatus(console_) {
1212
+ const url = `http://${console_.host}:${console_.port}`;
1173
1213
  return [
1174
- "Dashboard (multi-sesión, se lanza desde la CLI):",
1214
+ "Console (multi-sesión, se lanza desde la CLI):",
1175
1215
  ` URL: ${url}`,
1176
- ` Refresco: ${dashboard.refreshMs} ms (SSE + polling)`,
1177
- ` Rutas: últimas ${dashboard.recentRoutes}`,
1178
- dashboard.autoPortFallback ? " Puerto: con fallback automático si está ocupado" : " Puerto: fijo (sin fallback)",
1216
+ ` Refresco: ${console_.refreshMs} ms (SSE + polling)`,
1217
+ ` Rutas: últimas ${console_.recentRoutes}`,
1218
+ console_.autoPortFallback ? " Puerto: con fallback automático si está ocupado" : " Puerto: fijo (sin fallback)",
1179
1219
  "",
1180
- "Lánzalo con:",
1181
- " openteam dashboard (Ctrl+C para parar; --open abre el navegador)",
1220
+ "Lánzala con:",
1221
+ " openteam console (Ctrl+C para parar; --open abre el navegador)",
1182
1222
  "",
1183
1223
  "Agrega TODAS las sesiones de opencode que escriben eventos en",
1184
1224
  " .opencode/openteam/sessions/*.jsonl",
@@ -1336,8 +1376,9 @@ var HELP = [
1336
1376
  " openteam baseline auto Baseline cheapest-capable (modo auto)",
1337
1377
  " openteam doctor Diagnóstico de runtimes y config",
1338
1378
  " openteam agents Lista los agentes y el LLM (local/frontier) de cada uno",
1339
- " openteam dashboard Lanza el dashboard web multi-sesión (Ctrl+C para parar; --open abre el navegador)",
1340
- " openteam dashboard --status Muestra la config del dashboard sin lanzarlo",
1379
+ " openteam console Lanza la Console web multi-sesión (Ctrl+C para parar; --open abre el navegador)",
1380
+ " openteam console --status Muestra la config de la Console sin lanzarla",
1381
+ " openteam tunnel Expone la Console vía Dev Tunnels (--terminal expone opencode; Ctrl+C para cerrar)",
1341
1382
  " openteam report Resumen de coste/ahorro (telemetría)",
1342
1383
  " openteam yolo status Muestra si el modo YOLO está activo",
1343
1384
  " openteam yolo on Activa YOLO (opencode auto-aprueba todo)",
@@ -1527,9 +1568,9 @@ async function runCli(argv, deps) {
1527
1568
  if (command === "agents") {
1528
1569
  return await runAgents(deps, configPath, opencodeConfigPath);
1529
1570
  }
1530
- if (command === "dashboard") {
1571
+ if (command === "console") {
1531
1572
  const config = await deps.loadConfig(configPath);
1532
- return { exitCode: 0, stdout: renderDashboardStatus(config.dashboard) };
1573
+ return { exitCode: 0, stdout: renderConsoleStatus(config.console) };
1533
1574
  }
1534
1575
  if (command === undefined || command === "help" || command === "--help") {
1535
1576
  return { exitCode: 0, stdout: HELP };
@@ -1561,23 +1602,15 @@ function commandArgv(action, model) {
1561
1602
  return ["report"];
1562
1603
  case "agents":
1563
1604
  return ["agents"];
1564
- case "dashboard":
1565
- return ["dashboard"];
1605
+ case "console":
1606
+ return ["console"];
1566
1607
  }
1567
1608
  }
1568
1609
  function createCommandTool(deps) {
1569
1610
  return tool({
1570
- description: "Comandos runtime de openteam: baseline (show/set/auto), doctor, report, agents (LLM por agente: local/frontier + suscripción) y dashboard (estado/URL del panel web).",
1611
+ description: "Comandos runtime de openteam: baseline (show/set/auto), doctor, report, agents (LLM por agente: local/frontier + suscripción) y console (estado/URL de la Console web).",
1571
1612
  args: {
1572
- action: tool.schema.enum([
1573
- "show",
1574
- "set",
1575
- "auto",
1576
- "doctor",
1577
- "report",
1578
- "agents",
1579
- "dashboard"
1580
- ]).describe("Acción a ejecutar"),
1613
+ action: tool.schema.enum(["show", "set", "auto", "doctor", "report", "agents", "console"]).describe("Acción a ejecutar"),
1581
1614
  model: tool.schema.string().optional().describe("Modelo provider/model (solo para action=set)")
1582
1615
  },
1583
1616
  async execute(args) {
@@ -2465,6 +2498,20 @@ var server = async (ctx, rawOptions) => {
2465
2498
  const cliDeps = createCliDeps(config, registry, telemetryPath, sessionsDir);
2466
2499
  const toolcalls = createToolcallTracker({ sink });
2467
2500
  const now = () => Date.now();
2501
+ const announcedSessions = new Set;
2502
+ const announceEndpoint = (sessionID) => {
2503
+ if (sessionID === undefined || announcedSessions.has(sessionID)) {
2504
+ return;
2505
+ }
2506
+ announcedSessions.add(sessionID);
2507
+ const endpoint = sessionEndpointEventFrom(sessionID, ctx.serverUrl, now, {
2508
+ directory: ctx.directory,
2509
+ worktree: ctx.worktree
2510
+ });
2511
+ if (endpoint !== undefined) {
2512
+ sink.emit(endpoint);
2513
+ }
2514
+ };
2468
2515
  return {
2469
2516
  ...hooks,
2470
2517
  tool: {
@@ -2482,12 +2529,14 @@ var server = async (ctx, rawOptions) => {
2482
2529
  }
2483
2530
  const activity = activityEventFrom(event, now);
2484
2531
  if (activity !== undefined) {
2532
+ announceEndpoint(activity.sessionID);
2485
2533
  sink.emit(activity);
2486
2534
  }
2487
2535
  if (event.type === "message.updated") {
2488
2536
  const info = event.properties?.info;
2489
2537
  const message = info === undefined ? undefined : messageEventFrom(info, now);
2490
2538
  if (message !== undefined) {
2539
+ announceEndpoint(message.sessionID);
2491
2540
  sink.emit(message);
2492
2541
  }
2493
2542
  }
@@ -1,4 +1,4 @@
1
- import { type ActivityEvent, type MessageEvent } from "../telemetry/events";
1
+ import { type ActivityEvent, type MessageEvent, type SessionEndpointEvent } from "../telemetry/events";
2
2
  /**
3
3
  * Mapeo **puro** de eventos de opencode a `OpenTeamEvent` redactados. Sin I/O,
4
4
  * red, reloj (se inyecta `now`), random ni env vars.
@@ -32,10 +32,21 @@ export type AssistantInfoLike = {
32
32
  * no ha terminado, o le falta sesión/modelo.
33
33
  */
34
34
  export declare function messageEventFrom(info: AssistantInfoLike, now: () => number): MessageEvent | undefined;
35
+ /**
36
+ * Construye un `session-endpoint` event para anunciar el servidor opencode de una
37
+ * sesión. `url` se normaliza a solo el **origen** (`protocol//host:port`): nunca
38
+ * rutas, query ni credenciales. Devuelve `undefined` si `url` no es parseable.
39
+ */
40
+ export declare function sessionEndpointEventFrom(sessionID: string, url: string | URL, now: () => number, meta?: {
41
+ directory?: string;
42
+ worktree?: string;
43
+ title?: string;
44
+ }): SessionEndpointEvent | undefined;
35
45
  type OpencodeEventLike = {
36
46
  type: string;
37
47
  properties?: unknown;
38
48
  };
49
+ export declare function sessionIDFromEvent(event: OpencodeEventLike): string | undefined;
39
50
  /**
40
51
  * Construye un `activity` event redactado (solo el tipo de evento, nunca
41
52
  * contenido) a partir de un evento de ciclo de vida de sesión. Devuelve
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/plugin/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AAEH,qEAAqE;AACrE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3C,CAAC;CACH,CAAC;AAMF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE,MAAM,MAAM,GAChB,YAAY,GAAG,SAAS,CA0C1B;AAQD,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAoBF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,MAAM,MAAM,GAChB,aAAa,GAAG,SAAS,CAiB3B"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/plugin/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AAEH,qEAAqE;AACrE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3C,CAAC;CACH,CAAC;AAMF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE,MAAM,MAAM,GAChB,YAAY,GAAG,SAAS,CA0C1B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,GAAG,EAAE,MAAM,MAAM,EACjB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACnE,oBAAoB,GAAG,SAAS,CA4BlC;AAQD,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,iBAAiB,GACvB,MAAM,GAAG,SAAS,CAgBpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,MAAM,MAAM,GAChB,aAAa,GAAG,SAAS,CAiB3B"}
@@ -1,6 +1,6 @@
1
1
  import { type ToolDefinition } from "@opencode-ai/plugin";
2
2
  import { type CliDeps } from "../commands/dispatch";
3
- export type CommandAction = "show" | "set" | "auto" | "doctor" | "report" | "agents" | "dashboard";
3
+ export type CommandAction = "show" | "set" | "auto" | "doctor" | "report" | "agents" | "console";
4
4
  /**
5
5
  * Map a tool action (+ optional model) to the argv understood by {@link runCli}.
6
6
  * Pure so it can be unit-tested without the opencode runtime.
@@ -1 +1 @@
1
- {"version":3,"file":"commandTool.d.ts","sourceRoot":"","sources":["../../src/plugin/commandTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,sBAAsB,CAAC;AAE5D,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,KAAK,GACL,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,WAAW,CAAC;AAEhB;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB3E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CA0B/D"}
1
+ {"version":3,"file":"commandTool.d.ts","sourceRoot":"","sources":["../../src/plugin/commandTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,sBAAsB,CAAC;AAE5D,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,KAAK,GACL,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,CAAC;AAEd;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB3E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAkB/D"}
@@ -1,6 +1,6 @@
1
1
  import type { ActivityEvent, OpenTeamEvent } from "./events";
2
2
  /**
3
- * Agregación **pura y determinista** de eventos de openteam para el dashboard.
3
+ * Agregación **pura y determinista** de eventos de openteam para el console.
4
4
  * Reconstruye resúmenes por sesión y rollups globales sin depender del orden de
5
5
  * entrada. Sin I/O, red, reloj, random ni env vars.
6
6
  */
@@ -13,6 +13,18 @@ export type ToolUsage = {
13
13
  export type ToolcallStats = ToolUsage & {
14
14
  byTool: Record<string, ToolUsage>;
15
15
  };
16
+ /**
17
+ * Endpoint del servidor opencode de una sesión (loopback). Lo aporta el evento
18
+ * `session-endpoint`; la Console lo usa para conectarse a la terminal/SSE.
19
+ */
20
+ export type SessionEndpointView = {
21
+ url: string;
22
+ directory?: string;
23
+ worktree?: string;
24
+ title?: string;
25
+ /** `ts` del último `session-endpoint` visto (para quedarse con el más reciente). */
26
+ lastSeenTs: number;
27
+ };
16
28
  export type SessionSummary = {
17
29
  sessionID: string;
18
30
  firstTs: number;
@@ -34,6 +46,8 @@ export type SessionSummary = {
34
46
  models: string[];
35
47
  /** Agentes vistos, orden estable. */
36
48
  agents: string[];
49
+ /** Endpoint del servidor opencode, si la sesión lo anunció. */
50
+ endpoint?: SessionEndpointView;
37
51
  };
38
52
  export type DecisionView = {
39
53
  ts: number;
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../src/telemetry/aggregate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../src/telemetry/aggregate.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { type DecisionEvent } from "./events";
4
4
  *
5
5
  * El scribe escribe cada decisión/aprendizaje como un item de lista Markdown ya
6
6
  * **redactado** (nunca prompts ni datos sensibles). Este parser lo convierte a
7
- * `decision` events para que el dashboard los agregue junto al resto.
7
+ * `decision` events para que el console los agregue junto al resto.
8
8
  *
9
9
  * Sin I/O, red, reloj (`now`), random ni env vars. `Date.parse` sobre una fecha
10
10
  * literal es determinista.
@@ -1,6 +1,6 @@
1
1
  import { type OpenTeamEvent, type RouteEvent } from "./events";
2
2
  import type { CostRecord } from "./types";
3
- /** Directorio por defecto de los logs de sesión que alimentan el dashboard. */
3
+ /** Directorio por defecto de los logs de sesión que alimentan el console. */
4
4
  export declare const DEFAULT_SESSIONS_DIR = ".opencode/openteam/sessions";
5
5
  /** Sesión sintética para registros del telemetry legacy sin `sessionID`. */
6
6
  export declare const LEGACY_SESSION_ID = "legacy";
@@ -1 +1 @@
1
- {"version":3,"file":"eventLog.d.ts","sourceRoot":"","sources":["../../src/telemetry/eventLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,UAAU,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,gCAAgC,CAAC;AAElE,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,sEAAsE;AACtE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACtD,CAAC;AAEF,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjE,iFAAiF;IACjF,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAMF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAapE;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAmB9D;AAED,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAwBrE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAsBpE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC,CASvB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,4DAA4D;IAC5D,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,sDAAsD;IACtD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,EAAE,CAAC,CAyB1B"}
1
+ {"version":3,"file":"eventLog.d.ts","sourceRoot":"","sources":["../../src/telemetry/eventLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,UAAU,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,gCAAgC,CAAC;AAElE,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,sEAAsE;AACtE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACtD,CAAC;AAEF,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjE,iFAAiF;IACjF,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAMF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAapE;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAmB9D;AAED,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAwBrE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAsBpE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC,CASvB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,4DAA4D;IAC5D,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,sDAAsD;IACtD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,EAAE,CAAC,CAyB1B"}
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  /**
3
3
  * Modelo de eventos de openteam. Cada sesión de opencode escribe una secuencia
4
- * de estos eventos (JSONL) que el dashboard agrega. Discriminados por `type`.
4
+ * de estos eventos (JSONL) que el console agrega. Discriminados por `type`.
5
5
  *
6
6
  * Privacidad: **nunca** contienen texto de prompt, argumentos de tool ni salida
7
7
  * en claro; solo `promptHash`, contadores y resúmenes ya redactados.
@@ -113,6 +113,23 @@ export declare const ActivityEventSchema: z.ZodObject<{
113
113
  agent: z.ZodOptional<z.ZodString>;
114
114
  summary: z.ZodString;
115
115
  }, z.core.$strip>;
116
+ /**
117
+ * Endpoint del servidor opencode de una sesión. Lo emite el plugin al arrancar
118
+ * usando `PluginInput.serverUrl`, para que la Console sepa cómo conectarse a la
119
+ * sesión (terminal/SSE). `url` es solo el origen loopback (`http://host:port`);
120
+ * nunca incluye rutas, query ni credenciales. `directory`/`worktree`/`title` son
121
+ * metadatos no sensibles del workspace.
122
+ */
123
+ export declare const SessionEndpointEventSchema: z.ZodObject<{
124
+ v: z.ZodLiteral<1>;
125
+ ts: z.ZodNumber;
126
+ sessionID: z.ZodString;
127
+ type: z.ZodLiteral<"session-endpoint">;
128
+ url: z.ZodString;
129
+ directory: z.ZodOptional<z.ZodString>;
130
+ worktree: z.ZodOptional<z.ZodString>;
131
+ title: z.ZodOptional<z.ZodString>;
132
+ }, z.core.$strip>;
116
133
  export declare const OpenTeamEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
117
134
  v: z.ZodLiteral<1>;
118
135
  ts: z.ZodNumber;
@@ -205,6 +222,15 @@ export declare const OpenTeamEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
205
222
  }>;
206
223
  agent: z.ZodOptional<z.ZodString>;
207
224
  summary: z.ZodString;
225
+ }, z.core.$strip>, z.ZodObject<{
226
+ v: z.ZodLiteral<1>;
227
+ ts: z.ZodNumber;
228
+ sessionID: z.ZodString;
229
+ type: z.ZodLiteral<"session-endpoint">;
230
+ url: z.ZodString;
231
+ directory: z.ZodOptional<z.ZodString>;
232
+ worktree: z.ZodOptional<z.ZodString>;
233
+ title: z.ZodOptional<z.ZodString>;
208
234
  }, z.core.$strip>], "type">;
209
235
  export type OpenTeamEvent = z.infer<typeof OpenTeamEventSchema>;
210
236
  export type RouteEvent = z.infer<typeof RouteEventSchema>;
@@ -213,5 +239,6 @@ export type ToolcallEvent = z.infer<typeof ToolcallEventSchema>;
213
239
  export type MeetingEvent = z.infer<typeof MeetingEventSchema>;
214
240
  export type DecisionEvent = z.infer<typeof DecisionEventSchema>;
215
241
  export type ActivityEvent = z.infer<typeof ActivityEventSchema>;
242
+ export type SessionEndpointEvent = z.infer<typeof SessionEndpointEventSchema>;
216
243
  export type OpenTeamEventType = OpenTeamEvent["type"];
217
244
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/telemetry/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAW/C,yEAAyE;AACzE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoB3B,CAAC;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAc7B,CAAC;AAEH,sEAAsE;AACtE,eAAO,MAAM,mBAAmB;;;;;;;;;;;iBAS9B,CAAC;AAEH,iEAAiE;AACjE,eAAO,MAAM,kBAAkB;;;;;;;;;iBAM7B,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,mBAAmB;;;;;;;;iBAK9B,CAAC;AAEH,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;iBAK9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAO9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/telemetry/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAW/C,yEAAyE;AACzE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoB3B,CAAC;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAc7B,CAAC;AAEH,sEAAsE;AACtE,eAAO,MAAM,mBAAmB;;;;;;;;;;;iBAS9B,CAAC;AAEH,iEAAiE;AACjE,eAAO,MAAM,kBAAkB;;;;;;;;;iBAM7B,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,mBAAmB;;;;;;;;iBAK9B,CAAC;AAEH,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;iBAK9B,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;iBAMrC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAQ9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { ConsoleClient } from "../console/opencodeClient";
3
+ import type { PtyClient } from "../console/pty";
4
+ /**
5
+ * Rutas HTTP **impuras** de la vista "Sesión" de la Console (§ Fase 3). Todas
6
+ * exigen el token efímero (§7.4) y solo actúan si `terminalEnabled`. El
7
+ * transporte es SSE (salida) + POST (input/permiso): portable y sin WebSocket
8
+ * (la terminal PTY real llega en Fase 5).
9
+ */
10
+ export type ConsoleRouteDeps = {
11
+ token: string;
12
+ terminalEnabled: boolean;
13
+ /** Habilita la vista "Terminal" (PTY real, Fase 5). Opt-in. */
14
+ ptyEnabled?: boolean;
15
+ /** Resuelve el origen del servidor opencode de una sesión (o `undefined`). */
16
+ resolveEndpoint: (sessionID: string) => Promise<string | undefined>;
17
+ /** Crea un cliente opencode para un endpoint (inyectable en tests). */
18
+ createClient: (endpoint: string) => ConsoleClient;
19
+ /** Crea un cliente PTY para un endpoint (solo si `ptyEnabled`). */
20
+ createPtyClient?: (endpoint: string) => PtyClient;
21
+ };
22
+ /**
23
+ * Enruta las peticiones de la vista "Sesión". Devuelve `true` si la petición
24
+ * pertenece a `/console/...` (y por tanto ya fue respondida), `false` para que el
25
+ * servidor continúe con sus rutas de solo lectura.
26
+ */
27
+ export declare function handleConsoleRoute(request: IncomingMessage, response: ServerResponse, url: URL, deps: ConsoleRouteDeps): Promise<boolean>;
28
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/web/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAM/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8EAA8E;IAC9E,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACpE,uEAAuE;IACvE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,aAAa,CAAC;IAClD,mEAAmE;IACnE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC;CACnD,CAAC;AAyNF;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,OAAO,CAAC,CA6ClB"}
package/dist/web/git.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { CommitView } from "../dashboard/types";
1
+ import type { CommitView } from "../console/types";
2
2
  import type { ExecLike } from "../local/foundry-local";
3
3
  /**
4
4
  * Lee el último commit (`git log -1`) usando el `exec` inyectado y lo devuelve
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/web/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,GACb,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAgBvC"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/web/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,GACb,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAgBvC"}
@@ -1,4 +1,4 @@
1
- /** Rutas por defecto de las fuentes que alimentan el dashboard. */
1
+ /** Rutas por defecto de las fuentes que alimentan el console. */
2
2
  export declare const DEFAULT_BACKLOG_PATH = ".opencode/openteam-backlog.md";
3
3
  export declare const DEFAULT_DECISIONS_PATH = ".opencode/openteam-decisions.md";
4
4
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/web/paths.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,kCAAkC,CAAC;AACpE,eAAO,MAAM,sBAAsB,oCAAoC,CAAC"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/web/paths.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,kCAAkC,CAAC;AACpE,eAAO,MAAM,sBAAsB,oCAAoC,CAAC"}
@@ -1,16 +1,27 @@
1
1
  import { createServer as createHttpServer } from "node:http";
2
- import type { DashboardConfig } from "../config/schema";
3
- import type { DashboardInputs } from "../dashboard/state";
4
- export type DashboardServerDeps = {
5
- /** Relee las fuentes y produce los inputs crudos del dashboard. */
6
- readSnapshot: () => Promise<DashboardInputs>;
7
- config: DashboardConfig;
2
+ import type { ConsoleConfig } from "../config/schema";
3
+ import type { ConsoleClient } from "../console/opencodeClient";
4
+ import type { PtyClient } from "../console/pty";
5
+ import type { ConsoleInputs } from "../console/state";
6
+ export type ConsoleServerDeps = {
7
+ /** Relee las fuentes y produce los inputs crudos del console. */
8
+ readSnapshot: () => Promise<ConsoleInputs>;
9
+ config: ConsoleConfig;
8
10
  /** Inyectable para tests; por defecto el `createServer` de `node:http`. */
9
11
  createServer?: typeof createHttpServer;
10
12
  /** Logger (por defecto `console`). */
11
13
  log?: (message: string) => void;
14
+ /** Vista "Sesión": token efímero + factoría de cliente opencode. Opcional. */
15
+ console?: {
16
+ token: string;
17
+ terminalEnabled: boolean;
18
+ /** Habilita la vista "Terminal" (PTY real, Fase 5). Opt-in. */
19
+ ptyEnabled?: boolean;
20
+ createClient: (endpoint: string) => ConsoleClient;
21
+ createPtyClient?: (endpoint: string) => PtyClient;
22
+ };
12
23
  };
13
- export type DashboardServer = {
24
+ export type ConsoleServer = {
14
25
  url: string;
15
26
  port: number;
16
27
  /** Reevalúa el estado y lo empuja a los clientes SSE conectados. */
@@ -18,10 +29,10 @@ export type DashboardServer = {
18
29
  close: () => void;
19
30
  };
20
31
  /**
21
- * Arranca el servidor del dashboard con `node:http` (portable a Node y Bun) en
32
+ * Arranca el servidor del console con `node:http` (portable a Node y Bun) en
22
33
  * loopback. Sirve `/` (HTML), `/api/state` (JSON), `/events` (SSE) y `/healthz`.
23
34
  * Solo lectura: cualquier método ≠ GET → 405; ruta desconocida → 404. Con
24
35
  * `autoPortFallback` prueba puertos sucesivos si el preferido está ocupado.
25
36
  */
26
- export declare function createDashboardServer(deps: DashboardServerDeps): Promise<DashboardServer>;
37
+ export declare function createConsoleServer(deps: ConsoleServerDeps): Promise<ConsoleServer>;
27
38
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,gBAAgB,EAIjC,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAY1D,MAAM,MAAM,mBAAmB,GAAG;IAChC,mEAAmE;IACnE,YAAY,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7C,MAAM,EAAE,eAAe,CAAC;IACxB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,gBAAgB,CAAC;IACvC,sCAAsC;IACtC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAkDF;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,eAAe,CAAC,CA4F1B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,gBAAgB,EAIjC,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAatD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iEAAiE;IACjE,YAAY,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,gBAAgB,CAAC;IACvC,sCAAsC;IACtC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,8EAA8E;IAC9E,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,OAAO,CAAC;QACzB,+DAA+D;QAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,aAAa,CAAC;QAClD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC;KACnD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AA2DF;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,aAAa,CAAC,CA4HxB"}
@@ -1,7 +1,7 @@
1
1
  import type { AgentFile } from "../commands/agents";
2
- import type { DashboardInputs } from "../dashboard/state";
3
- import type { CommitView } from "../dashboard/types";
4
- /** Dependencias de I/O que el driver inyecta para leer las fuentes del dashboard. */
2
+ import type { ConsoleInputs } from "../console/state";
3
+ import type { CommitView } from "../console/types";
4
+ /** Dependencias de I/O que el driver inyecta para leer las fuentes del console. */
5
5
  export type SnapshotDeps = {
6
6
  /** Lee un fichero de texto; devuelve `undefined` si no existe (ENOENT). */
7
7
  readText: (path: string) => Promise<string | undefined>;
@@ -33,8 +33,8 @@ export type SnapshotContext = {
33
33
  };
34
34
  /**
35
35
  * Crea un lector de snapshot: cada llamada relee las fuentes en disco (todos los
36
- * logs de sesión + decisiones + backlog + agentes) y devuelve los `DashboardInputs`
37
- * crudos que `buildDashboardState` (puro) compondrá agregando las sesiones.
36
+ * logs de sesión + decisiones + backlog + agentes) y devuelve los `ConsoleInputs`
37
+ * crudos que `buildConsoleState` (puro) compondrá agregando las sesiones.
38
38
  */
39
- export declare function createSnapshotReader(deps: SnapshotDeps, paths: SnapshotPaths, context?: SnapshotContext): () => Promise<DashboardInputs>;
39
+ export declare function createSnapshotReader(deps: SnapshotDeps, paths: SnapshotPaths, context?: SnapshotContext): () => Promise<ConsoleInputs>;
40
40
  //# sourceMappingURL=snapshot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/web/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,oBAAoB,CAAC;AAG/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQrD,qFAAqF;AACrF,MAAM,MAAM,YAAY,GAAG;IACzB,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,wEAAwE;IACxE,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,sDAAsD;IACtD,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,4CAA4C;IAC5C,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,aAAa,EACpB,OAAO,GAAE,eAAoB,GAC5B,MAAM,OAAO,CAAC,eAAe,CAAC,CAiDhC"}
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/web/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,oBAAoB,CAAC;AAG/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnD,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG;IACzB,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,wEAAwE;IACxE,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,sDAAsD;IACtD,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,4CAA4C;IAC5C,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,aAAa,EACpB,OAAO,GAAE,eAAoB,GAC5B,MAAM,OAAO,CAAC,aAAa,CAAC,CAiD9B"}
@@ -1,9 +1,11 @@
1
1
  import { watch as fsWatch } from "node:fs";
2
2
  import type { AgentFile } from "../commands/agents";
3
- import type { DashboardConfig } from "../config/schema";
4
- import type { CommitView } from "../dashboard/types";
5
- export type DashboardRuntimeDeps = {
6
- config: DashboardConfig;
3
+ import type { ConsoleConfig } from "../config/schema";
4
+ import type { ConsoleClient } from "../console/opencodeClient";
5
+ import type { PtyClient } from "../console/pty";
6
+ import type { CommitView } from "../console/types";
7
+ export type ConsoleRuntimeDeps = {
8
+ config: ConsoleConfig;
7
9
  /** Directorio de logs de sesión (`sessions/*.jsonl`). */
8
10
  sessionsDir: string;
9
11
  agentDir: string;
@@ -20,20 +22,28 @@ export type DashboardRuntimeDeps = {
20
22
  id?: string;
21
23
  startedAt?: string;
22
24
  };
25
+ /** Vista "Sesión": token + factoría de cliente opencode. Opcional. */
26
+ console?: {
27
+ token: string;
28
+ terminalEnabled: boolean;
29
+ ptyEnabled?: boolean;
30
+ createClient: (endpoint: string) => ConsoleClient;
31
+ createPtyClient?: (endpoint: string) => PtyClient;
32
+ };
23
33
  /** Inyectables para tests. */
24
- serve?: typeof import("./server").createDashboardServer;
34
+ serve?: typeof import("./server").createConsoleServer;
25
35
  watch?: (path: string, listener: () => void) => ReturnType<typeof fsWatch>;
26
36
  log?: (message: string) => void;
27
37
  };
28
- export type DashboardRuntime = {
38
+ export type ConsoleRuntime = {
29
39
  url: string;
30
40
  port: number;
31
41
  close: () => void;
32
42
  };
33
43
  /**
34
- * Compone el runtime del dashboard: lector de snapshot multi-sesión + servidor
35
- * `node:http` + watcher de ficheros. Lo arranca la CLI (`openteam dashboard`) y
44
+ * Compone el runtime del console: lector de snapshot multi-sesión + servidor
45
+ * `node:http` + watcher de ficheros. Lo arranca la CLI (`openteam console`) y
36
46
  * agrega **todas** las sesiones de opencode que escriben en `sessionsDir`.
37
47
  */
38
- export declare function startDashboard(deps: DashboardRuntimeDeps): Promise<DashboardRuntime>;
48
+ export declare function startConsole(deps: ConsoleRuntimeDeps): Promise<ConsoleRuntime>;
39
49
  //# sourceMappingURL=start.d.ts.map