@cleocode/cleo-os 2026.4.18 → 2026.4.20

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * CleoOS CANT bridge — Wave 2 Pi extension.
2
+ * CleoOS CANT bridge — Wave 2 + Wave 5 Pi extension.
3
3
  *
4
4
  * CANONICAL LOCATION: `packages/cleo-os/extensions/cleo-cant-bridge.ts`
5
5
  *
@@ -12,16 +12,17 @@
12
12
  * Installed to: $XDG_DATA_HOME/cleo/extensions/cleo-cant-bridge.js
13
13
  * Loaded by: Pi via `--extension <path>` injected by CleoOS cli.ts
14
14
  *
15
- * This bridge discovers `.cant` files in the project's `.cleo/cant/`
16
- * directory at session start, compiles them via `@cleocode/cant`'s
17
- * `compileBundle()`, and appends the compiled declarations to Pi's
18
- * system prompt on `before_agent_start`. This gives the LLM awareness
19
- * of all declared agents, teams, and tools without hand-authored
20
- * protocol text.
15
+ * This bridge discovers `.cant` files across the 3-tier hierarchy at
16
+ * session start, compiles them via `@cleocode/cant`'s `compileBundle()`,
17
+ * and appends the compiled declarations to Pi's system prompt on
18
+ * `before_agent_start`. This gives the LLM awareness of all declared
19
+ * agents, teams, and tools without hand-authored protocol text.
21
20
  *
22
- * Wave 2 scope:
23
- * - Scans project tier only: `<cwd>/.cleo/cant/` (recursive)
24
- * - Three-tier resolution (global, user, project) is Wave 5
21
+ * 3-tier resolution (T438, ULTRAPLAN Section 2.4):
22
+ * - Global: `~/.local/share/cleo/cant/` (lowest precedence)
23
+ * - User: `~/.config/cleo/cant/`
24
+ * - Project: `<cwd>/.cleo/cant/` (highest precedence)
25
+ * - Override semantics: project > user > global, matched by basename
25
26
  * - Prompt strategy: APPEND (per ULTRAPLAN L6, never replace)
26
27
  *
27
28
  * Wave 8 additions (T420):
@@ -44,8 +45,10 @@
44
45
  *
45
46
  * @packageDocumentation
46
47
  */
47
- import { existsSync, readdirSync } from "node:fs";
48
- import { join } from "node:path";
48
+ import { readdirSync } from "node:fs";
49
+ import { homedir } from "node:os";
50
+ import { basename, join } from "node:path";
51
+ import { accentPrimary, bold, textSecondary, BOX_HORIZONTAL, BOX_VERTICAL, BOX_TOP_LEFT, BOX_TOP_RIGHT, BOX_BOTTOM_LEFT, BOX_BOTTOM_RIGHT, BOX_LEFT_T, BOX_RIGHT_T, ICON_FORGE, ICON_DIAMOND, ICON_TRIANGLE, LINE_VERTICAL, } from "./tui-theme.js";
49
52
  // ============================================================================
50
53
  // T420: validate-on-load constants and pure helpers
51
54
  // ============================================================================
@@ -205,6 +208,47 @@ function extractTargetPath(toolName, toolInput) {
205
208
  }
206
209
  return null;
207
210
  }
