@copado/agentia-cli 0.118.0-alpha.0 → 0.119.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +224 -293
  2. package/dist/commands/cicd/notification/configure.d.ts +1 -1
  3. package/dist/commands/cicd/work/deployment-step/create.d.ts +1 -1
  4. package/dist/commands/testing/build/run.d.ts +2 -2
  5. package/dist/commands/testing/data-table/create.d.ts +1 -1
  6. package/dist/commands/testing/data-table/update.d.ts +1 -1
  7. package/dist/commands/testing/job/create.d.ts +1 -1
  8. package/dist/commands/testing/job/schedule/set.d.ts +1 -1
  9. package/dist/commands/testing/job/update.d.ts +1 -1
  10. package/dist/commands/testing/robot/update.d.ts +1 -1
  11. package/dist/commands/testing/run.d.ts +2 -2
  12. package/dist/commands/testing/test/run.d.ts +2 -2
  13. package/dist/lib/ai-chat-session.d.ts +0 -3
  14. package/dist/lib/ai-chat-session.js +66 -182
  15. package/dist/lib/ai-chat-session.js.map +1 -1
  16. package/dist/lib/ai-gateway.d.ts +1 -8
  17. package/dist/lib/ai-gateway.js +2 -34
  18. package/dist/lib/ai-gateway.js.map +1 -1
  19. package/dist/lib/ai-types.d.ts +0 -18
  20. package/dist/lib/ai-types.js +1 -45
  21. package/dist/lib/ai-types.js.map +1 -1
  22. package/dist/lib/format.d.ts +0 -2
  23. package/dist/lib/format.js +2 -5
  24. package/dist/lib/format.js.map +1 -1
  25. package/dist/lib/mcp/tools.d.ts +2 -2
  26. package/dist/lib/testing-data-command.d.ts +1 -1
  27. package/dist/lib/testing-flags.d.ts +2 -2
  28. package/oclif.manifest.json +97 -248
  29. package/package.json +1 -10
  30. package/templates/skills/agentia-ai/SKILL.md +5 -5
  31. package/templates/skills/agentia-ai/references/ai-agents.md +3 -18
  32. package/dist/commands/ai/session/list.d.ts +0 -14
  33. package/dist/commands/ai/session/list.js +0 -46
  34. package/dist/commands/ai/session/list.js.map +0 -1
  35. package/dist/commands/ai/session/start.d.ts +0 -17
  36. package/dist/commands/ai/session/start.js +0 -60
  37. package/dist/commands/ai/session/start.js.map +0 -1
  38. package/dist/lib/ai-session-banner.d.ts +0 -5
  39. package/dist/lib/ai-session-banner.js +0 -20
  40. package/dist/lib/ai-session-banner.js.map +0 -1
  41. package/dist/lib/ai-session-tui-blocks.d.ts +0 -9
  42. package/dist/lib/ai-session-tui-blocks.js +0 -36
  43. package/dist/lib/ai-session-tui-blocks.js.map +0 -1
  44. package/dist/lib/ai-session-tui-clipboard.d.ts +0 -22
  45. package/dist/lib/ai-session-tui-clipboard.js +0 -78
  46. package/dist/lib/ai-session-tui-clipboard.js.map +0 -1
  47. package/dist/lib/ai-session-tui-composer.d.ts +0 -35
  48. package/dist/lib/ai-session-tui-composer.js +0 -96
  49. package/dist/lib/ai-session-tui-composer.js.map +0 -1
  50. package/dist/lib/ai-session-tui-highlight.d.ts +0 -11
  51. package/dist/lib/ai-session-tui-highlight.js +0 -310
  52. package/dist/lib/ai-session-tui-highlight.js.map +0 -1
  53. package/dist/lib/ai-session-tui-keys.d.ts +0 -42
  54. package/dist/lib/ai-session-tui-keys.js +0 -159
  55. package/dist/lib/ai-session-tui-keys.js.map +0 -1
  56. package/dist/lib/ai-session-tui-mermaid-image.d.ts +0 -43
  57. package/dist/lib/ai-session-tui-mermaid-image.js +0 -444
  58. package/dist/lib/ai-session-tui-mermaid-image.js.map +0 -1
  59. package/dist/lib/ai-session-tui-mermaid-paint.d.ts +0 -3
  60. package/dist/lib/ai-session-tui-mermaid-paint.js +0 -182
  61. package/dist/lib/ai-session-tui-mermaid-paint.js.map +0 -1
  62. package/dist/lib/ai-session-tui-mermaid.d.ts +0 -19
  63. package/dist/lib/ai-session-tui-mermaid.js +0 -158
  64. package/dist/lib/ai-session-tui-mermaid.js.map +0 -1
  65. package/dist/lib/ai-session-tui-message.d.ts +0 -9
  66. package/dist/lib/ai-session-tui-message.js +0 -24
  67. package/dist/lib/ai-session-tui-message.js.map +0 -1
  68. package/dist/lib/ai-session-tui-scroll.d.ts +0 -32
  69. package/dist/lib/ai-session-tui-scroll.js +0 -148
  70. package/dist/lib/ai-session-tui-scroll.js.map +0 -1
  71. package/dist/lib/ai-session-tui-slash.d.ts +0 -14
  72. package/dist/lib/ai-session-tui-slash.js +0 -53
  73. package/dist/lib/ai-session-tui-slash.js.map +0 -1
  74. package/dist/lib/ai-session-tui-welcome.d.ts +0 -12
  75. package/dist/lib/ai-session-tui-welcome.js +0 -33
  76. package/dist/lib/ai-session-tui-welcome.js.map +0 -1
  77. package/dist/lib/ai-session-tui-wrap.d.ts +0 -2
  78. package/dist/lib/ai-session-tui-wrap.js +0 -24
  79. package/dist/lib/ai-session-tui-wrap.js.map +0 -1
  80. package/dist/lib/ai-session-tui.d.ts +0 -7
  81. package/dist/lib/ai-session-tui.js +0 -859
  82. package/dist/lib/ai-session-tui.js.map +0 -1
  83. package/dist/lib/ai-sessions.d.ts +0 -17
  84. package/dist/lib/ai-sessions.js +0 -142
  85. package/dist/lib/ai-sessions.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-session-banner.js","sourceRoot":"","sources":["../../src/lib/ai-session-banner.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAA;AAE1D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,+BAA+B;IAC/B,oCAAoC;IACpC,yCAAyC;IACzC,sCAAsC;IACtC,MAAM,CAAC,GAAG,CAAA,qCAAqC;IAC/C,gBAAgB;IAChB,kDAAkD;IAClD,qDAAqD;IACrD,6DAA6D;IAC7D,uDAAuD;IACvD,MAAM,CAAC,GAAG,CAAA,sDAAsD;CACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,CAAU,CAAA;AAEhH,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAA;AAC3C,CAAC"}
