zelari-code 0.7.10 → 0.7.11

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 (94) hide show
  1. package/LICENSE +37 -37
  2. package/README.md +320 -320
  3. package/bin/zelari-code.js +62 -62
  4. package/dist/cli/components/SplashScreen.js +85 -85
  5. package/dist/cli/headless.js +10 -10
  6. package/dist/cli/keyStore.js +2 -2
  7. package/dist/cli/keyStore.js.map +1 -1
  8. package/dist/cli/main.bundled.js +249 -229
  9. package/dist/cli/main.bundled.js.map +4 -4
  10. package/dist/cli/main.js +1 -1
  11. package/dist/cli/modelDiscovery.js +42 -5
  12. package/dist/cli/modelDiscovery.js.map +1 -1
  13. package/dist/cli/provider/openai-compatible.js +4 -2
  14. package/dist/cli/provider/openai-compatible.js.map +1 -1
  15. package/dist/cli/slashCommands.js +2 -2
  16. package/dist/cli/slashHandlers/provider.js +1 -1
  17. package/dist/cli/slashHandlers/provider.js.map +1 -1
  18. package/package.json +2 -2
  19. package/dist/agents/advancedTools.js +0 -115
  20. package/dist/agents/advancedTools.js.map +0 -1
  21. package/dist/agents/councilApi.js +0 -375
  22. package/dist/agents/councilApi.js.map +0 -1
  23. package/dist/agents/councilDirectives.js +0 -100
  24. package/dist/agents/councilDirectives.js.map +0 -1
  25. package/dist/agents/promoteMember.js +0 -210
  26. package/dist/agents/promoteMember.js.map +0 -1
  27. package/dist/agents/promptModules.js +0 -139
  28. package/dist/agents/promptModules.js.map +0 -1
  29. package/dist/agents/roles.js +0 -299
  30. package/dist/agents/roles.js.map +0 -1
  31. package/dist/agents/skills/builtin/debugging.js +0 -248
  32. package/dist/agents/skills/builtin/debugging.js.map +0 -1
  33. package/dist/agents/skills/builtin/docs.js +0 -301
  34. package/dist/agents/skills/builtin/docs.js.map +0 -1
  35. package/dist/agents/skills/builtin/git-ops.js +0 -301
  36. package/dist/agents/skills/builtin/git-ops.js.map +0 -1
  37. package/dist/agents/skills/builtin/planning.js +0 -335
  38. package/dist/agents/skills/builtin/planning.js.map +0 -1
  39. package/dist/agents/skills/builtin/refactoring.js +0 -261
  40. package/dist/agents/skills/builtin/refactoring.js.map +0 -1
  41. package/dist/agents/skills/builtin/review.js +0 -302
  42. package/dist/agents/skills/builtin/review.js.map +0 -1
  43. package/dist/agents/skills/builtin/testing.js +0 -245
  44. package/dist/agents/skills/builtin/testing.js.map +0 -1
  45. package/dist/agents/skills.js +0 -272
  46. package/dist/agents/skills.js.map +0 -1
  47. package/dist/agents/systemPromptBuilder.js +0 -151
  48. package/dist/agents/systemPromptBuilder.js.map +0 -1
  49. package/dist/agents/toolSchemas.js +0 -249
  50. package/dist/agents/toolSchemas.js.map +0 -1
  51. package/dist/agents/tools.js +0 -196
  52. package/dist/agents/tools.js.map +0 -1
  53. package/dist/agents/vaultTools.js +0 -134
  54. package/dist/agents/vaultTools.js.map +0 -1
  55. package/dist/cli/components/CollapsibleToolOutput.js +0 -43
  56. package/dist/cli/components/CollapsibleToolOutput.js.map +0 -1
  57. package/dist/cli/components/Header.js +0 -38
  58. package/dist/cli/components/Header.js.map +0 -1
  59. package/dist/main/core/AgentHarness.js +0 -467
  60. package/dist/main/core/AgentHarness.js.map +0 -1
  61. package/dist/main/core/providerStream.js +0 -99
  62. package/dist/main/core/providerStream.js.map +0 -1
  63. package/dist/main/core/sessionJsonl.js +0 -99
  64. package/dist/main/core/sessionJsonl.js.map +0 -1
  65. package/dist/main/core/tools/auditLog.js +0 -26
  66. package/dist/main/core/tools/auditLog.js.map +0 -1
  67. package/dist/main/core/tools/builtin/filesystem.js +0 -110
  68. package/dist/main/core/tools/builtin/filesystem.js.map +0 -1
  69. package/dist/main/core/tools/builtin/listFiles.js +0 -86
  70. package/dist/main/core/tools/builtin/listFiles.js.map +0 -1
  71. package/dist/main/core/tools/builtin/search.js +0 -56
  72. package/dist/main/core/tools/builtin/search.js.map +0 -1
  73. package/dist/main/core/tools/builtin/shell.js +0 -51
  74. package/dist/main/core/tools/builtin/shell.js.map +0 -1
  75. package/dist/main/core/tools/registry.js +0 -71
  76. package/dist/main/core/tools/registry.js.map +0 -1
  77. package/dist/main/core/tools/toolTypes.js +0 -8
  78. package/dist/main/core/tools/toolTypes.js.map +0 -1
  79. package/dist/main/core/tools/zodBridge.js +0 -56
  80. package/dist/main/core/tools/zodBridge.js.map +0 -1
  81. package/dist/shared/eventBus.js +0 -104
  82. package/dist/shared/eventBus.js.map +0 -1
  83. package/dist/shared/events.js +0 -73
  84. package/dist/shared/events.js.map +0 -1
  85. package/dist/shared/index.js +0 -8
  86. package/dist/shared/index.js.map +0 -1
  87. package/dist/types/context.js +0 -3
  88. package/dist/types/context.js.map +0 -1
  89. package/dist/types/index.js +0 -2
  90. package/dist/types/index.js.map +0 -1
  91. package/dist/types/knowledge.js +0 -2
  92. package/dist/types/knowledge.js.map +0 -1
  93. package/dist/types/systemTypes.js +0 -10
  94. package/dist/types/systemTypes.js.map +0 -1
