mu-coding 0.9.0 → 0.10.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mu-coding",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Minimal terminal AI assistant for local models",
5
5
  "type": "module",
6
6
  "bin": {
@@ -24,9 +24,9 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "ink": "^7.0.1",
27
- "mu-agents": "0.9.0",
28
- "mu-core": "0.9.0",
29
- "mu-openai-provider": "0.9.0",
27
+ "mu-agents": "0.10.0",
28
+ "mu-core": "0.10.0",
29
+ "mu-openai-provider": "0.10.0",
30
30
  "react": "^19.2.5"
31
31
  }
32
32
  }
@@ -31,6 +31,7 @@ function listGitFiles(cwd: string): string[] | null {
31
31
  }
32
32
  }
33
33
 
34
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: iterative FS walker with MAX_FILES early-exit — branching is the algorithm; extracting helpers would scatter the cap check.
34
35
  function walkFs(root: string): string[] {
35
36
  const out: string[] = [];
36
37
  const stack: string[] = [root];
@@ -44,6 +44,7 @@ function splitTableRow(line: string): string[] {
44
44
  }
45
45
 
46
46
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: block parsing is dispatch-heavy
47
+ // biome-ignore lint/complexity/noExcessiveLinesPerFunction: single parser dispatch loop — every block kind consumed inline keeps the cursor (`i`) local; splitting would scatter it.
47
48
  function parseBlocks(input: string): Block[] {
48
49
  const lines = input.split('\n');
49
50
  const blocks: Block[] = [];
@@ -163,6 +164,7 @@ const INLINE_PATTERNS: { kind: InlineToken['kind']; re: RegExp; capture: number;
163
164
  { kind: 'italic', re: /_([^_\n]+)_/, capture: 1 },
164
165
  ];
165
166
 
167
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: greedy inline tokenizer — earliest-match across patterns then advance; the branching is the algorithm.
166
168
  function tokenizeInline(input: string): InlineToken[] {
167
169
  const out: InlineToken[] = [];
168
170
  let cursor = 0;
@@ -321,6 +323,7 @@ function QuoteBlock({ block, theme }: { block: Extract<Block, { type: 'quote' }>
321
323
  return (
322
324
  <Box flexDirection="column" marginBottom={1}>
323
325
  {block.lines.map((ln, i) => (
326
+ // biome-ignore lint/suspicious/noArrayIndexKey: blockquote lines render in document order and never reorder — index is the only stable identifier.
324
327
  <Box key={`${i}-${ln}`}>
325
328
  <Text color={theme.markdown.blockquote}> │ </Text>
326
329
  <Box flexShrink={1} flexGrow={1}>
@@ -347,6 +350,7 @@ function TableBlock({ block, theme }: { block: Extract<Block, { type: 'table' }>
347
350
  const renderRow = (cells: string[], bold: boolean, key: string) => (
348
351
  <Box key={key}>
349
352
  {Array.from({ length: colCount }, (_, c) => (
353
+ // biome-ignore lint/suspicious/noArrayIndexKey: table columns have fixed positions for the lifetime of the row; reordering is impossible.
350
354
  <Box key={c} marginRight={c === colCount - 1 ? 0 : 2}>
351
355
  <Text bold={bold}>{(cells[c] ?? '').padEnd(widths[c])}</Text>
352
356
  </Box>
@@ -356,6 +360,7 @@ function TableBlock({ block, theme }: { block: Extract<Block, { type: 'table' }>
356
360
  const sep = (
357
361
  <Box>
358
362
  {Array.from({ length: colCount }, (_, c) => (
363
+ // biome-ignore lint/suspicious/noArrayIndexKey: separator cells map 1:1 to columns — column index is the natural key.
359
364
  <Box key={c} marginRight={c === colCount - 1 ? 0 : 2}>
360
365
  <Text color={theme.markdown.tableBorder}>{'─'.repeat(widths[c])}</Text>
361
366
  </Box>