211
+ /** Cached bundle counts, set during session_start. */
212
+ let lastBundleCounts = null;
213
+ /**
214
+ * Build the CleoOS branded session banner lines.
215
+ *
216
+ * Renders a box-drawing banner with the forge aesthetic using purple
217
+ * ANSI accents and the compiled CANT bundle counts.
218
+ *
219
+ * @param counts - Agent, team, and tool counts from the CANT bundle.
220
+ * @param sessionId - The current session ID, if available.
221
+ * @returns An array of pre-formatted ANSI lines for the widget.
222
+ */
223
+ export function buildSessionBanner(counts, sessionId) {
224
+ const WIDTH = 44;
225
+ const hBar = BOX_HORIZONTAL.repeat(WIDTH);
226
+ // Build the content strings (plain, without ANSI, for padding calculation)
227
+ const titleText = ` ${ICON_FORGE} C L E O O S ${ICON_FORGE}`;
228
+ const subtitleText = " The Agentic Development Forge";
229
+ const statsText = ` Agents: ${counts.agents} ${LINE_VERTICAL} Teams: ${counts.teams} ${LINE_VERTICAL} Tools: ${counts.tools}`;
230
+ const sessionText = ` Session: ${sessionId.length > 20 ? sessionId.slice(0, 20) + "..." : sessionId}`;
231
+ /**
232
+ * Pad content to fill the banner width.
233
+ *
234
+ * @param content - The visible content string.
235
+ * @param styledContent - The ANSI-styled version of the content.
236
+ * @returns The padded line with box-drawing border characters.
237
+ */
238
+ function padLine(content, styledContent) {
239
+ const pad = Math.max(0, WIDTH - content.length);
240
+ return accentPrimary(` ${BOX_VERTICAL}`) + styledContent + " ".repeat(pad) + accentPrimary(BOX_VERTICAL);
241
+ }
242
+ return [
243
+ accentPrimary(` ${BOX_TOP_LEFT}${hBar}${BOX_TOP_RIGHT}`),
244
+ padLine(titleText, bold(accentPrimary(titleText))),
245
+ padLine(subtitleText, textSecondary(subtitleText)),
246
+ accentPrimary(` ${BOX_LEFT_T}${hBar}${BOX_RIGHT_T}`),
247
+ padLine(statsText, textSecondary(statsText)),
248
+ padLine(sessionText, textSecondary(sessionText)),
249
+ accentPrimary(` ${BOX_BOTTOM_LEFT}${hBar}${BOX_BOTTOM_RIGHT}`),
250
+ ];
251
+ }
208
252
  // ============================================================================
209
253
  // Internal state
210
254
  // ============================================================================
@@ -235,6 +279,66 @@ function discoverCantFiles(dir) {
235
279
  return [];
236
280
  }
237
281
  }
282
+ /**
283
+ * Resolve XDG-compliant paths for the 3-tier CANT hierarchy.
284
+ *
285
+ * Respects `XDG_DATA_HOME` and `XDG_CONFIG_HOME` environment variables.
286
+ * Falls back to XDG defaults (`~/.local/share/` and `~/.config/`).
287
+ *
288
+ * @param projectDir - The project root directory (for the project tier).
289
+ * @returns An object with `global`, `user`, and `project` CANT directory paths.
290
+ */
291
+ function resolveThreeTierPaths(projectDir) {
292
+ const home = homedir();
293
+ const xdgData = process.env["XDG_DATA_HOME"] ?? join(home, ".local", "share");
294
+ const xdgConfig = process.env["XDG_CONFIG_HOME"] ?? join(home, ".config");
295
+ return {
296
+ global: join(xdgData, "cleo", "cant"),
297
+ user: join(xdgConfig, "cleo", "cant"),
298
+ project: join(projectDir, ".cleo", "cant"),
299
+ };
300
+ }
301
+ /**
302
+ * Discover `.cant` files across all three tiers with override semantics.
303
+ *
304
+ * Scans global, user, and project tiers. Files in higher-precedence tiers
305
+ * override files in lower-precedence tiers that share the same basename.
306
+ * The precedence order is: project > user > global.
307
+ *
308
+ * @param projectDir - The project root directory.
309
+ * @returns An object containing the merged file list and per-tier statistics.
310
+ */
311
+ function discoverCantFilesMultiTier(projectDir) {
312
+ const paths = resolveThreeTierPaths(projectDir);
313
+ const globalFiles = discoverCantFiles(paths.global);
314
+ const userFiles = discoverCantFiles(paths.user);
315
+ const projectFiles = discoverCantFiles(paths.project);
316
+ // Build basename-keyed map; lowest precedence first so higher tiers override
317
+ const fileMap = new Map();
318
+ for (const file of globalFiles) {
319
+ fileMap.set(basename(file), file);
320
+ }
321
+ const afterGlobal = fileMap.size;
322
+ for (const file of userFiles) {
323
+ fileMap.set(basename(file), file);
324
+ }
325
+ const afterUser = fileMap.size;
326
+ for (const file of projectFiles) {
327
+ fileMap.set(basename(file), file);
328
+ }
329
+ const totalUniqueInputs = globalFiles.length + userFiles.length + projectFiles.length;
330
+ const overrides = totalUniqueInputs - fileMap.size;
331
+ return {
332
+ files: Array.from(fileMap.values()),
333
+ stats: {
334
+ global: globalFiles.length,
335
+ user: userFiles.length,
336
+ project: projectFiles.length,
337
+ overrides,
338
+ merged: fileMap.size,
339
+ },
340
+ };
341
+ }
238
342
  // ============================================================================
