@sylix/coworker 1.2.6 → 1.3.1
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/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +181 -106
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/slash/advanced.d.ts +3 -0
- package/dist/commands/slash/advanced.d.ts.map +1 -0
- package/dist/commands/slash/advanced.js +225 -0
- package/dist/commands/slash/advanced.js.map +1 -0
- package/dist/commands/slash/config.d.ts +3 -0
- package/dist/commands/slash/config.d.ts.map +1 -0
- package/dist/commands/slash/config.js +161 -0
- package/dist/commands/slash/config.js.map +1 -0
- package/dist/commands/slash/context.d.ts +3 -0
- package/dist/commands/slash/context.d.ts.map +1 -0
- package/dist/commands/slash/context.js +127 -0
- package/dist/commands/slash/context.js.map +1 -0
- package/dist/commands/slash/core.d.ts +3 -0
- package/dist/commands/slash/core.d.ts.map +1 -0
- package/dist/commands/slash/core.js +112 -0
- package/dist/commands/slash/core.js.map +1 -0
- package/dist/commands/slash/developer.d.ts +3 -0
- package/dist/commands/slash/developer.d.ts.map +1 -0
- package/dist/commands/slash/developer.js +174 -0
- package/dist/commands/slash/developer.js.map +1 -0
- package/dist/commands/slash/files.d.ts +3 -0
- package/dist/commands/slash/files.d.ts.map +1 -0
- package/dist/commands/slash/files.js +216 -0
- package/dist/commands/slash/files.js.map +1 -0
- package/dist/commands/slash/registry.d.ts +36 -0
- package/dist/commands/slash/registry.d.ts.map +1 -0
- package/dist/commands/slash/registry.js +69 -0
- package/dist/commands/slash/registry.js.map +1 -0
- package/dist/commands/slash/session.d.ts +3 -0
- package/dist/commands/slash/session.d.ts.map +1 -0
- package/dist/commands/slash/session.js +144 -0
- package/dist/commands/slash/session.js.map +1 -0
- package/dist/core/CoWorkerAgent.d.ts +8 -2
- package/dist/core/CoWorkerAgent.d.ts.map +1 -1
- package/dist/core/CoWorkerAgent.js +179 -36
- package/dist/core/CoWorkerAgent.js.map +1 -1
- package/dist/review/CodeReviewEngine.d.ts +78 -0
- package/dist/review/CodeReviewEngine.d.ts.map +1 -0
- package/dist/review/CodeReviewEngine.js +449 -0
- package/dist/review/CodeReviewEngine.js.map +1 -0
- package/dist/session/SessionManager.js +10 -5
- package/dist/session/SessionManager.js.map +1 -1
- package/dist/skills/HookAndSkillManager.d.ts +29 -5
- package/dist/skills/HookAndSkillManager.d.ts.map +1 -1
- package/dist/skills/HookAndSkillManager.js +167 -12
- package/dist/skills/HookAndSkillManager.js.map +1 -1
- package/dist/todos/TodoManager.d.ts +19 -0
- package/dist/todos/TodoManager.d.ts.map +1 -0
- package/dist/todos/TodoManager.js +102 -0
- package/dist/todos/TodoManager.js.map +1 -0
- package/dist/tools/NativeTools.d.ts +98 -0
- package/dist/tools/NativeTools.d.ts.map +1 -1
- package/dist/tools/NativeTools.js +571 -0
- package/dist/tools/NativeTools.js.map +1 -1
- package/dist/tools/Schemas.d.ts +1199 -102
- package/dist/tools/Schemas.d.ts.map +1 -1
- package/dist/tools/Schemas.js +358 -40
- package/dist/tools/Schemas.js.map +1 -1
- package/dist/utils/conversations.d.ts +14 -0
- package/dist/utils/conversations.d.ts.map +1 -0
- package/dist/utils/conversations.js +100 -0
- package/dist/utils/conversations.js.map +1 -0
- package/dist/utils/inputbar.d.ts +87 -0
- package/dist/utils/inputbar.d.ts.map +1 -0
- package/dist/utils/inputbar.js +263 -0
- package/dist/utils/inputbar.js.map +1 -0
- package/dist/utils/output.d.ts +73 -48
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +349 -158
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/palette.d.ts +25 -0
- package/dist/utils/palette.d.ts.map +1 -0
- package/dist/utils/palette.js +92 -0
- package/dist/utils/palette.js.map +1 -0
- package/dist/utils/welcome.d.ts +2 -0
- package/dist/utils/welcome.d.ts.map +1 -0
- package/dist/utils/welcome.js +130 -0
- package/dist/utils/welcome.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadConversations = loadConversations;
|
|
37
|
+
exports.saveConversations = saveConversations;
|
|
38
|
+
exports.addConversation = addConversation;
|
|
39
|
+
exports.updateConversation = updateConversation;
|
|
40
|
+
exports.autoNameConversation = autoNameConversation;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
/**
|
|
45
|
+
* Conversation persistence — ~/.coworker/conversations.json
|
|
46
|
+
* Keeps last 50 conversations with messages, timestamps, names.
|
|
47
|
+
*/
|
|
48
|
+
const CONVERSATIONS_PATH = path.join(os.homedir(), '.coworker', 'conversations.json');
|
|
49
|
+
const MAX_CONVERSATIONS = 50;
|
|
50
|
+
function ensureDir() {
|
|
51
|
+
const dir = path.dirname(CONVERSATIONS_PATH);
|
|
52
|
+
if (!fs.existsSync(dir))
|
|
53
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
function loadConversations() {
|
|
56
|
+
try {
|
|
57
|
+
if (fs.existsSync(CONVERSATIONS_PATH)) {
|
|
58
|
+
const data = JSON.parse(fs.readFileSync(CONVERSATIONS_PATH, 'utf8'));
|
|
59
|
+
return Array.isArray(data?.conversations) ? data.conversations : [];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch { /* ignore */ }
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
function saveConversations(entries) {
|
|
66
|
+
try {
|
|
67
|
+
ensureDir();
|
|
68
|
+
const trimmed = entries.slice(-MAX_CONVERSATIONS);
|
|
69
|
+
fs.writeFileSync(CONVERSATIONS_PATH, JSON.stringify({ conversations: trimmed }, null, 2));
|
|
70
|
+
}
|
|
71
|
+
catch { /* ignore */ }
|
|
72
|
+
}
|
|
73
|
+
function addConversation(entry) {
|
|
74
|
+
const list = loadConversations();
|
|
75
|
+
const existing = list.findIndex(c => c.id === entry.id);
|
|
76
|
+
if (existing >= 0) {
|
|
77
|
+
list[existing] = entry;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
list.push(entry);
|
|
81
|
+
}
|
|
82
|
+
saveConversations(list);
|
|
83
|
+
}
|
|
84
|
+
function updateConversation(id, updates) {
|
|
85
|
+
const list = loadConversations();
|
|
86
|
+
const idx = list.findIndex(c => c.id === id);
|
|
87
|
+
if (idx >= 0) {
|
|
88
|
+
list[idx] = { ...list[idx], ...updates, lastActive: new Date().toISOString() };
|
|
89
|
+
saveConversations(list);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function autoNameConversation(firstMessage) {
|
|
93
|
+
const trimmed = firstMessage.trim().substring(0, 60);
|
|
94
|
+
if (trimmed.length <= 3) {
|
|
95
|
+
const now = new Date();
|
|
96
|
+
return `conversation · ${now.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;
|
|
97
|
+
}
|
|
98
|
+
return trimmed;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=conversations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/utils/conversations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export type InputBarState = 'ready' | 'typing' | 'slash' | 'sending' | 'receiving' | 'success';
|
|
2
|
+
/**
|
|
3
|
+
* Draws the framed input bar. This is called:
|
|
4
|
+
* - Before readline prompt (draws the frame)
|
|
5
|
+
* - On state changes (thinking, receiving, etc.)
|
|
6
|
+
*
|
|
7
|
+
* The input bar uses a simple approach:
|
|
8
|
+
* readline handles the actual input on a bordered line.
|
|
9
|
+
* We print borders and status around it.
|
|
10
|
+
*/
|
|
11
|
+
export declare function drawTopBorder(): void;
|
|
12
|
+
export declare function drawBottomBorder(): void;
|
|
13
|
+
export declare function drawStatusLine(state: InputBarState): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get the readline prompt string (the ◆ prefix).
|
|
16
|
+
*/
|
|
17
|
+
export declare function getPromptString(state?: InputBarState): string;
|
|
18
|
+
/**
|
|
19
|
+
* Draw the full input frame (top border, prompt placeholder, bottom border, status).
|
|
20
|
+
* Used when transitioning states.
|
|
21
|
+
*/
|
|
22
|
+
export declare function drawInputFrame(state: InputBarState, inputText?: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Clear the input frame (4 lines: top border, input, bottom border, status).
|
|
25
|
+
* Move cursor up and clear each line.
|
|
26
|
+
*/
|
|
27
|
+
export declare function clearInputFrame(lines?: number): void;
|
|
28
|
+
/**
|
|
29
|
+
* Show the locked state while AI is working.
|
|
30
|
+
* Replaces the input frame with a locked version.
|
|
31
|
+
*/
|
|
32
|
+
export declare function lockInputBar(state: 'sending' | 'receiving', inputText?: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Show a brief success flash then return to ready.
|
|
35
|
+
*/
|
|
36
|
+
export declare function flashSuccess(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Manages the complete input bar lifecycle during the REPL.
|
|
39
|
+
*
|
|
40
|
+
* Usage in REPL:
|
|
41
|
+
* const bar = new InputBarManager();
|
|
42
|
+
* bar.drawReady(); // show empty input bar
|
|
43
|
+
* const input = await bar.ask() // get user input (readline inside frame)
|
|
44
|
+
* bar.showSending(input); // lock bar while thinking
|
|
45
|
+
* // ... AI response renders above ...
|
|
46
|
+
* bar.showReceiving(); // update status while streaming
|
|
47
|
+
* // ... response done ...
|
|
48
|
+
* bar.drawReady(); // unlock for next input
|
|
49
|
+
*/
|
|
50
|
+
export declare class InputBarManager {
|
|
51
|
+
private rl;
|
|
52
|
+
private state;
|
|
53
|
+
private resizeHandler;
|
|
54
|
+
constructor();
|
|
55
|
+
/**
|
|
56
|
+
* Draw the ready input frame (borders + status).
|
|
57
|
+
* Does NOT start readline — that's done in ask().
|
|
58
|
+
*/
|
|
59
|
+
drawReady(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Ask for user input inside the framed bar.
|
|
62
|
+
* Returns the trimmed input string.
|
|
63
|
+
*/
|
|
64
|
+
ask(history?: string[]): Promise<string>;
|
|
65
|
+
/**
|
|
66
|
+
* Lock the bar in "sending" state (user just hit Enter).
|
|
67
|
+
*/
|
|
68
|
+
showSending(inputText: string): void;
|
|
69
|
+
/**
|
|
70
|
+
* Update to "receiving" state while AI streams response.
|
|
71
|
+
*/
|
|
72
|
+
showReceiving(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Show success flash briefly.
|
|
75
|
+
*/
|
|
76
|
+
showSuccess(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Reset to ready state for next input.
|
|
79
|
+
* Clears old status and draws fresh frame.
|
|
80
|
+
*/
|
|
81
|
+
reset(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Clean up on exit.
|
|
84
|
+
*/
|
|
85
|
+
destroy(): void;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=inputbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputbar.d.ts","sourceRoot":"","sources":["../../src/utils/inputbar.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAW/F;;;;;;;;GAQG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,aAAuB,GAAG,MAAM,CAOtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,GAAE,MAAW,GAAG,IAAI,CAMjF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAU,GAAG,IAAI,CAIvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAKrF;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAKnC;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,aAAa,CAA6B;;IAUlD;;;OAGG;IACH,SAAS,IAAI,IAAI;IAMjB;;;OAGG;IACH,GAAG,CAAC,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAkC5C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IASpC;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;OAEG;IACH,WAAW,IAAI,IAAI;IAMnB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.InputBarManager = void 0;
|
|
37
|
+
exports.drawTopBorder = drawTopBorder;
|
|
38
|
+
exports.drawBottomBorder = drawBottomBorder;
|
|
39
|
+
exports.drawStatusLine = drawStatusLine;
|
|
40
|
+
exports.getPromptString = getPromptString;
|
|
41
|
+
exports.drawInputFrame = drawInputFrame;
|
|
42
|
+
exports.clearInputFrame = clearInputFrame;
|
|
43
|
+
exports.lockInputBar = lockInputBar;
|
|
44
|
+
exports.flashSuccess = flashSuccess;
|
|
45
|
+
const readline = __importStar(require("readline"));
|
|
46
|
+
const output_1 = require("./output");
|
|
47
|
+
/**
|
|
48
|
+
* ═══════════════════════════════════════════════════════════════════
|
|
49
|
+
* Premium Input Bar — Fixed-bottom framed input zone
|
|
50
|
+
* ═══════════════════════════════════════════════════════════════════
|
|
51
|
+
*
|
|
52
|
+
* Design:
|
|
53
|
+
* ────────────────────────────────────────────────────────────────
|
|
54
|
+
* ◆ [user input text here]█
|
|
55
|
+
* ────────────────────────────────────────────────────────────────
|
|
56
|
+
* ? /help for commands · Ctrl+C to exit
|
|
57
|
+
*
|
|
58
|
+
* States: ready, typing, slash, sending, receiving, success
|
|
59
|
+
*/
|
|
60
|
+
// Colors
|
|
61
|
+
const borderColor = (s) => output_1.theme.dim(s);
|
|
62
|
+
const prefixReady = () => output_1.theme.brand(' ◆ ');
|
|
63
|
+
const prefixLocked = () => output_1.theme.dim(' ◆ ');
|
|
64
|
+
const prefixSuccess = () => output_1.theme.success(' ✓ ');
|
|
65
|
+
const inputColor = (s) => output_1.theme.white(s);
|
|
66
|
+
const STATUS_MESSAGES = {
|
|
67
|
+
ready: ' ? /help for commands · Ctrl+C to exit',
|
|
68
|
+
typing: ' ? /help for commands · Ctrl+C to exit',
|
|
69
|
+
slash: ' ↑↓ navigate · Enter select · Esc dismiss',
|
|
70
|
+
sending: ' ◆ thinking...',
|
|
71
|
+
receiving: ' ◆ CoWorker is responding...',
|
|
72
|
+
success: ' ✓ done',
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Draws the framed input bar. This is called:
|
|
76
|
+
* - Before readline prompt (draws the frame)
|
|
77
|
+
* - On state changes (thinking, receiving, etc.)
|
|
78
|
+
*
|
|
79
|
+
* The input bar uses a simple approach:
|
|
80
|
+
* readline handles the actual input on a bordered line.
|
|
81
|
+
* We print borders and status around it.
|
|
82
|
+
*/
|
|
83
|
+
function drawTopBorder() {
|
|
84
|
+
const cols = (0, output_1.getTermWidth)();
|
|
85
|
+
console.log(borderColor('─'.repeat(cols)));
|
|
86
|
+
}
|
|
87
|
+
function drawBottomBorder() {
|
|
88
|
+
const cols = (0, output_1.getTermWidth)();
|
|
89
|
+
console.log(borderColor('─'.repeat(cols)));
|
|
90
|
+
}
|
|
91
|
+
function drawStatusLine(state) {
|
|
92
|
+
const msg = STATUS_MESSAGES[state] || STATUS_MESSAGES.ready;
|
|
93
|
+
console.log(output_1.theme.dim(msg));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the readline prompt string (the ◆ prefix).
|
|
97
|
+
*/
|
|
98
|
+
function getPromptString(state = 'ready') {
|
|
99
|
+
switch (state) {
|
|
100
|
+
case 'success': return prefixSuccess();
|
|
101
|
+
case 'sending':
|
|
102
|
+
case 'receiving': return prefixLocked();
|
|
103
|
+
default: return prefixReady();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Draw the full input frame (top border, prompt placeholder, bottom border, status).
|
|
108
|
+
* Used when transitioning states.
|
|
109
|
+
*/
|
|
110
|
+
function drawInputFrame(state, inputText = '') {
|
|
111
|
+
drawTopBorder();
|
|
112
|
+
const prefix = getPromptString(state);
|
|
113
|
+
console.log(prefix + inputColor(inputText));
|
|
114
|
+
drawBottomBorder();
|
|
115
|
+
drawStatusLine(state);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Clear the input frame (4 lines: top border, input, bottom border, status).
|
|
119
|
+
* Move cursor up and clear each line.
|
|
120
|
+
*/
|
|
121
|
+
function clearInputFrame(lines = 4) {
|
|
122
|
+
for (let i = 0; i < lines; i++) {
|
|
123
|
+
process.stdout.write('\x1b[1A\x1b[2K'); // move up, clear line
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Show the locked state while AI is working.
|
|
128
|
+
* Replaces the input frame with a locked version.
|
|
129
|
+
*/
|
|
130
|
+
function lockInputBar(state, inputText) {
|
|
131
|
+
drawTopBorder();
|
|
132
|
+
console.log(getPromptString(state) + (inputText ? output_1.theme.dim(inputText) : ''));
|
|
133
|
+
drawBottomBorder();
|
|
134
|
+
drawStatusLine(state);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Show a brief success flash then return to ready.
|
|
138
|
+
*/
|
|
139
|
+
function flashSuccess() {
|
|
140
|
+
drawTopBorder();
|
|
141
|
+
console.log(prefixSuccess());
|
|
142
|
+
drawBottomBorder();
|
|
143
|
+
drawStatusLine('success');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Manages the complete input bar lifecycle during the REPL.
|
|
147
|
+
*
|
|
148
|
+
* Usage in REPL:
|
|
149
|
+
* const bar = new InputBarManager();
|
|
150
|
+
* bar.drawReady(); // show empty input bar
|
|
151
|
+
* const input = await bar.ask() // get user input (readline inside frame)
|
|
152
|
+
* bar.showSending(input); // lock bar while thinking
|
|
153
|
+
* // ... AI response renders above ...
|
|
154
|
+
* bar.showReceiving(); // update status while streaming
|
|
155
|
+
* // ... response done ...
|
|
156
|
+
* bar.drawReady(); // unlock for next input
|
|
157
|
+
*/
|
|
158
|
+
class InputBarManager {
|
|
159
|
+
constructor() {
|
|
160
|
+
this.rl = null;
|
|
161
|
+
this.state = 'ready';
|
|
162
|
+
this.resizeHandler = null;
|
|
163
|
+
// Handle terminal resize
|
|
164
|
+
this.resizeHandler = () => {
|
|
165
|
+
// On resize, we don't need to redraw mid-input since readline handles it
|
|
166
|
+
};
|
|
167
|
+
process.stdout.on('resize', this.resizeHandler);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Draw the ready input frame (borders + status).
|
|
171
|
+
* Does NOT start readline — that's done in ask().
|
|
172
|
+
*/
|
|
173
|
+
drawReady() {
|
|
174
|
+
this.state = 'ready';
|
|
175
|
+
drawTopBorder();
|
|
176
|
+
// The readline prompt will fill this line
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Ask for user input inside the framed bar.
|
|
180
|
+
* Returns the trimmed input string.
|
|
181
|
+
*/
|
|
182
|
+
ask(history = []) {
|
|
183
|
+
return new Promise((resolve) => {
|
|
184
|
+
this.rl = readline.createInterface({
|
|
185
|
+
input: process.stdin,
|
|
186
|
+
output: process.stdout,
|
|
187
|
+
terminal: true,
|
|
188
|
+
history: history,
|
|
189
|
+
historySize: 100,
|
|
190
|
+
});
|
|
191
|
+
const prompt = getPromptString('ready');
|
|
192
|
+
this.rl.question(prompt, (answer) => {
|
|
193
|
+
const trimmed = answer.trim();
|
|
194
|
+
// After user hits Enter, draw bottom border and status
|
|
195
|
+
drawBottomBorder();
|
|
196
|
+
// Determine which status to show based on input
|
|
197
|
+
if (trimmed.startsWith('/')) {
|
|
198
|
+
drawStatusLine('ready');
|
|
199
|
+
}
|
|
200
|
+
else if (trimmed) {
|
|
201
|
+
drawStatusLine('sending');
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
drawStatusLine('ready');
|
|
205
|
+
}
|
|
206
|
+
this.rl?.close();
|
|
207
|
+
this.rl = null;
|
|
208
|
+
resolve(trimmed);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Lock the bar in "sending" state (user just hit Enter).
|
|
214
|
+
*/
|
|
215
|
+
showSending(inputText) {
|
|
216
|
+
this.state = 'sending';
|
|
217
|
+
// Clear the bottom border + status that ask() drew
|
|
218
|
+
process.stdout.write('\x1b[1A\x1b[2K'); // clear status
|
|
219
|
+
process.stdout.write('\x1b[1A\x1b[2K'); // clear bottom border
|
|
220
|
+
drawBottomBorder();
|
|
221
|
+
drawStatusLine('sending');
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Update to "receiving" state while AI streams response.
|
|
225
|
+
*/
|
|
226
|
+
showReceiving() {
|
|
227
|
+
this.state = 'receiving';
|
|
228
|
+
// Overwrite the status line
|
|
229
|
+
process.stdout.write('\x1b[1A\x1b[2K'); // clear current status
|
|
230
|
+
drawStatusLine('receiving');
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Show success flash briefly.
|
|
234
|
+
*/
|
|
235
|
+
showSuccess() {
|
|
236
|
+
this.state = 'success';
|
|
237
|
+
process.stdout.write('\x1b[1A\x1b[2K');
|
|
238
|
+
drawStatusLine('success');
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Reset to ready state for next input.
|
|
242
|
+
* Clears old status and draws fresh frame.
|
|
243
|
+
*/
|
|
244
|
+
reset() {
|
|
245
|
+
this.state = 'ready';
|
|
246
|
+
console.log(''); // blank line after response
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Clean up on exit.
|
|
250
|
+
*/
|
|
251
|
+
destroy() {
|
|
252
|
+
if (this.rl) {
|
|
253
|
+
this.rl.close();
|
|
254
|
+
this.rl = null;
|
|
255
|
+
}
|
|
256
|
+
if (this.resizeHandler) {
|
|
257
|
+
process.stdout.removeListener('resize', this.resizeHandler);
|
|
258
|
+
this.resizeHandler = null;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.InputBarManager = InputBarManager;
|
|
263
|
+
//# sourceMappingURL=inputbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputbar.js","sourceRoot":"","sources":["../../src/utils/inputbar.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/output.d.ts
CHANGED
|
@@ -1,39 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ═══════════════════════════════════════════════════════════════════
|
|
3
|
+
* CoWorker v1.3.0 by Sylix — Premium Output System
|
|
4
|
+
* ═══════════════════════════════════════════════════════════════════
|
|
5
|
+
*
|
|
6
|
+
* Premium terminal rendering with true streaming support.
|
|
7
|
+
* All response text renders inside ╷│╵ borders as it arrives.
|
|
8
|
+
*/
|
|
9
|
+
export declare const CW_VERSION = "1.3.1";
|
|
1
10
|
export declare const theme: {
|
|
2
|
-
brand:
|
|
3
|
-
accent:
|
|
4
|
-
success:
|
|
5
|
-
error:
|
|
6
|
-
warning:
|
|
7
|
-
ai:
|
|
8
|
-
dim:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
brand: (s: string) => string;
|
|
12
|
+
accent: (s: string) => string;
|
|
13
|
+
success: (s: string) => string;
|
|
14
|
+
error: (s: string) => string;
|
|
15
|
+
warning: (s: string) => string;
|
|
16
|
+
ai: (s: string) => string;
|
|
17
|
+
dim: (s: string) => string;
|
|
18
|
+
border: (s: string) => string;
|
|
19
|
+
white: (s: string) => string;
|
|
20
|
+
code: (s: string) => string;
|
|
21
|
+
purple: (s: string) => string;
|
|
11
22
|
};
|
|
12
23
|
export declare function getTermWidth(): number;
|
|
13
|
-
/**
|
|
14
|
-
* Full animated startup banner.
|
|
15
|
-
* Step 1: Char-by-char typewriter ASCII logo
|
|
16
|
-
* Step 2: Tagline fade-in word by word
|
|
17
|
-
* Step 3: Animated thin line draw
|
|
18
|
-
* Step 4: User/model info in dim text
|
|
19
|
-
*/
|
|
20
24
|
export declare function showBanner(version: string, userEmail?: string, model?: string): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Static banner for non-TTY / piped / --no-banner mode.
|
|
23
|
-
*/
|
|
24
25
|
export declare function showStaticBanner(version: string): void;
|
|
26
|
+
export declare function showSessionInfo(cwd: string, sessionId: string): Promise<void>;
|
|
25
27
|
export declare class ThinkingAnimation {
|
|
26
28
|
private interval;
|
|
27
29
|
private frame;
|
|
28
30
|
private message;
|
|
29
|
-
constructor();
|
|
31
|
+
constructor(customMessage?: string);
|
|
30
32
|
start(): void;
|
|
31
33
|
stop(): void;
|
|
32
34
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Manages the response box state during streaming.
|
|
37
|
+
*
|
|
38
|
+
* Correct output:
|
|
39
|
+
* ╷
|
|
40
|
+
* │ Hi! I'm CoWorker, your AI coding assistant.
|
|
41
|
+
* │
|
|
42
|
+
* │ I can help you with:
|
|
43
|
+
* │ · Writing and debugging code
|
|
44
|
+
* │
|
|
45
|
+
* ╵ ✦ 1.2s · 34 tokens
|
|
46
|
+
*
|
|
47
|
+
* Rules:
|
|
48
|
+
* - ALL text inside ╷│╵ border
|
|
49
|
+
* - Border chars (╷ │ ╵) in dim gray #4B5563
|
|
50
|
+
* - Response text in purple #A78BFA
|
|
51
|
+
* - Code blocks switch to yellow #FCD34D
|
|
52
|
+
* - On every \n → print "\n │ "
|
|
53
|
+
*/
|
|
54
|
+
export declare class StreamRenderer {
|
|
55
|
+
private started;
|
|
56
|
+
private inCodeBlock;
|
|
57
|
+
private startTime;
|
|
58
|
+
private charCount;
|
|
59
|
+
constructor();
|
|
60
|
+
/**
|
|
61
|
+
* Call this for EACH chunk as it arrives from the SSE stream.
|
|
62
|
+
* Renders immediately — no buffering.
|
|
63
|
+
*/
|
|
64
|
+
write(chunk: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Close the response box and print footer.
|
|
67
|
+
*/
|
|
68
|
+
finish(): void;
|
|
69
|
+
/** Returns the estimated token count. */
|
|
70
|
+
getTokenEstimate(): number;
|
|
71
|
+
/** Returns elapsed ms. */
|
|
72
|
+
getElapsed(): number;
|
|
73
|
+
}
|
|
35
74
|
export declare function printResponseHeader(): void;
|
|
36
75
|
export declare function printResponseFooter(elapsed: number, tokenEstimate?: number): void;
|
|
76
|
+
export declare function streamResponseChunk(chunk: string): void;
|
|
37
77
|
export declare function printUserPrompt(input: string): void;
|
|
38
78
|
export declare function printError(title: string, details?: string, hint?: string): void;
|
|
39
79
|
export declare function printSuccess(message: string): void;
|
|
@@ -42,38 +82,22 @@ export declare function printExit(): void;
|
|
|
42
82
|
export declare function printToolStart(toolName: string): void;
|
|
43
83
|
export declare function printToolDone(toolName: string, elapsed: number): void;
|
|
44
84
|
export declare function printToolError(toolName: string, error: string): void;
|
|
45
|
-
|
|
46
|
-
* ┌─────────────────────────────────┐
|
|
47
|
-
* │ Code Review · src/index.ts │
|
|
48
|
-
* ├─────────────────────────────────┤
|
|
49
|
-
* │ Quality ████████░░ 8/10 │
|
|
50
|
-
* │ Security ██████████ 10/10 │
|
|
51
|
-
* └─────────────────────────────────┘
|
|
52
|
-
*/
|
|
53
|
-
export declare function printScoreCard(fileName: string, scores: {
|
|
85
|
+
export declare function printScoreCard(fileName: string, scores: Array<{
|
|
54
86
|
label: string;
|
|
55
87
|
score: number;
|
|
56
88
|
max?: number;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* ╭─ Suggested Commit ──────────────────╮
|
|
60
|
-
* │ ✨ feat: add user auth middleware │
|
|
61
|
-
* │ │
|
|
62
|
-
* │ Use this commit message? (y/n) › │
|
|
63
|
-
* ╰─────────────────────────────────────╯
|
|
64
|
-
*/
|
|
89
|
+
}>): void;
|
|
65
90
|
export declare function printCommitBox(commitMessage: string): void;
|
|
66
|
-
|
|
67
|
-
* ── Changes to src/api/sylix.ts ──────────
|
|
68
|
-
* - const url = "old-endpoint" ← red
|
|
69
|
-
* + const url = "new-endpoint" ← green
|
|
70
|
-
* ─────────────────────────────────────────
|
|
71
|
-
* Apply these changes? (y/n) ›
|
|
72
|
-
*/
|
|
73
|
-
export declare function printDiff(fileName: string, changes: {
|
|
91
|
+
export declare function printDiff(fileName: string, changes: Array<{
|
|
74
92
|
type: 'add' | 'remove' | 'context';
|
|
75
93
|
line: string;
|
|
76
|
-
}
|
|
94
|
+
}>): void;
|
|
95
|
+
/**
|
|
96
|
+
* Shows the CoWorker branded workspace trust prompt.
|
|
97
|
+
* Returns true if user trusts, false if they want to exit.
|
|
98
|
+
* Skips silently if the directory is already trusted.
|
|
99
|
+
*/
|
|
100
|
+
export declare function checkWorkspaceTrust(cwd: string): Promise<boolean>;
|
|
77
101
|
export declare function printHelp(): void;
|
|
78
102
|
export declare function printCompact(msgCount: number, tokenEst: number, sessionId: string): void;
|
|
79
103
|
export declare function printBox(label: string, lines: string[]): void;
|
|
@@ -83,4 +107,5 @@ export declare class Timer {
|
|
|
83
107
|
elapsed(): number;
|
|
84
108
|
formatted(): string;
|
|
85
109
|
}
|
|
110
|
+
export declare function renderMarkdown(text: string): string;
|
|
86
111
|
//# sourceMappingURL=output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
|