@backendkit-labs/agent-coding 0.14.0 → 0.16.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 (37) hide show
  1. package/README.md +114 -0
  2. package/dist/agents/prompts/backend.d.ts.map +1 -1
  3. package/dist/agents/prompts/backend.js +96 -91
  4. package/dist/agents/prompts/backend.js.map +1 -1
  5. package/dist/agents/prompts/coder.d.ts.map +1 -1
  6. package/dist/agents/prompts/coder.js +49 -45
  7. package/dist/agents/prompts/coder.js.map +1 -1
  8. package/dist/agents/prompts/data.d.ts.map +1 -1
  9. package/dist/agents/prompts/data.js +122 -118
  10. package/dist/agents/prompts/data.js.map +1 -1
  11. package/dist/agents/prompts/frontend.d.ts.map +1 -1
  12. package/dist/agents/prompts/frontend.js +90 -86
  13. package/dist/agents/prompts/frontend.js.map +1 -1
  14. package/dist/agents/prompts/general.d.ts.map +1 -1
  15. package/dist/agents/prompts/general.js +93 -88
  16. package/dist/agents/prompts/general.js.map +1 -1
  17. package/dist/agents/prompts/infrastructure.d.ts.map +1 -1
  18. package/dist/agents/prompts/infrastructure.js +144 -140
  19. package/dist/agents/prompts/infrastructure.js.map +1 -1
  20. package/dist/agents/prompts/qa.d.ts.map +1 -1
  21. package/dist/agents/prompts/qa.js +165 -161
  22. package/dist/agents/prompts/qa.js.map +1 -1
  23. package/dist/agents/prompts/security.d.ts.map +1 -1
  24. package/dist/agents/prompts/security.js +128 -124
  25. package/dist/agents/prompts/security.js.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +3 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/tools/run-command.d.ts.map +1 -1
  31. package/dist/tools/run-command.js +2 -1
  32. package/dist/tools/run-command.js.map +1 -1
  33. package/dist/transport/TerminalTransport.d.ts +22 -0
  34. package/dist/transport/TerminalTransport.d.ts.map +1 -0
  35. package/dist/transport/TerminalTransport.js +176 -0
  36. package/dist/transport/TerminalTransport.js.map +1 -0
  37. package/package.json +44 -34