239
343
  // T420: mental-model injection helper (async, calls memoryFind)
240
344
  // ============================================================================
@@ -288,15 +392,14 @@ async function fetchMentalModelInjection(agentName, projectRoot) {
288
392
  * @param pi - The Pi extension API instance.
289
393
  */
290
394
  export default function (pi) {
291
- // session_start: discover and compile .cant files from the project tier
395
+ // session_start: discover and compile .cant files from all 3 tiers
396
+ // T438: 3-tier resolution — global, user, project (project wins)
292
397
  pi.on("session_start", async (_event, ctx) => {
293
398
  bundlePrompt = null;
294
399
  lastDiagnosticSummary = null;
400
+ lastBundleCounts = null;
295
401
  try {
296
- const cantDir = join(ctx.cwd, ".cleo", "cant");
297
- if (!existsSync(cantDir))
298
- return;
299
- const files = discoverCantFiles(cantDir);
402
+ const { files, stats } = discoverCantFilesMultiTier(ctx.cwd);
300
403
  if (files.length === 0)
301
404
  return;
302
405
  // Dynamic import: @cleocode/cant may not be installed in all environments
@@ -306,11 +409,22 @@ export default function (pi) {
306
409
  if (prompt.length > 0) {
307
410
  bundlePrompt = prompt;
308
411
  }
309
- // Build diagnostic summary
412
+ // T442: Cache bundle counts for banner and status bar
413
+ const teamName = bundle.teams.length > 0
414
+ ? bundle.teams[0].name
415
+ : "none";
416
+ lastBundleCounts = {
417
+ agents: bundle.agents.length,
418
+ teams: bundle.teams.length,
419
+ tools: bundle.tools.length,
420
+ teamName,
421
+ };
422
+ // Build diagnostic summary with per-tier counts
310
423
  const errorDiags = bundle.diagnostics.filter((d) => d.severity === "error");
311
424
  const warnDiags = bundle.diagnostics.filter((d) => d.severity === "warning");
312
425
  lastDiagnosticSummary = [
313
- `Files: ${files.length}`,
426
+ `Files: ${files.length} (global: ${stats.global}, user: ${stats.user}, project: ${stats.project})`,
427
+ `Overrides: ${stats.overrides}`,
314
428
  `Agents: ${bundle.agents.length}`,
315
429
  `Teams: ${bundle.teams.length}`,
316
430
  `Tools: ${bundle.tools.length}`,
@@ -320,11 +434,22 @@ export default function (pi) {
320
434
  ].join(", ");
321
435
  // Notify on errors
322
436
  if (errorDiags.length > 0 && ctx.hasUI) {
323
- ctx.ui.notify(`CleoOS CANT bridge: ${errorDiags.length} validation error(s) in .cleo/cant/`, "warning");
437
+ ctx.ui.notify(`CleoOS CANT bridge: ${errorDiags.length} validation error(s) in CANT files`, "warning");
324
438
  }
325
- // Success notification
439
+ // T442: Render branded session banner and status bar entries
326
440
  if (ctx.hasUI) {
327
- ctx.ui.setStatus("cleo-cant-bridge", `CANT: ${bundle.agents.length} agent(s), ${files.length} file(s)`);
441
+ // Derive a session ID from the session manager or use a fallback
442
+ const sessionId = ctx.sessionManager?.getSessionId?.()
443
+ ?? `ses_${new Date().toISOString().replace(/[:.T-]/g, "").slice(0, 14)}`;
444
+ // Render the CleoOS banner widget above the editor
445
+ const bannerLines = buildSessionBanner(lastBundleCounts, sessionId);
446
+ ctx.ui.setWidget("cleo-banner", bannerLines, { placement: "aboveEditor" });
447
+ // Set persistent status bar entries using design system icons
448
+ ctx.ui.setStatus("cleo-agents", `${ICON_FORGE} ${bundle.agents.length} agents`);
449
+ ctx.ui.setStatus("cleo-team", `${ICON_DIAMOND} ${teamName}`);
450
+ ctx.ui.setStatus("cleo-tier", `${ICON_TRIANGLE} high`);
451
+ // Keep the existing CANT bridge status
452
+ ctx.ui.setStatus("cleo-cant-bridge", `CANT: ${bundle.agents.length} agent(s), ${files.length} file(s) [G:${stats.global} U:${stats.user} P:${stats.project}]`);
328
453
  }
329
454
  }
330
455
  catch (err) {
@@ -446,6 +571,7 @@ export default function (pi) {
446
571
  pi.on("session_shutdown", async () => {
447
572
  bundlePrompt = null;
448
573
  lastDiagnosticSummary = null;
574
+ lastBundleCounts = null;
449
575
  });
450
576
  }
451
577
  //# sourceMappingURL=cleo-cant-bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cleo-cant-bridge.js","sourceRoot":"","sources":["cleo-cant-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cleo-cant-bridge.js","sourceRoot":"","sources":["cleo-cant-bridge.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * CleoOS CANT bridge — Wave 2 Pi extension.
2
+ * CleoOS CANT bridge — Wave 2 + Wave 5 Pi extension.
3
3
  *
4
4
  * CANONICAL LOCATION: `packages/cleo-os/extensions/cleo-cant-bridge.ts`
5
5
  *
@@ -12,16 +12,17 @@
12
12
  * Installed to: $XDG_DATA_HOME/cleo/extensions/cleo-cant-bridge.js
13
13
  * Loaded by: Pi via `--extension <path>` injected by CleoOS cli.ts
14
14
  *
15
- * This bridge discovers `.cant` files in the project's `.cleo/cant/`
16
- * directory at session start, compiles them via `@cleocode/cant`'s
17
- * `compileBundle()`, and appends the compiled declarations to Pi's
18
- * system prompt on `before_agent_start`. This gives the LLM awareness
19
- * of all declared agents, teams, and tools without hand-authored
20
- * protocol text.
15
+ * This bridge discovers `.cant` files across the 3-tier hierarchy at
16
+ * session start, compiles them via `@cleocode/cant`'s `compileBundle()`,
17
+ * and appends the compiled declarations to Pi's system prompt on
18
+ * `before_agent_start`. This gives the LLM awareness of all declared
19
+ * agents, teams, and tools without hand-authored protocol text.
21
20
  *
22
- * Wave 2 scope:
23
- * - Scans project tier only: `<cwd>/.cleo/cant/` (recursive)
24
- * - Three-tier resolution (global, user, project) is Wave 5
21
+ * 3-tier resolution (T438, ULTRAPLAN Section 2.4):
22
+ * - Global: `~/.local/share/cleo/cant/` (lowest precedence)
23
+ * - User: `~/.config/cleo/cant/`
24
+ * - Project: `<cwd>/.cleo/cant/` (highest precedence)
25
+ * - Override semantics: project > user > global, matched by basename
25
26
  * - Prompt strategy: APPEND (per ULTRAPLAN L6, never replace)
26
27
  *
27
28
  * Wave 8 additions (T420):
@@ -45,12 +46,30 @@
45
46
  * @packageDocumentation
46
47
  */
47
48
 
48
- import { existsSync, readdirSync } from "node:fs";
49
- import { join } from "node:path";
49
+ import { readdirSync } from "node:fs";
50
+ import { homedir } from "node:os";
51
+ import { basename, join } from "node:path";
50
52
  import type {
51
53
  ExtensionAPI,
52
54
  ExtensionContext,
53
55
  } from "@mariozechner/pi-coding-agent";
56
+ import {
57
+ accentPrimary,
58
+ bold,
59
+ textSecondary,
60
+ BOX_HORIZONTAL,
61
+ BOX_VERTICAL,
62
+ BOX_TOP_LEFT,
63
+ BOX_TOP_RIGHT,
64
+ BOX_BOTTOM_LEFT,
65
+ BOX_BOTTOM_RIGHT,
66
+ BOX_LEFT_T,
67
+ BOX_RIGHT_T,
68
+ ICON_FORGE,
69
+ ICON_DIAMOND,
70
+ ICON_TRIANGLE,
71
+ LINE_VERTICAL,
72
+ } from "./tui-theme.js";
54
73
 
55
74
  // ============================================================================
56
75
  // T420: validate-on-load constants and pure helpers
@@ -248,6 +267,84 @@ function extractTargetPath(
248
267
  return null;
249
268
  }
250
269
 
270
+ // ============================================================================
271
+ // T442: ANSI color helpers — imported from shared tui-theme.ts
272
+ // ============================================================================
273
+ // All color constants and styling functions are imported from tui-theme.ts
274
+ // at the top of this file. The design tokens map to:
275
+ // accentPrimary → #a855f7 (ANSI 135) — banner chrome, headers
276
+ // textSecondary → #94a3b8 (ANSI 245) — dim/muted text
277
+ // bold → ANSI bold escape — headings, emphasis
278
+
279
+ // ============================================================================
280
+ // T442: Session banner rendering
281
+ // ============================================================================
282
+
283
+ /**
284
+ * Cached bundle counts from the last session_start compilation.
285
+ * Used by the banner and status bar entries.
286
+ */
287
+ export interface BundleCounts {
288
+ /** Number of agents declared in the CANT bundle. */
289
+ agents: number;
290
+ /** Number of teams declared in the CANT bundle. */
291
+ teams: number;
292
+ /** Number of tools declared in the CANT bundle. */
293
+ tools: number;
294
+ /** Name of the first team in the bundle, or "none" if no teams. */
295
+ teamName: string;
296
+ }
297
+
298
+ /** Cached bundle counts, set during session_start. */
299
+ let lastBundleCounts: BundleCounts | null = null;
300
+
301
+ /**
302
+ * Build the CleoOS branded session banner lines.
303
+ *
304
+ * Renders a box-drawing banner with the forge aesthetic using purple
305
+ * ANSI accents and the compiled CANT bundle counts.
306
+ *
307
+ * @param counts - Agent, team, and tool counts from the CANT bundle.
308
+ * @param sessionId - The current session ID, if available.
309
+ * @returns An array of pre-formatted ANSI lines for the widget.
310
+ */
311
+ export function buildSessionBanner(
312
+ counts: BundleCounts,
313
+ sessionId: string,
314
+ ): string[] {
315
+ const WIDTH = 44;
316
+ const hBar = BOX_HORIZONTAL.repeat(WIDTH);
317
+
318
+ // Build the content strings (plain, without ANSI, for padding calculation)
319
+ const titleText = ` ${ICON_FORGE} C L E O O S ${ICON_FORGE}`;
320
+ const subtitleText = " The Agentic Development Forge";
321
+ const statsText =
322
+ ` Agents: ${counts.agents} ${LINE_VERTICAL} Teams: ${counts.teams} ${LINE_VERTICAL} Tools: ${counts.tools}`;
323
+ const sessionText = ` Session: ${sessionId.length > 20 ? sessionId.slice(0, 20) + "..." : sessionId}`;
324
+
325
+ /**
326
+ * Pad content to fill the banner width.
327
+ *
328
+ * @param content - The visible content string.
329
+ * @param styledContent - The ANSI-styled version of the content.
330
+ * @returns The padded line with box-drawing border characters.
331
+ */
332
+ function padLine(content: string, styledContent: string): string {
333
+ const pad = Math.max(0, WIDTH - content.length);
334
+ return accentPrimary(` ${BOX_VERTICAL}`) + styledContent + " ".repeat(pad) + accentPrimary(BOX_VERTICAL);
335
+ }
336
+
337
+ return [
338
+ accentPrimary(` ${BOX_TOP_LEFT}${hBar}${BOX_TOP_RIGHT}`),
339
+ padLine(titleText, bold(accentPrimary(titleText))),
340
+ padLine(subtitleText, textSecondary(subtitleText)),
341
+ accentPrimary(` ${BOX_LEFT_T}${hBar}${BOX_RIGHT_T}`),
342
+ padLine(statsText, textSecondary(statsText)),
343
+ padLine(sessionText, textSecondary(sessionText)),
344
+ accentPrimary(` ${BOX_BOTTOM_LEFT}${hBar}${BOX_BOTTOM_RIGHT}`),
345
+ ];
346
+ }
347
+
251
348
  // ============================================================================
252
349
  // Internal state
253
350
  // ============================================================================
@@ -281,6 +378,99 @@ function discoverCantFiles(dir: string): string[] {
281
378
  }
282
379
  }
283
380
 
381
+ // ============================================================================
382
+ // T438: 3-tier CANT discovery (global > user > project, project wins)
383
+ // ============================================================================
384
+
385
+ /** Per-tier file counts for diagnostic reporting. */
386
+ interface TierDiscoveryStats {
387
+ global: number;
388
+ user: number;
389
+ project: number;
390
+ overrides: number;
391
+ merged: number;
392
+ }
393
+
394
+ /**
395
+ * Resolve XDG-compliant paths for the 3-tier CANT hierarchy.
396
+ *
397
+ * Respects `XDG_DATA_HOME` and `XDG_CONFIG_HOME` environment variables.
398
+ * Falls back to XDG defaults (`~/.local/share/` and `~/.config/`).
399
+ *
400
+ * @param projectDir - The project root directory (for the project tier).
401
+ * @returns An object with `global`, `user`, and `project` CANT directory paths.
402
+ */
403
+ function resolveThreeTierPaths(projectDir: string): {
404
+ global: string;
405
+ user: string;
406
+ project: string;
407
+ } {
408
+ const home = homedir();
409
+ const xdgData =
410
+ process.env["XDG_DATA_HOME"] ?? join(home, ".local", "share");
411
+ const xdgConfig = process.env["XDG_CONFIG_HOME"] ?? join(home, ".config");
412
+
413
+ return {
414
+ global: join(xdgData, "cleo", "cant"),
415
+ user: join(xdgConfig, "cleo", "cant"),
416
+ project: join(projectDir, ".cleo", "cant"),
417
+ };
418
+ }
419
+
420
+ /**
421
+ * Discover `.cant` files across all three tiers with override semantics.
422
+ *
423
+ * Scans global, user, and project tiers. Files in higher-precedence tiers
424
+ * override files in lower-precedence tiers that share the same basename.
425
+ * The precedence order is: project > user > global.
426
+ *
427
+ * @param projectDir - The project root directory.
428
+ * @returns An object containing the merged file list and per-tier statistics.
429
+ */
430
+ function discoverCantFilesMultiTier(projectDir: string): {
431
+ files: string[];
432
+ stats: TierDiscoveryStats;
433
+ } {
434
+ const paths = resolveThreeTierPaths(projectDir);
435
+
436
+ const globalFiles = discoverCantFiles(paths.global);
437
+ const userFiles = discoverCantFiles(paths.user);
438
+ const projectFiles = discoverCantFiles(paths.project);
439
+
440
+ // Build basename-keyed map; lowest precedence first so higher tiers override
441
+ const fileMap = new Map<string, string>();
442
+
443
+ for (const file of globalFiles) {
444
+ fileMap.set(basename(file), file);
445
+ }
446
+
447
+ const afterGlobal = fileMap.size;
448
+
449
+ for (const file of userFiles) {
450
+ fileMap.set(basename(file), file);
451
+ }
452
+
453
+ const afterUser = fileMap.size;
454
+
455
+ for (const file of projectFiles) {
456
+ fileMap.set(basename(file), file);
457
+ }
458
+
459
+ const totalUniqueInputs = globalFiles.length + userFiles.length + projectFiles.length;
460
+ const overrides = totalUniqueInputs - fileMap.size;
461
+
462
+ return {
463
+ files: Array.from(fileMap.values()),
464
+ stats: {
465
+ global: globalFiles.length,
466
+ user: userFiles.length,
467
+ project: projectFiles.length,
468
+ overrides,
469
+ merged: fileMap.size,
470
+ },
471
+ };
472
+ }
473
+
284
474
  // ============================================================================
285
475
  // T420: mental-model injection helper (async, calls memoryFind)
286
476
  // ============================================================================
@@ -359,16 +549,15 @@ async function fetchMentalModelInjection(
359
549
  * @param pi - The Pi extension API instance.
360
550
  */
361
551
  export default function (pi: ExtensionAPI): void {
362
- // session_start: discover and compile .cant files from the project tier
552
+ // session_start: discover and compile .cant files from all 3 tiers
553
+ // T438: 3-tier resolution — global, user, project (project wins)
363
554
  pi.on("session_start", async (_event: unknown, ctx: ExtensionContext) => {
364
555
  bundlePrompt = null;
365
556
  lastDiagnosticSummary = null;
557
+ lastBundleCounts = null;
366
558
 
367
559
  try {
368
- const cantDir = join(ctx.cwd, ".cleo", "cant");
369
- if (!existsSync(cantDir)) return;
370
-
371
- const files = discoverCantFiles(cantDir);
560
+ const { files, stats } = discoverCantFilesMultiTier(ctx.cwd);
372
561
  if (files.length === 0) return;
373
562
 
374
563
  // Dynamic import: @cleocode/cant may not be installed in all environments
@@ -390,11 +579,23 @@ export default function (pi: ExtensionAPI): void {
390
579
  bundlePrompt = prompt;
391
580
  }
392
581
 
393
- // Build diagnostic summary
582
+ // T442: Cache bundle counts for banner and status bar
583
+ const teamName = bundle.teams.length > 0
584
+ ? bundle.teams[0].name
585
+ : "none";
586
+ lastBundleCounts = {
587
+ agents: bundle.agents.length,
588
+ teams: bundle.teams.length,
589
+ tools: bundle.tools.length,
590
+ teamName,
591
+ };
592
+
593
+ // Build diagnostic summary with per-tier counts
394
594
  const errorDiags = bundle.diagnostics.filter((d) => d.severity === "error");
395
595
  const warnDiags = bundle.diagnostics.filter((d) => d.severity === "warning");
396
596
  lastDiagnosticSummary = [
397
- `Files: ${files.length}`,
597
+ `Files: ${files.length} (global: ${stats.global}, user: ${stats.user}, project: ${stats.project})`,
598
+ `Overrides: ${stats.overrides}`,
398
599
  `Agents: ${bundle.agents.length}`,
399
600
  `Teams: ${bundle.teams.length}`,
400
601
  `Tools: ${bundle.tools.length}`,
@@ -406,16 +607,30 @@ export default function (pi: ExtensionAPI): void {
406
607
  // Notify on errors
407
608
  if (errorDiags.length > 0 && ctx.hasUI) {
408
609
  ctx.ui.notify(
409
- `CleoOS CANT bridge: ${errorDiags.length} validation error(s) in .cleo/cant/`,
610
+ `CleoOS CANT bridge: ${errorDiags.length} validation error(s) in CANT files`,
410
611
  "warning",
411
612
  );
412
613
  }
413
614
 
414
- // Success notification
615
+ // T442: Render branded session banner and status bar entries
415
616
  if (ctx.hasUI) {
617
+ // Derive a session ID from the session manager or use a fallback
618
+ const sessionId = ctx.sessionManager?.getSessionId?.()
619
+ ?? `ses_${new Date().toISOString().replace(/[:.T-]/g, "").slice(0, 14)}`;
620
+
621
+ // Render the CleoOS banner widget above the editor
622
+ const bannerLines = buildSessionBanner(lastBundleCounts, sessionId);
623
+ ctx.ui.setWidget("cleo-banner", bannerLines, { placement: "aboveEditor" });
624
+
625
+ // Set persistent status bar entries using design system icons
626
+ ctx.ui.setStatus("cleo-agents", `${ICON_FORGE} ${bundle.agents.length} agents`);
627
+ ctx.ui.setStatus("cleo-team", `${ICON_DIAMOND} ${teamName}`);
628
+ ctx.ui.setStatus("cleo-tier", `${ICON_TRIANGLE} high`);
629
+
630
+ // Keep the existing CANT bridge status
416
631
  ctx.ui.setStatus(
417
632
  "cleo-cant-bridge",
418
- `CANT: ${bundle.agents.length} agent(s), ${files.length} file(s)`,
633
+ `CANT: ${bundle.agents.length} agent(s), ${files.length} file(s) [G:${stats.global} U:${stats.user} P:${stats.project}]`,
419
634
  );
420
635
  }
421
636
  } catch (err: unknown) {
@@ -594,5 +809,6 @@ export default function (pi: ExtensionAPI): void {
594
809
  pi.on("session_shutdown", async () => {
595
810
  bundlePrompt = null;
596
811
  lastDiagnosticSummary = null;
812
+ lastBundleCounts = null;
597
813
  });
598
814
  }