@@ -1,134 +0,0 @@
1
- /** Helper to build a ToolParameter concisely. */
2
- function p(name, type, description, required, extra) {
3
- return { name, type, description, required, ...extra };
4
- }
5
- /**
6
- * Knowledge Vault tools.
7
- *
8
- * These tools operate on KnowledgeDocuments via the ToolContext callbacks
9
- * (which are wired to the Zustand store).
10
- */
11
- export const VAULT_TOOL_DEFINITIONS = [
12
- {
13
- name: 'createDocument',
14
- description: 'Create a new markdown document in the Knowledge Vault.',
15
- category: 'vault',
16
- parameters: [
17
- p('path', 'string', 'Document path (e.g. "notes/architecture"). Must be unique.', true),
18
- p('title', 'string', 'Document title', true),
19
- p('content', 'string', 'Markdown content. Use [[wikilinks]] and #hashtags.', false, { default: '' }),
20
- p('tags', 'string[]', 'Tag list', false, { default: [] }),
21
- p('category', 'string', 'Document category', false),
22
- p('format', 'string', 'Document format', false, { default: 'markdown', enum: ['markdown', 'text', 'json', 'yaml', 'html', 'csv'] }),
23
- ],
24
- execute: (args, ctx) => {
25
- if (!ctx.addDocument)
26
- return 'Vault not available in this context.';
27
- const doc = ctx.addDocument({
28
- path: args['path'] ?? '',
29
- title: args['title'] ?? 'Untitled',
30
- content: args['content'] ?? '',
31
- format: (args['format'] ?? 'markdown'),
32
- tags: args['tags'] ?? [],
33
- frontmatter: {},
34
- category: args['category'] ?? undefined,
35
- workspaceId: ctx.workspaceId,
36
- });
37
- ctx.addActivity('task', 'document created', doc.title);
38
- return `Document "${doc.title}" created at path "${doc.path}".`;
39
- },
40
- },
41
- {
42
- name: 'updateDocument',
43
- description: 'Update an existing Knowledge Vault document (by id).',
44
- category: 'vault',
45
- parameters: [
46
- p('id', 'string', 'Document id to update', true),
47
- p('content', 'string', 'New markdown content', false),
48
- p('title', 'string', 'New title', false),
49
- p('tags', 'string[]', 'New tag list (replaces existing)', false),
50
- p('category', 'string', 'New category', false),
51
- ],
52
- execute: (args, ctx) => {
53
- if (!ctx.updateDocument)
54
- return 'Vault not available in this context.';
55
- const id = args['id'] ?? '';
56
- const updates = {};
57
- if (args['content'] !== undefined)
58
- updates.content = args['content'];
59
- if (args['title'] !== undefined)
60
- updates.title = args['title'];
61
- if (args['tags'] !== undefined)
62
- updates.tags = args['tags'];
63
- if (args['category'] !== undefined)
64
- updates.category = args['category'];
65
- ctx.updateDocument(id, updates);
66
- return `Document ${id} updated.`;
67
- },
68
- },
69
- {
70
- name: 'searchDocuments',
71
- description: 'Search Knowledge Vault documents by free-text query, tag, or category.',
72
- category: 'vault',
73
- parameters: [
74
- p('query', 'string', 'Free-text search query', false),
75
- p('tag', 'string', 'Filter by tag', false),
76
- p('category', 'string', 'Filter by category', false),
77
- p('limit', 'number', 'Max results', false, { default: 10 }),
78
- ],
79
- execute: (args, ctx) => {
80
- if (!ctx.searchDocuments)
81
- return 'Vault search not available in this context.';
82
- const query = args['query'] ?? '';
83
- const tag = args['tag'];
84
- const category = args['category'];
85
- const limit = args['limit'] ?? 10;
86
- let results = ctx.searchDocuments(query);
87
- if (tag)
88
- results = results.filter((d) => (d.tags ?? []).includes(tag));
89
- if (category)
90
- results = results.filter((d) => d.category === category);
91
- results = results.slice(0, limit);
92
- if (results.length === 0)
93
- return 'No matching documents found.';
94
- return results
95
- .map((d) => `- ${d.title} (${d.path}) [${(d.tags ?? []).join(', ')}]`)
96
- .join('\n');
97
- },
98
- },
99
- {
100
- name: 'linkDocuments',
101
- description: 'Create a bidirectional wikilink between two documents by inserting [[target]] into the source.',
102
- category: 'vault',
103
- parameters: [
104
- p('sourceId', 'string', 'Source document id', true),
105
- p('targetPathOrTitle', 'string', 'Target document path or title', true),
106
- p('alias', 'string', 'Optional display alias', false),
107
- ],
108
- execute: (args, ctx) => {
109
- if (!ctx.linkDocuments)
110
- return 'Vault linking not available in this context.';
111
- const sourceId = args['sourceId'] ?? '';
112
- const target = args['targetPathOrTitle'] ?? '';
113
- const alias = args['alias'];
114
- ctx.linkDocuments(sourceId, target, alias);
115
- return `Linked document ${sourceId} → ${target}${alias ? ` (alias: ${alias})` : ''}.`;
116
- },
117
- },
118
- {
119
- name: 'getDocumentBacklinks',
120
- description: 'Retrieve documents that link to a given document.',
121
- category: 'vault',
122
- parameters: [p('id', 'string', 'Target document id', true)],
123
- execute: (args, ctx) => {
124
- if (!ctx.getDocumentBacklinks)
125
- return 'Backlinks not available in this context.';
126
- const id = args['id'] ?? '';
127
- const backlinks = ctx.getDocumentBacklinks(id);
128
- if (backlinks.length === 0)
129
- return 'No backlinks found.';
130
- return backlinks.map((d) => `- ${d.title} (${d.path})`).join('\n');
131
- },
132
- },
133
- ];
134
- //# sourceMappingURL=vaultTools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vaultTools.js","sourceRoot":"","sources":["../../src/agents/vaultTools.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { Box, Text } from 'ink';
3
- function borderColor(toolName, ok) {
4
- if (ok === false)
5
- return 'red';
6
- const lower = toolName.toLowerCase();
7
- if (lower.includes('read') || lower === 'cat' || lower.includes('grep') || lower.includes('search'))
8
- return 'green';
9
- if (lower.includes('write') || lower.includes('edit'))
10
- return 'yellow';
11
- if (lower === 'bash' || lower === 'shell' || lower === 'exec')
12
- return 'red';
13
- return 'cyan';
14
- }
15
- export function CollapsibleToolOutput(props) {
16
- const { toolName, summary, body, durationMs, ok, defaultExpanded = false } = props;
17
- const isControlled = typeof props.expanded === 'boolean';
18
- const [localExpanded, setLocalExpanded] = useState(defaultExpanded);
19
- const expanded = isControlled ? props.expanded : localExpanded;
20
- const color = borderColor(toolName, ok);
21
- const summaryLine = [
22
- `[${toolName}]`,
23
- summary,
24
- durationMs !== undefined ? `(${durationMs}ms)` : '',
25
- expanded ? '▲' : '▼',
26
- ].filter(Boolean).join(' ');
27
- return (React.createElement(Box, { flexDirection: "column", marginLeft: 2 },
28
- React.createElement(Box, null,
29
- React.createElement(Text, { color: color }, summaryLine)),
30
- expanded && (React.createElement(Box, { flexDirection: "column", marginLeft: 2, borderStyle: "single", borderColor: color, paddingX: 1 }, body.split('\n').map((line, idx) => (
31
- // B12 fix — index keys caused "Encountered two children with the
32
- // same key" warnings when adjacent lines were identical (e.g.
33
- // empty separators in multi-line tool output). Use line content
34
- // with an idx fallback for empty lines.
35
- React.createElement(Text, { key: line || `__blank-${idx}`, dimColor: ok === false }, line)))))));
36
- }
37
- /**
38
- * Pure helper: classify tool color (exported for unit tests).
39
- */
40
- export function classifyToolColor(toolName, ok) {
41
- return borderColor(toolName, ok);
42
- }
43
- //# sourceMappingURL=CollapsibleToolOutput.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollapsibleToolOutput.js","sourceRoot":"","sources":["../../../src/cli/components/CollapsibleToolOutput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAqChC,SAAS,WAAW,CAAC,QAAgB,EAAE,EAAY;IACjD,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IACpH,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvE,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAiC;IACrE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,eAAe,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IACnF,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC;IACzD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAE,KAAK,CAAC,QAAoB,CAAC,CAAC,CAAC,aAAa,CAAC;IAC5E,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAExC,MAAM,WAAW,GAAG;QAClB,IAAI,QAAQ,GAAG;QACf,OAAO;QACP,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,KAAK,CAAC,CAAC,CAAC,EAAE;QACnD,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;KACrB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC;QACvC,oBAAC,GAAG;YACF,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,IAAG,WAAW,CAAQ,CACpC;QACL,QAAQ,IAAI,CACX,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,EAAE,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,IAC5F,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;QACnC,iEAAiE;QACjE,8DAA8D;QAC9D,gEAAgE;QAChE,wCAAwC;QACxC,oBAAC,IAAI,IAAC,GAAG,EAAE,IAAI,IAAI,WAAW,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,KAAK,IAAG,IAAI,CAAQ,CAC3E,CAAC,CACE,CACP,CACG,CACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,EAAY;IAC9D,OAAO,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -1,38 +0,0 @@
1
- import React, { memo } from 'react';
2
- import { Box, Text } from 'ink';
3
- import { formatCost, formatTokens } from '../modelPricing.js';
4
- /**
5
- * B11 fix — wrapped in React.memo so the header doesn't re-render on every
6
- * input keystroke or streaming delta. It only re-renders when its props
7
- * (model, provider, cost, token count, etc.) actually change.
8
- */
9
- function HeaderImpl({ model, provider, skillCount, sessionActive, sessionId, totalTokens, totalCostUsd }) {
10
- const hasCost = typeof totalCostUsd === 'number' && totalCostUsd > 0;
11
- const costStr = hasCost ? formatCost(totalCostUsd) : '$0.0000';
12
- const tokStr = formatTokens(totalTokens ?? 0);
13
- return (React.createElement(Box, { borderStyle: "round", borderColor: "cyan", paddingX: 1, flexDirection: "row" },
14
- React.createElement(Text, { bold: true, color: "cyan" }, "zelari-code"),
15
- React.createElement(Text, { dimColor: true }, " \u00B7 "),
16
- React.createElement(Text, null, model),
17
- React.createElement(Text, { dimColor: true }, " \u00B7 "),
18
- React.createElement(Text, null, provider),
19
- React.createElement(Text, { dimColor: true }, " \u00B7 "),
20
- React.createElement(Text, null,
21
- skillCount,
22
- " skills"),
23
- React.createElement(Text, { dimColor: true }, " \u00B7 "),
24
- React.createElement(Text, { color: sessionActive ? 'green' : 'gray' }, sessionActive ? '● active' : '○ idle'),
25
- React.createElement(Text, { dimColor: true }, " \u00B7 "),
26
- React.createElement(Text, { dimColor: true },
27
- "session ",
28
- sessionId),
29
- React.createElement(Text, { dimColor: true }, " \u00B7 "),
30
- React.createElement(Text, { color: hasCost ? 'yellow' : 'gray' }, costStr),
31
- React.createElement(Text, { dimColor: true }, " \u00B7 "),
32
- React.createElement(Text, { color: "gray" },
33
- tokStr,
34
- " tok")));
35
- }
36
- /** B11 — memoized export. Shallow equality suffices (all props are primitives). */
37
- export const Header = memo(HeaderImpl);
38
- //# sourceMappingURL=Header.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/cli/components/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAc9D;;;;GAIG;AACH,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAe;IACnH,MAAM,OAAO,GAAG,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,GAAG,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;IAC9C,OAAO,CACL,oBAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAC,KAAK;QAC1E,oBAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,kBAAmB;QAC1C,oBAAC,IAAI,IAAC,QAAQ,qBAAW;QACzB,oBAAC,IAAI,QAAE,KAAK,CAAQ;QACpB,oBAAC,IAAI,IAAC,QAAQ,qBAAW;QACzB,oBAAC,IAAI,QAAE,QAAQ,CAAQ;QACvB,oBAAC,IAAI,IAAC,QAAQ,qBAAW;QACzB,oBAAC,IAAI;YAAE,UAAU;sBAAe;QAChC,oBAAC,IAAI,IAAC,QAAQ,qBAAW;QACzB,oBAAC,IAAI,IAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAC1C,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CACjC;QACP,oBAAC,IAAI,IAAC,QAAQ,qBAAW;QACzB,oBAAC,IAAI,IAAC,QAAQ;;YAAU,SAAS,CAAQ;QACzC,oBAAC,IAAI,IAAC,QAAQ,qBAAW;QACzB,oBAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAG,OAAO,CAAQ;QAC1D,oBAAC,IAAI,IAAC,QAAQ,qBAAW;QACzB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;YAAE,MAAM;mBAAY,CAClC,CACP,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC"}