@@ -0,0 +1,176 @@
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.TerminalTransport = void 0;
37
+ const readline = __importStar(require("readline"));
38
+ const marked_1 = require("marked");
39
+ const marked_terminal_1 = require("marked-terminal");
40
+ // marked v15 changed MarkedExtension types — cast is safe, runtime is compatible
41
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+ marked_1.marked.use((0, marked_terminal_1.markedTerminal)());
43
+ // ANSI helpers
44
+ const RESET = '\x1b[0m';
45
+ const DIM = '\x1b[2m';
46
+ const BOLD = '\x1b[1m';
47
+ const CYAN = '\x1b[36m';
48
+ const YELLOW = '\x1b[33m';
49
+ const GREEN = '\x1b[32m';
50
+ const RED = '\x1b[31m';
51
+ const GRAY = '\x1b[90m';
52
+ function hr(char = '─', width = 72) {
53
+ return GRAY + char.repeat(width) + RESET;
54
+ }
55
+ function agentHeader(icon, name) {
56
+ const label = `${BOLD}${icon} ${name}${RESET}`;
57
+ return `\n${hr('─')} ${label}\n`;
58
+ }
59
+ function toolLine(name, preview) {
60
+ const truncated = preview.length > 60 ? preview.slice(0, 57) + '…' : preview;
61
+ return `${GRAY}● ${CYAN}${name}${GRAY}(${RESET}${truncated}${GRAY})${RESET}`;
62
+ }
63
+ /**
64
+ * Terminal transport that renders agent responses as formatted Markdown.
65
+ *
66
+ * Instead of streaming raw tokens mid-tool-call (which produces fragmented text),
67
+ * this transport:
68
+ * 1. Accumulates tokens per agent block silently
69
+ * 2. Shows tool calls as compact single-line indicators
70
+ * 3. Renders the final buffered text as Markdown on block_end
71
+ *
72
+ * Pass to createCodingEngine({ transport: new TerminalTransport() }).
73
+ */
74
+ class TerminalTransport {
75
+ rl = null;
76
+ // token buffers per active agent block
77
+ buffers = new Map();
78
+ // track whether any tool calls fired in a block (for blank-line spacing)
79
+ hadTools = new Map();
80
+ emit(event) {
81
+ switch (event.type) {
82
+ case 'block_start': {
83
+ const id = event.agent_id ?? 'unknown';
84
+ const icon = event.agent_icon ?? '◆';
85
+ const name = event.agent_name ?? id;
86
+ this.buffers.set(id, '');
87
+ this.hadTools.set(id, false);
88
+ process.stdout.write(agentHeader(icon, name));
89
+ break;
90
+ }
91
+ case 'token': {
92
+ // Accumulate silently — no streaming to terminal
93
+ const id = event.agent_id ?? 'unknown';
94
+ this.buffers.set(id, (this.buffers.get(id) ?? '') + event.content);
95
+ break;
96
+ }
97
+ case 'tool_call': {
98
+ // Single-line compact indicator
99
+ const args = event.args_preview ?? '';
100
+ process.stdout.write(toolLine(event.name, args) + '\n');
101
+ // Mark the currently active block as having had tool calls
102
+ for (const [id] of this.buffers) {
103
+ this.hadTools.set(id, true);
104
+ }
105
+ break;
106
+ }
107
+ case 'block_end': {
108
+ const id = event.agent_id ?? 'unknown';
109
+ const buf = (this.buffers.get(id) ?? '').trim();
110
+ this.buffers.delete(id);
111
+ this.hadTools.delete(id);
112
+ if (buf) {
113
+ if (this.hadTools.get(id))
114
+ process.stdout.write('\n');
115
+ const rendered = marked_1.marked.parse(buf);
116
+ process.stdout.write(rendered);
117
+ }
118
+ process.stdout.write(hr('─') + '\n');
119
+ break;
120
+ }
121
+ case 'system': {
122
+ const prefix = event.level === 'error' ? `${RED}[error]${RESET}`
123
+ : event.level === 'warn' ? `${YELLOW}[warn]${RESET}`
124
+ : `${GRAY}[info]${RESET}`;
125
+ process.stderr.write(`${prefix} ${event.text}\n`);
126
+ break;
127
+ }
128
+ case 'error': {
129
+ process.stderr.write(`${RED}Error: ${event.message}${RESET}\n`);
130
+ break;
131
+ }
132
+ case 'metrics': {
133
+ const cost = event.cost_usd != null
134
+ ? ` · $${event.cost_usd.toFixed(4)}`
135
+ : '';
136
+ process.stderr.write(`${GRAY}↑ ${event.input_tokens} ↓ ${event.output_tokens}${cost}${RESET}\n`);
137
+ break;
138
+ }
139
+ case 'compacting': {
140
+ if (event.phase === 'start') {
141
+ process.stderr.write(`${DIM}[compacting] ${event.label}…${RESET}\n`);
142
+ }
143
+ break;
144
+ }
145
+ case 'tool_result':
146
+ case 'agent_switch':
147
+ case 'thinking':
148
+ case 'ready':
149
+ case 'done':
150
+ // intentionally silent
151
+ break;
152
+ default:
153
+ break;
154
+ }
155
+ }
156
+ onInput(handler) {
157
+ if (!this.rl) {
158
+ this.rl = readline.createInterface({ input: process.stdin });
159
+ }
160
+ const listener = (line) => {
161
+ const trimmed = line.trim();
162
+ if (trimmed)
163
+ handler(trimmed);
164
+ };
165
+ this.rl.on('line', listener);
166
+ return () => { this.rl?.off('line', listener); };
167
+ }
168
+ close() {
169
+ this.rl?.close();
170
+ this.rl = null;
171
+ this.buffers.clear();
172
+ this.hadTools.clear();
173
+ }
174
+ }
175
+ exports.TerminalTransport = TerminalTransport;
176
+ //# sourceMappingURL=TerminalTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalTransport.js","sourceRoot":"","sources":["../../src/transport/TerminalTransport.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,34 +1,44 @@
1
- {
2
- "name": "@backendkit-labs/agent-coding",
3
- "version": "0.14.0",
4
- "description": "Coding agent profiles and tools for @backendkit-labs/agent-core",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "files": ["dist/", "README.md"],
8
- "repository": {
9
- "type": "git",
10
- "url": "https://github.com/BackendKit-labs/backendkit-agent-framework.git",
11
- "directory": "packages/coding"
12
- },
13
- "publishConfig": { "access": "public" },
14
- "engines": { "node": ">=20.0.0" },
15
- "scripts": {
16
- "build": "tsc",
17
- "dev": "tsc --watch",
18
- "typecheck": "tsc --noEmit",
19
- "test": "jest",
20
- "prepublishOnly": "npm run build"
21
- },
22
- "dependencies": {
23
- "@anthropic-ai/sdk": "^0.98.0",
24
- "@backendkit-labs/agent-core": "*",
25
- "openai": "^4.0.0"
26
- },
27
- "devDependencies": {
28
- "@types/jest": "^29.0.0",
29
- "@types/node": "^20.0.0",
30
- "jest": "^29.0.0",
31
- "ts-jest": "^29.0.0",
32
- "typescript": "^5.4.0"
33
- }
34
- }
1
+ {
2
+ "name": "@backendkit-labs/agent-coding",
3
+ "version": "0.16.0",
4
+ "description": "Coding agent profiles and tools for @backendkit-labs/agent-core",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist/",
9
+ "README.md"
10
+ ],
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/BackendKit-labs/backendkit-agent-framework.git",
14
+ "directory": "packages/coding"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "engines": {
20
+ "node": ">=20.0.0"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc",
24
+ "dev": "tsc --watch",
25
+ "typecheck": "tsc --noEmit",
26
+ "test": "jest",
27
+ "prepublishOnly": "npm run build"
28
+ },
29
+ "dependencies": {
30
+ "@anthropic-ai/sdk": "^0.98.0",
31
+ "@backendkit-labs/agent-core": "*",
32
+ "marked": "^15.0.12",
33
+ "marked-terminal": "^7.3.0",
34
+ "openai": "^4.0.0"
35
+ },
36
+ "devDependencies": {
37
+ "@types/jest": "^29.0.0",
38
+ "@types/marked-terminal": "^6.1.1",
39
+ "@types/node": "^20.0.0",
40
+ "jest": "^29.0.0",
41
+ "ts-jest": "^29.0.0",
42
+ "typescript": "^5.4.0"
43
+ }
44
+ }