@@ -1,9 +0,0 @@
1
- export type AgentMarkdownBlock = {
2
- code: string;
3
- language: string;
4
- type: 'code';
5
- } | {
6
- text: string;
7
- type: 'prose';
8
- };
9
- export declare function splitAgentMarkdown(text: string): AgentMarkdownBlock[];
@@ -1,36 +0,0 @@
1
- export function splitAgentMarkdown(text) {
2
- const blocks = [];
3
- const prose = [];
4
- let code;
5
- let language = '';
6
- const flushProse = () => {
7
- const value = prose.join('\n');
8
- prose.length = 0;
9
- if (value.length > 0)
10
- blocks.push({ text: value, type: 'prose' });
11
- };
12
- for (const line of text.split('\n')) {
13
- const trimmed = line.trim();
14
- if (code === undefined && trimmed.startsWith('```')) {
15
- flushProse();
16
- language = trimmed.slice(3).trim();
17
- code = [];
18
- continue;
19
- }
20
- if (code !== undefined && trimmed === '```') {
21
- blocks.push({ code: code.join('\n'), language, type: 'code' });
22
- code = undefined;
23
- language = '';
24
- continue;
25
- }
26
- if (code === undefined)
27
- prose.push(line);
28
- else
29
- code.push(line);
30
- }
31
- if (code !== undefined)
32
- blocks.push({ code: code.join('\n'), language, type: 'code' });
33
- flushProse();
34
- return blocks;
35
- }
36
- //# sourceMappingURL=ai-session-tui-blocks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-session-tui-blocks.js","sourceRoot":"","sources":["../../src/lib/ai-session-tui-blocks.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAyB,EAAE,CAAA;IACvC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,IAA0B,CAAA;IAC9B,IAAI,QAAQ,GAAG,EAAE,CAAA;IAEjB,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QAChB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAC,CAAC,CAAA;IACjE,CAAC,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,UAAU,EAAE,CAAA;YACZ,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAClC,IAAI,GAAG,EAAE,CAAA;YACT,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAA;YAC5D,IAAI,GAAG,SAAS,CAAA;YAChB,QAAQ,GAAG,EAAE,CAAA;YACb,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAED,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAA;IACpF,UAAU,EAAE,CAAA;IACZ,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -1,22 +0,0 @@
1
- import { type ChildProcess } from 'node:child_process';
2
- export type CopyTextToClipboardDeps = {
3
- env?: NodeJS.ProcessEnv;
4
- platform?: NodeJS.Platform;
5
- spawnImpl?: (command: string, args: readonly string[], options?: {
6
- stdio?: Array<'ignore' | 'pipe'>;
7
- }) => ChildProcess;
8
- stdout?: {
9
- write: (chunk: string) => boolean;
10
- };
11
- };
12
- export type CopyTextFn = (text: string, deps?: CopyTextToClipboardDeps) => Promise<void>;
13
- export declare function lastMarkdownCodeFence(messages: Array<{
14
- kind: string;
15
- text: string;
16
- }>): undefined | {
17
- code: string;
18
- language: string;
19
- };
20
- export declare function copyTextToClipboard(text: string, deps?: CopyTextToClipboardDeps): Promise<void>;
21
- export declare function setCopyTextToClipboardForTests(fn: CopyTextFn): void;
22
- export declare function resetCopyTextToClipboardForTests(): void;
@@ -1,78 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { platform as osPlatform } from 'node:os';
3
- import { splitAgentMarkdown } from './ai-session-tui-blocks.js';
4
- export function lastMarkdownCodeFence(messages) {
5
- for (let index = messages.length - 1; index >= 0; index -= 1) {
6
- const message = messages[index];
7
- if (message?.kind !== 'agent')
8
- continue;
9
- const blocks = splitAgentMarkdown(message.text);
10
- for (let blockIndex = blocks.length - 1; blockIndex >= 0; blockIndex -= 1) {
11
- const block = blocks[blockIndex];
12
- if (block?.type !== 'code' || block.code.trim().length === 0)
13
- continue;
14
- return { code: block.code, language: block.language };
15
- }
16
- }
17
- return undefined;
18
- }
19
- function clipboardCommand(currentPlatform, env) {
20
- if (currentPlatform === 'darwin')
21
- return { args: [], command: 'pbcopy' };
22
- if (currentPlatform === 'win32')
23
- return { args: [], command: 'clip' };
24
- if (typeof env.WAYLAND_DISPLAY === 'string' && env.WAYLAND_DISPLAY.length > 0)
25
- return { args: [], command: 'wl-copy' };
26
- if (typeof env.DISPLAY === 'string' && env.DISPLAY.length > 0)
27
- return { args: ['-selection', 'clipboard'], command: 'xclip' };
28
- return undefined;
29
- }
30
- function defaultSpawn(command, args) {
31
- return spawn(command, [...args], { stdio: ['pipe', 'ignore', 'ignore'] });
32
- }
33
- function copyWithHelper(text, command, args, spawnImpl) {
34
- return new Promise((resolve, reject) => {
35
- const child = spawnImpl(command, args, { stdio: ['pipe', 'ignore', 'ignore'] });
36
- const timer = setTimeout(() => {
37
- child.kill();
38
- reject(new Error('Clipboard helper timed out.'));
39
- }, 3000);
40
- child.once('error', (error) => {
41
- clearTimeout(timer);
42
- reject(error);
43
- });
44
- child.once('close', (code) => {
45
- clearTimeout(timer);
46
- if (code === 0)
47
- resolve();
48
- else
49
- reject(new Error('Clipboard helper failed.'));
50
- });
51
- child.stdin?.end(text, 'utf8');
52
- });
53
- }
54
- async function defaultCopyTextToClipboard(text, deps = {}) {
55
- const encoded = Buffer.from(text, 'utf8').toString('base64');
56
- const stdout = deps.stdout ?? process.stdout;
57
- stdout.write(`\u001B]52;c;${encoded}\u0007`);
58
- const clipboard = clipboardCommand(deps.platform ?? osPlatform(), deps.env ?? process.env);
59
- if (clipboard === undefined)
60
- return;
61
- try {
62
- await copyWithHelper(text, clipboard.command, clipboard.args, deps.spawnImpl ?? defaultSpawn);
63
- }
64
- catch {
65
- // OSC 52 is enough on terminals that honor it; helpers are best-effort.
66
- }
67
- }
68
- let copyTextFn = defaultCopyTextToClipboard;
69
- export async function copyTextToClipboard(text, deps) {
70
- await copyTextFn(text, deps);
71
- }
72
- export function setCopyTextToClipboardForTests(fn) {
73
- copyTextFn = fn;
74
- }
75
- export function resetCopyTextToClipboardForTests() {
76
- copyTextFn = defaultCopyTextToClipboard;
77
- }
78
- //# sourceMappingURL=ai-session-tui-clipboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-session-tui-clipboard.js","sourceRoot":"","sources":["../../src/lib/ai-session-tui-clipboard.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- export declare const COMPOSER_MAX_ROWS = 3;
2
- export type ComposerState = {
3
- cursor: number;
4
- text: string;
5
- };
6
- export type PromptRecallState = {
7
- draft: string;
8
- entries: string[];
9
- index: number;
10
- };
11
- export declare function createComposer(text?: string): ComposerState;
12
- export declare function clampComposerCursor(text: string, cursor: number): number;
13
- export declare function moveComposerCursor(state: ComposerState, delta: number): ComposerState;
14
- export declare function composerHome(state: ComposerState): ComposerState;
15
- export declare function composerEnd(state: ComposerState): ComposerState;
16
- export declare function insertComposerText(state: ComposerState, value: string): ComposerState;
17
- export declare function composerBackspace(state: ComposerState): ComposerState;
18
- export declare function composerDelete(state: ComposerState): ComposerState;
19
- export declare function createPromptRecall(): PromptRecallState;
20
- export declare function recordPrompt(recall: PromptRecallState, line: string): PromptRecallState;
21
- export declare function recallOlder(recall: PromptRecallState, currentText: string): {
22
- recall: PromptRecallState;
23
- text: string;
24
- };
25
- export declare function recallNewer(recall: PromptRecallState, currentText: string): {
26
- recall: PromptRecallState;
27
- text: string;
28
- };
29
- export type ComposerRow = {
30
- caretColumn: number;
31
- hasCaret: boolean;
32
- text: string;
33
- };
34
- export declare function visibleComposerRows(text: string, cursor: number, width: number, maxRows?: number): ComposerRow[];
35
- export declare function composerRowCount(text: string, width: number, maxRows?: number): number;
@@ -1,96 +0,0 @@
1
- import { wrapText } from './ai-session-tui-wrap.js';
2
- export const COMPOSER_MAX_ROWS = 3;
3
- export function createComposer(text = '') {
4
- return { cursor: text.length, text };
5
- }
6
- export function clampComposerCursor(text, cursor) {
7
- return Math.min(Math.max(0, cursor), text.length);
8
- }
9
- export function moveComposerCursor(state, delta) {
10
- return { cursor: clampComposerCursor(state.text, state.cursor + delta), text: state.text };
11
- }
12
- export function composerHome(state) {
13
- return { cursor: 0, text: state.text };
14
- }
15
- export function composerEnd(state) {
16
- return { cursor: state.text.length, text: state.text };
17
- }
18
- export function insertComposerText(state, value) {
19
- const text = state.text.slice(0, state.cursor) + value + state.text.slice(state.cursor);
20
- return { cursor: state.cursor + value.length, text };
21
- }
22
- export function composerBackspace(state) {
23
- if (state.cursor === 0)
24
- return state;
25
- const text = state.text.slice(0, state.cursor - 1) + state.text.slice(state.cursor);
26
- return { cursor: state.cursor - 1, text };
27
- }
28
- export function composerDelete(state) {
29
- if (state.cursor >= state.text.length)
30
- return state;
31
- return { cursor: state.cursor, text: state.text.slice(0, state.cursor) + state.text.slice(state.cursor + 1) };
32
- }
33
- export function createPromptRecall() {
34
- return { draft: '', entries: [], index: 0 };
35
- }
36
- export function recordPrompt(recall, line) {
37
- return { draft: '', entries: [...recall.entries, line], index: recall.entries.length + 1 };
38
- }
39
- export function recallOlder(recall, currentText) {
40
- if (recall.entries.length === 0)
41
- return { recall, text: currentText };
42
- const atDraft = recall.index >= recall.entries.length;
43
- const nextIndex = atDraft ? recall.entries.length - 1 : Math.max(0, recall.index - 1);
44
- const draft = atDraft ? currentText : recall.draft;
45
- const next = { draft, entries: recall.entries, index: nextIndex };
46
- return { recall: next, text: recall.entries[nextIndex] ?? currentText };
47
- }
48
- export function recallNewer(recall, currentText) {
49
- if (recall.index >= recall.entries.length)
50
- return { recall, text: currentText };
51
- const nextIndex = recall.index + 1;
52
- const next = { draft: recall.draft, entries: recall.entries, index: nextIndex };
53
- if (nextIndex >= recall.entries.length)
54
- return { recall: next, text: recall.draft };
55
- return { recall: next, text: recall.entries[nextIndex] ?? currentText };
56
- }
57
- export function visibleComposerRows(text, cursor, width, maxRows = COMPOSER_MAX_ROWS) {
58
- const columns = Math.max(1, width);
59
- const caret = clampComposerCursor(text, cursor);
60
- const mapped = [];
61
- const paragraphs = text.split('\n');
62
- let pos = 0;
63
- for (const [paragraphIndex, paragraph] of paragraphs.entries()) {
64
- const wrapped = paragraph.length === 0 ? [''] : wrapText(paragraph, columns);
65
- for (const [lineIndex, line] of wrapped.entries()) {
66
- const start = pos;
67
- const isLastLine = paragraphIndex === paragraphs.length - 1 && lineIndex === wrapped.length - 1;
68
- const end = pos + line.length;
69
- const hasCaret = caret >= start && (caret < end || (isLastLine && caret >= end));
70
- mapped.push({
71
- caretColumn: hasCaret ? Math.min(line.length, caret - start) : -1,
72
- hasCaret,
73
- text: line,
74
- });
75
- pos = end;
76
- }
77
- if (paragraphIndex < paragraphs.length - 1)
78
- pos += 1;
79
- }
80
- if (mapped.length === 0)
81
- mapped.push({ caretColumn: 0, hasCaret: true, text: '' });
82
- if (!mapped.some((row) => row.hasCaret)) {
83
- const last = mapped.at(-1);
84
- if (last !== undefined) {
85
- last.hasCaret = true;
86
- last.caretColumn = last.text.length;
87
- }
88
- }
89
- const caretIndex = Math.max(0, mapped.findIndex((row) => row.hasCaret));
90
- const start = Math.max(0, Math.min(caretIndex, Math.max(0, mapped.length - maxRows)));
91
- return mapped.slice(start, start + maxRows);
92
- }
93
- export function composerRowCount(text, width, maxRows = COMPOSER_MAX_ROWS) {
94
- return Math.max(1, Math.min(maxRows, wrapText(text.length === 0 ? ' ' : text, Math.max(1, width)).length));
95
- }
96
- //# sourceMappingURL=ai-session-tui-composer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-session-tui-composer.js","sourceRoot":"","sources":["../../src/lib/ai-session-tui-composer.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- export type HighlightColor = 'blue' | 'cyan' | 'gray' | 'green' | 'magenta' | 'red' | 'yellow';
2
- export type HighlightSpan = {
3
- backgroundColor?: string;
4
- color?: HighlightColor | string;
5
- dim?: boolean;
6
- text: string;
7
- };
8
- export declare function highlightCodeLine(line: string, language: string): HighlightSpan[];
9
- export declare function spansText(spans: HighlightSpan[]): string;
10
- export declare function sliceSpans(spans: HighlightSpan[], start: number, end: number): HighlightSpan[];
11
- export declare function wrapSpans(spans: HighlightSpan[], width: number): HighlightSpan[][];
@@ -1,310 +0,0 @@
1
- import { wrapText } from './ai-session-tui-wrap.js';
2
- const C_LIKE = new Set([
3
- 'apex',
4
- 'c',
5
- 'cpp',
6
- 'csharp',
7
- 'go',
8
- 'java',
9
- 'javascript',
10
- 'js',
11
- 'jsonc',
12
- 'jsx',
13
- 'kotlin',
14
- 'swift',
15
- 'ts',
16
- 'tsx',
17
- 'typescript',
18
- ]);
19
- const PYTHON = new Set(['py', 'python']);
20
- const XML = new Set(['html', 'xhtml', 'xml']);
21
- const SOQL = new Set(['soql', 'sosl', 'sql']);
22
- const SHELL = new Set(['bash', 'sh', 'shell', 'zsh']);
23
- const C_KEYWORDS = new Set([
24
- 'abstract',
25
- 'async',
26
- 'await',
27
- 'break',
28
- 'case',
29
- 'catch',
30
- 'class',
31
- 'const',
32
- 'continue',
33
- 'default',
34
- 'else',
35
- 'enum',
36
- 'export',
37
- 'extends',
38
- 'false',
39
- 'final',
40
- 'finally',
41
- 'for',
42
- 'from',
43
- 'function',
44
- 'global',
45
- 'if',
46
- 'implements',
47
- 'import',
48
- 'inherited',
49
- 'interface',
50
- 'let',
51
- 'new',
52
- 'null',
53
- 'override',
54
- 'private',
55
- 'protected',
56
- 'public',
57
- 'return',
58
- 'sharing',
59
- 'static',
60
- 'super',
61
- 'switch',
62
- 'this',
63
- 'throw',
64
- 'true',
65
- 'try',
66
- 'typeof',
67
- 'undefined',
68
- 'var',
69
- 'virtual',
70
- 'void',
71
- 'while',
72
- 'with',
73
- 'without',
74
- 'yield',
75
- ]);
76
- const PYTHON_KEYWORDS = new Set([
77
- 'and',
78
- 'as',
79
- 'assert',
80
- 'async',
81
- 'await',
82
- 'break',
83
- 'class',
84
- 'continue',
85
- 'def',
86
- 'elif',
87
- 'else',
88
- 'except',
89
- 'false',
90
- 'finally',
91
- 'for',
92
- 'from',
93
- 'global',
94
- 'if',
95
- 'import',
96
- 'in',
97
- 'is',
98
- 'lambda',
99
- 'none',
100
- 'not',
101
- 'or',
102
- 'pass',
103
- 'raise',
104
- 'return',
105
- 'self',
106
- 'true',
107
- 'try',
108
- 'while',
109
- 'with',
110
- 'yield',
111
- ]);
112
- const SOQL_KEYWORDS = new Set([
113
- 'and',
114
- 'asc',
115
- 'by',
116
- 'desc',
117
- 'from',
118
- 'group',
119
- 'having',
120
- 'insert',
121
- 'limit',
122
- 'not',
123
- 'null',
124
- 'offset',
125
- 'or',
126
- 'order',
127
- 'select',
128
- 'set',
129
- 'update',
130
- 'upsert',
131
- 'where',
132
- 'with',
133
- ]);
134
- const SHELL_KEYWORDS = new Set(['case', 'do', 'done', 'elif', 'else', 'esac', 'export', 'fi', 'for', 'if', 'in', 'then', 'while']);
135
- function languageKind(language) {
136
- const normalized = language.trim().toLowerCase();
137
- if (normalized === 'json')
138
- return 'json';
139
- if (C_LIKE.has(normalized))
140
- return 'c-like';
141
- if (PYTHON.has(normalized))
142
- return 'python';
143
- if (XML.has(normalized))
144
- return 'xml';
145
- if (SOQL.has(normalized))
146
- return 'soql';
147
- if (SHELL.has(normalized))
148
- return 'shell';
149
- return 'plain';
150
- }
151
- function push(spans, text, color, dim) {
152
- if (text.length === 0)
153
- return;
154
- const last = spans.at(-1);
155
- if (last !== undefined && last.color === color && last.dim === dim) {
156
- last.text += text;
157
- return;
158
- }
159
- spans.push({ ...(color === undefined ? {} : { color }), ...(dim === true ? { dim: true } : {}), text });
160
- }
161
- function readQuoted(line, index, quote, escaped) {
162
- let cursor = index + 1;
163
- while (cursor < line.length) {
164
- const char = line[cursor];
165
- if (escaped && char === '\\' && cursor + 1 < line.length) {
166
- cursor += 2;
167
- continue;
168
- }
169
- if (char === quote)
170
- return { end: cursor + 1, text: line.slice(index, cursor + 1) };
171
- cursor += 1;
172
- }
173
- return { end: line.length, text: line.slice(index) };
174
- }
175
- function highlightCLike(line, keywords, lineComment) {
176
- const spans = [];
177
- let index = 0;
178
- while (index < line.length) {
179
- const rest = line.slice(index);
180
- if (lineComment !== undefined && rest.startsWith(lineComment)) {
181
- push(spans, rest, 'gray', true);
182
- break;
183
- }
184
- if (rest.startsWith('//')) {
185
- push(spans, rest, 'gray', true);
186
- break;
187
- }
188
- if (rest.startsWith('/*')) {
189
- const end = line.indexOf('*/', index + 2);
190
- const take = end === -1 ? line.length : end + 2;
191
- push(spans, line.slice(index, take), 'gray', true);
192
- index = take;
193
- continue;
194
- }
195
- const quote = rest[0];
196
- if (quote === '"' || quote === "'" || quote === '`') {
197
- const read = readQuoted(line, index, quote, true);
198
- push(spans, read.text, 'yellow');
199
- index = read.end;
200
- continue;
201
- }
202
- const number = /^(?:\d+\.\d+|\d+)\b/u.exec(rest);
203
- if (number !== null) {
204
- push(spans, number[0], 'cyan');
205
- index += number[0].length;
206
- continue;
207
- }
208
- const ident = /^(?:[@$]?[A-Za-z_][\w.]*|@[\w.]+)/u.exec(rest);
209
- if (ident !== null) {
210
- const word = ident[0];
211
- const lower = word.toLowerCase();
212
- const nextNonSpace = rest.slice(word.length).match(/^\s*/u)?.[0].length ?? 0;
213
- const after = rest[word.length + nextNonSpace];
214
- if (keywords.has(lower))
215
- push(spans, word, 'magenta');
216
- else if (after === '(')
217
- push(spans, word, 'green');
218
- else if (/^[A-Z]/u.test(word))
219
- push(spans, word, 'blue');
220
- else
221
- push(spans, word);
222
- index += word.length;
223
- continue;
224
- }
225
- push(spans, line[index] ?? '');
226
- index += 1;
227
- }
228
- return spans;
229
- }
230
- function highlightXml(line) {
231
- const spans = [];
232
- let index = 0;
233
- while (index < line.length) {
234
- if (line.startsWith('<!--', index)) {
235
- const end = line.indexOf('-->', index + 4);
236
- const take = end === -1 ? line.length : end + 3;
237
- push(spans, line.slice(index, take), 'gray', true);
238
- index = take;
239
- continue;
240
- }
241
- if (line[index] === '<') {
242
- const end = line.indexOf('>', index);
243
- const take = end === -1 ? line.length : end + 1;
244
- push(spans, line.slice(index, take), 'cyan');
245
- index = take;
246
- continue;
247
- }
248
- const next = line.indexOf('<', index);
249
- const take = next === -1 ? line.length : next;
250
- push(spans, line.slice(index, take));
251
- index = take;
252
- }
253
- return spans;
254
- }
255
- function highlightJson(line) {
256
- return highlightCLike(line, new Set(['false', 'null', 'true']));
257
- }
258
- function highlightPython(line) {
259
- return highlightCLike(line, PYTHON_KEYWORDS, '#');
260
- }
261
- export function highlightCodeLine(line, language) {
262
- const kind = languageKind(language);
263
- if (kind === 'plain')
264
- return line.length === 0 ? [] : [{ text: line }];
265
- if (kind === 'xml')
266
- return highlightXml(line);
267
- if (kind === 'json')
268
- return highlightJson(line);
269
- if (kind === 'python')
270
- return highlightPython(line);
271
- if (kind === 'soql')
272
- return highlightCLike(line, SOQL_KEYWORDS);
273
- if (kind === 'shell')
274
- return highlightCLike(line, SHELL_KEYWORDS, '#');
275
- return highlightCLike(line, C_KEYWORDS);
276
- }
277
- export function spansText(spans) {
278
- return spans.map((span) => span.text).join('');
279
- }
280
- export function sliceSpans(spans, start, end) {
281
- const sliced = [];
282
- let offset = 0;
283
- for (const span of spans) {
284
- const spanEnd = offset + span.text.length;
285
- if (spanEnd <= start) {
286
- offset = spanEnd;
287
- continue;
288
- }
289
- if (offset >= end)
290
- break;
291
- const from = Math.max(0, start - offset);
292
- const to = Math.min(span.text.length, end - offset);
293
- push(sliced, span.text.slice(from, to), span.color, span.dim);
294
- offset = spanEnd;
295
- }
296
- return sliced;
297
- }
298
- export function wrapSpans(spans, width) {
299
- const text = spansText(spans);
300
- if (text.length === 0)
301
- return [spans];
302
- const lines = wrapText(text, width);
303
- let offset = 0;
304
- return lines.map((line) => {
305
- const slice = sliceSpans(spans, offset, offset + line.length);
306
- offset += line.length;
307
- return slice.length === 0 ? [{ text: line }] : slice;
308
- });
309
- }
310
- //# sourceMappingURL=ai-session-tui-highlight.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-session-tui-highlight.js","sourceRoot":"","sources":["../../src/lib/ai-session-tui-highlight.ts"],"names":[],"mappings":"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"}