profclaw 0.0.1-beta.2 → 2.0.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/CHANGELOG.md +21 -38
- package/CONTRIBUTING.md +3 -5
- package/README.md +128 -63
- package/dist/chat/execution/tools/index.d.ts +1 -1
- package/dist/chat/execution/tools/index.js +41 -2
- package/dist/chat/providers/slack/index.d.ts +2 -2
- package/dist/cli/commands/models.js +39 -26
- package/dist/cli/commands/onboard.js +64 -79
- package/dist/cli/commands/setup.js +293 -90
- package/dist/cli/index.js +0 -6
- package/dist/cli/providers.d.ts +15 -0
- package/dist/cli/providers.js +41 -0
- package/dist/core/deployment.js +2 -0
- package/dist/providers/ai-sdk.js +26 -6
- package/dist/routes/channels.d.ts +12 -0
- package/dist/routes/channels.js +166 -0
- package/dist/server/route-loader.js +1 -0
- package/dist/server.js +115 -109
- package/package.json +1 -1
- package/skills/git-workflow/SKILL.md +3 -3
- package/ui/dist/assets/{ActivityView-DIPQSJ_d.js → ActivityView-BeshZXmE.js} +1 -1
- package/ui/dist/assets/{AgentList-CqyaYrcq.js → AgentList-QVHeldPi.js} +1 -1
- package/ui/dist/assets/{AnalyticsDashboard-C-mjuGHT.js → AnalyticsDashboard-C9R97dXE.js} +1 -1
- package/ui/dist/assets/{AreaChart-CfYWmbtr.js → AreaChart-B73gaiVQ.js} +1 -1
- package/ui/dist/assets/{CartesianChart-BaQ3It0c.js → CartesianChart-CXYL2R-A.js} +1 -1
- package/ui/dist/assets/{ChatView-DxxQy6pl.js → ChatView-qjZErlrp.js} +1 -1
- package/ui/dist/assets/{CostsDashboard-CDBBcGkg.js → CostsDashboard-O4DCLy1i.js} +1 -1
- package/ui/dist/assets/{EstimateSelect-CDjf5qKl.js → EstimateSelect-1hQf4Osk.js} +1 -1
- package/ui/dist/assets/{FloatingChatbot-CZHjvJIe.js → FloatingChatbot-BZBzrJxd.js} +1 -1
- package/ui/dist/assets/{InviteCodeManagement-DTm-IPTm.js → InviteCodeManagement-LEoGqYeA.js} +1 -1
- package/ui/dist/assets/{ProjectDetail-DlYUcOss.js → ProjectDetail--gPfvATB.js} +1 -1
- package/ui/dist/assets/{ProjectIcon-BMRpnM04.js → ProjectIcon-Chd_ofsw.js} +1 -1
- package/ui/dist/assets/{ProjectList-D85TN0i0.js → ProjectList-BvUfVB6c.js} +1 -1
- package/ui/dist/assets/{Settings-CgPqzUvj.js → Settings-1kaf7VHE.js} +1 -1
- package/ui/dist/assets/{StatusIndicator-yig0uZEA.js → StatusIndicator-pRfkNcdV.js} +1 -1
- package/ui/dist/assets/{SummaryDetail-CwLAfHgJ.js → SummaryDetail-DV3AmONk.js} +1 -1
- package/ui/dist/assets/{SummaryList-BvS5Idnu.js → SummaryList-B6kXiTxL.js} +1 -1
- package/ui/dist/assets/{TaskDetail-zarC1fOt.js → TaskDetail-CV6CzbOS.js} +1 -1
- package/ui/dist/assets/{TaskList-CyJq3ANE.js → TaskList-DL7brQKd.js} +1 -1
- package/ui/dist/assets/{TicketBoard-BlWr3-iH.js → TicketBoard-CrkkFj7C.js} +1 -1
- package/ui/dist/assets/{TicketDetail-DmqWKj2W.js → TicketDetail-hnnYclpD.js} +1 -1
- package/ui/dist/assets/{TicketList-Scj4pMWa.js → TicketList-CsDAyQCL.js} +1 -1
- package/ui/dist/assets/{UserManagement-BH7uG7dw.js → UserManagement-BGFQyTSr.js} +1 -1
- package/ui/dist/assets/{ViewSwitcher-3HzZUdWn.js → ViewSwitcher-CnL0OqA8.js} +1 -1
- package/ui/dist/assets/{alert-dialog-DWPb2IfQ.js → alert-dialog-SKM6Gjz4.js} +1 -1
- package/ui/dist/assets/{archive-CGck7gxR.js → archive-BsLa7brF.js} +1 -1
- package/ui/dist/assets/{badge-DEmc3Z_l.js → badge-CVHH1a-v.js} +1 -1
- package/ui/dist/assets/{brain-CfFdLVqb.js → brain-6o_RHVpe.js} +1 -1
- package/ui/dist/assets/{bug-DqSGPUUE.js → bug-CmZI7jqM.js} +1 -1
- package/ui/dist/assets/{calendar-BuZ4zbPW.js → calendar-Bf0t2B82.js} +1 -1
- package/ui/dist/assets/{chevron-up-DcJ4LL_N.js → chevron-up-CoUsOvZj.js} +1 -1
- package/ui/dist/assets/{circle-x-C78PNZjF.js → circle-x-Dgw11LgT.js} +1 -1
- package/ui/dist/assets/{constants-DhDjZe4P.js → constants-Q5Zivl-a.js} +1 -1
- package/ui/dist/assets/{cpu-Ck6AoG8c.js → cpu-DiPMQICV.js} +1 -1
- package/ui/dist/assets/{database-CA2w8Lvt.js → database-BwTfupDi.js} +1 -1
- package/ui/dist/assets/{dialog-BOdGWhgE.js → dialog-BUqN9Psj.js} +1 -1
- package/ui/dist/assets/{ellipsis-FhHKRbfl.js → ellipsis-UJx4Xnf6.js} +1 -1
- package/ui/dist/assets/{ellipsis-vertical-CO0UqE4-.js → ellipsis-vertical-DoULYEKn.js} +1 -1
- package/ui/dist/assets/{file-code-ChnhYYj1.js → file-code-B2UrJLwi.js} +1 -1
- package/ui/dist/assets/{folder-open-CHwA1-ve.js → folder-open-BJi577JH.js} +1 -1
- package/ui/dist/assets/{funnel-ByEjRFNB.js → funnel-PkaD_HSR.js} +1 -1
- package/ui/dist/assets/{git-branch-GTOPQgU4.js → git-branch-C_K30am0.js} +1 -1
- package/ui/dist/assets/{git-commit-horizontal-F5M84Kut.js → git-commit-horizontal-IT6ecxWQ.js} +1 -1
- package/ui/dist/assets/{globe-CQWfr7hT.js → globe-f-jjCa_g.js} +1 -1
- package/ui/dist/assets/{hash-nKC9gtLg.js → hash-DNEv8Elo.js} +1 -1
- package/ui/dist/assets/{history-DfFSA9xJ.js → history-BQSBo_1Q.js} +1 -1
- package/ui/dist/assets/{index-DHGvP9mp.js → index-BUmnwPQr.js} +1 -1
- package/ui/dist/assets/{index-Z4-RtZcs.js → index-BfF5G4Cw.js} +1 -1
- package/ui/dist/assets/{index-DeI8lKRR.js → index-C8N375c2.js} +1 -1
- package/ui/dist/assets/index-CuxnqVVz.css +1 -0
- package/ui/dist/assets/{index-Ca3vk7Gq.js → index-CzMM3QOk.js} +1 -1
- package/ui/dist/assets/{index--JkIxVXb.js → index-lJlNPFVJ.js} +3 -3
- package/ui/dist/assets/{index-a4Fxq0Hb.js → index-nS3EErDg.js} +1 -1
- package/ui/dist/assets/{layers-DFeLExSa.js → layers-jFqVrWMD.js} +1 -1
- package/ui/dist/assets/{layout-dashboard-WmgjMhWF.js → layout-dashboard-CcKt1hXw.js} +1 -1
- package/ui/dist/assets/{lightbulb-Bo8hEr7B.js → lightbulb-Jhp7FvbU.js} +1 -1
- package/ui/dist/assets/{link-2-YqrpQXBH.js → link-2-DdO7ostF.js} +1 -1
- package/ui/dist/assets/{markdown-renderer-Croje6Xe.js → markdown-renderer-n1ToC4XQ.js} +1 -1
- package/ui/dist/assets/{message-square-CD0H5hot.js → message-square-CBgH65X7.js} +1 -1
- package/ui/dist/assets/{pencil-DpFnj5dn.js → pencil-CYXCEPQh.js} +1 -1
- package/ui/dist/assets/{play-DVgea_jT.js → play-d1ONaH0-.js} +1 -1
- package/ui/dist/assets/{popover-JXecfWG5.js → popover-CrmZgoWu.js} +1 -1
- package/ui/dist/assets/{progress-C1ghf1Fu.js → progress-uv4SPkL5.js} +1 -1
- package/ui/dist/assets/{rocket-BFxPYGx9.js → rocket-DhvUetsk.js} +1 -1
- package/ui/dist/assets/{select-MADP8m6Q.js → select-CeQ8AHGy.js} +1 -1
- package/ui/dist/assets/{send-eYnW_7n-.js → send-P0r5D7td.js} +1 -1
- package/ui/dist/assets/{server-CPMaysH8.js → server-CVHTZB72.js} +1 -1
- package/ui/dist/assets/{settings-2-scXUOuE_.js → settings-2-ocj5uHGx.js} +1 -1
- package/ui/dist/assets/{sheet-r6NSOxi-.js → sheet-DuQExSho.js} +1 -1
- package/ui/dist/assets/{shield-check-PEr7nmVw.js → shield-check-DfVdE34l.js} +1 -1
- package/ui/dist/assets/{shield-off-CLtXio62.js → shield-off-8l0J6R-8.js} +1 -1
- package/ui/dist/assets/{skeleton-C9oEzNlU.js → skeleton-TFiFJ3nB.js} +1 -1
- package/ui/dist/assets/{smartphone-DusFfY0U.js → smartphone-77_g3SQn.js} +1 -1
- package/ui/dist/assets/{square-e1yxB2eR.js → square-Ckzsr3Rn.js} +1 -1
- package/ui/dist/assets/{switch-tNs0n-kz.js → switch-CAePkd6k.js} +1 -1
- package/ui/dist/assets/{table-CXxtLicg.js → table-ZjAZ7hkt.js} +1 -1
- package/ui/dist/assets/{tag-tAwMmQ9G.js → tag-C35mgoEv.js} +1 -1
- package/ui/dist/assets/{textarea-BjiEeIWh.js → textarea-DsVPnSgR.js} +1 -1
- package/ui/dist/assets/{timer-Vel1N3RP.js → timer-DHJBS2w1.js} +1 -1
- package/ui/dist/assets/{tooltip-ZMwtfr1J.js → tooltip-BYmQ331W.js} +1 -1
- package/ui/dist/assets/{trash-2-eM-CNwsZ.js → trash-2-keO5tKPE.js} +1 -1
- package/ui/dist/assets/{trending-up-BGafmjRo.js → trending-up-BBv8KbrY.js} +1 -1
- package/ui/dist/assets/{wand-sparkles-DPvcd9Pi.js → wand-sparkles-BusQ52ZK.js} +1 -1
- package/ui/dist/assets/{wrench-B8s3zYVV.js → wrench-02YaOSiK.js} +1 -1
- package/ui/dist/index.html +2 -2
- package/dist/chat/auto-reply.d.ts +0 -90
- package/dist/chat/auto-reply.js +0 -272
- package/dist/chat/execution/pty.d.ts +0 -92
- package/dist/chat/execution/pty.js +0 -285
- package/dist/chat/execution/tools/glinr-ops.d.ts +0 -202
- package/dist/chat/execution/tools/glinr-ops.js +0 -694
- package/dist/cli/commands/browser.d.ts +0 -3
- package/dist/cli/commands/browser.js +0 -138
- package/dist/cli/commands/canvas.d.ts +0 -3
- package/dist/cli/commands/canvas.js +0 -155
- package/dist/cli/commands/nodes.d.ts +0 -3
- package/dist/cli/commands/nodes.js +0 -193
- package/dist/diagnostics/exporters.d.ts +0 -21
- package/dist/diagnostics/exporters.js +0 -138
- package/dist/diagnostics/index.d.ts +0 -10
- package/dist/diagnostics/index.js +0 -9
- package/dist/diagnostics/middleware.d.ts +0 -12
- package/dist/diagnostics/middleware.js +0 -58
- package/dist/diagnostics/tracer.d.ts +0 -133
- package/dist/diagnostics/tracer.js +0 -257
- package/dist/discovery/index.d.ts +0 -8
- package/dist/discovery/index.js +0 -7
- package/dist/discovery/mdns.d.ts +0 -40
- package/dist/discovery/mdns.js +0 -249
- package/dist/plugins/registry.d.ts +0 -122
- package/dist/plugins/registry.js +0 -352
- package/dist/plugins/sandbox.d.ts +0 -77
- package/dist/plugins/sandbox.js +0 -287
- package/dist/plugins/search/brave.d.ts +0 -9
- package/dist/plugins/search/brave.js +0 -157
- package/dist/plugins/search/duckduckgo.d.ts +0 -9
- package/dist/plugins/search/duckduckgo.js +0 -171
- package/dist/plugins/search/index.d.ts +0 -13
- package/dist/plugins/search/index.js +0 -23
- package/dist/plugins/search/searxng.d.ts +0 -9
- package/dist/plugins/search/searxng.js +0 -170
- package/dist/plugins/search/serper.d.ts +0 -9
- package/dist/plugins/search/serper.js +0 -135
- package/dist/plugins/search/tavily.d.ts +0 -9
- package/dist/plugins/search/tavily.js +0 -146
- package/dist/providers/adapters/anthropic.d.ts +0 -26
- package/dist/providers/adapters/anthropic.js +0 -306
- package/dist/providers/adapters/base.d.ts +0 -53
- package/dist/providers/adapters/base.js +0 -99
- package/dist/providers/adapters/ollama.d.ts +0 -30
- package/dist/providers/adapters/ollama.js +0 -292
- package/dist/utils/ai-cache.d.ts +0 -72
- package/dist/utils/ai-cache.js +0 -204
- package/dist/utils/file-lock.d.ts +0 -85
- package/dist/utils/file-lock.js +0 -204
- package/ui/dist/assets/index-WclMPci1.css +0 -1
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { api } from '../utils/api.js';
|
|
4
|
-
import { spinner, success, error, info, createTable, truncate } from '../utils/output.js';
|
|
5
|
-
export function browserCommands() {
|
|
6
|
-
const cmd = new Command('browser')
|
|
7
|
-
.description('Control CDP browser sessions');
|
|
8
|
-
cmd
|
|
9
|
-
.command('open <url>')
|
|
10
|
-
.description('Open a URL in the browser')
|
|
11
|
-
.option('--json', 'Output as JSON')
|
|
12
|
-
.action(async (url, options) => {
|
|
13
|
-
const spin = spinner(`Opening ${url}...`).start();
|
|
14
|
-
try {
|
|
15
|
-
const result = await api.post('/api/browser/open', { url });
|
|
16
|
-
spin.stop();
|
|
17
|
-
if (!result.ok) {
|
|
18
|
-
error(result.error || 'Failed to open URL');
|
|
19
|
-
process.exit(1);
|
|
20
|
-
}
|
|
21
|
-
if (options.json) {
|
|
22
|
-
console.log(JSON.stringify(result.data, null, 2));
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const data = result.data;
|
|
26
|
-
success(`Opened ${chalk.cyan(data.url)}`);
|
|
27
|
-
console.log(chalk.dim(` Page ID: ${data.pageId}`));
|
|
28
|
-
}
|
|
29
|
-
catch (err) {
|
|
30
|
-
spin.stop();
|
|
31
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
cmd
|
|
36
|
-
.command('screenshot [url]')
|
|
37
|
-
.description('Take a screenshot of the current page or a URL')
|
|
38
|
-
.option('--output <path>', 'Save screenshot to file path')
|
|
39
|
-
.option('--json', 'Output as JSON')
|
|
40
|
-
.action(async (url, options) => {
|
|
41
|
-
const spin = spinner('Taking screenshot...').start();
|
|
42
|
-
try {
|
|
43
|
-
const body = {};
|
|
44
|
-
if (url)
|
|
45
|
-
body['url'] = url;
|
|
46
|
-
if (options.output)
|
|
47
|
-
body['outputPath'] = options.output;
|
|
48
|
-
const result = await api.post('/api/browser/screenshot', body);
|
|
49
|
-
spin.stop();
|
|
50
|
-
if (!result.ok) {
|
|
51
|
-
error(result.error || 'Failed to take screenshot');
|
|
52
|
-
process.exit(1);
|
|
53
|
-
}
|
|
54
|
-
if (options.json) {
|
|
55
|
-
console.log(JSON.stringify(result.data, null, 2));
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
const data = result.data;
|
|
59
|
-
success('Screenshot taken');
|
|
60
|
-
if (data.path)
|
|
61
|
-
console.log(chalk.dim(` Saved to: ${data.path}`));
|
|
62
|
-
if (data.url)
|
|
63
|
-
console.log(chalk.dim(` Page: ${data.url}`));
|
|
64
|
-
}
|
|
65
|
-
catch (err) {
|
|
66
|
-
spin.stop();
|
|
67
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
68
|
-
process.exit(1);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
cmd
|
|
72
|
-
.command('close [pageId]')
|
|
73
|
-
.description('Close browser page or all pages')
|
|
74
|
-
.option('--json', 'Output as JSON')
|
|
75
|
-
.action(async (pageId, options) => {
|
|
76
|
-
const spin = spinner('Closing browser...').start();
|
|
77
|
-
try {
|
|
78
|
-
const path = pageId ? `/api/browser/pages/${pageId}` : '/api/browser/close';
|
|
79
|
-
const result = await api.post(path);
|
|
80
|
-
spin.stop();
|
|
81
|
-
if (!result.ok) {
|
|
82
|
-
error(result.error || 'Failed to close browser');
|
|
83
|
-
process.exit(1);
|
|
84
|
-
}
|
|
85
|
-
if (options.json) {
|
|
86
|
-
console.log(JSON.stringify(result.data, null, 2));
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
success(pageId ? `Page ${pageId} closed` : 'Browser closed');
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
spin.stop();
|
|
93
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
94
|
-
process.exit(1);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
cmd
|
|
98
|
-
.command('pages')
|
|
99
|
-
.description('List open browser pages')
|
|
100
|
-
.option('--json', 'Output as JSON')
|
|
101
|
-
.action(async (options) => {
|
|
102
|
-
const spin = spinner('Fetching pages...').start();
|
|
103
|
-
try {
|
|
104
|
-
const result = await api.get('/api/browser/pages');
|
|
105
|
-
spin.stop();
|
|
106
|
-
if (!result.ok) {
|
|
107
|
-
error(result.error || 'Failed to fetch pages');
|
|
108
|
-
process.exit(1);
|
|
109
|
-
}
|
|
110
|
-
const { pages } = result.data;
|
|
111
|
-
if (options.json) {
|
|
112
|
-
console.log(JSON.stringify(pages, null, 2));
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
if (pages.length === 0) {
|
|
116
|
-
info('No open browser pages.');
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
const table = createTable(['ID', 'Title', 'URL', 'Active']);
|
|
120
|
-
for (const p of pages) {
|
|
121
|
-
table.push([
|
|
122
|
-
chalk.dim(truncate(p.id, 12)),
|
|
123
|
-
truncate(p.title || '-', 30),
|
|
124
|
-
truncate(p.url, 40),
|
|
125
|
-
p.active ? chalk.green('yes') : chalk.dim('no'),
|
|
126
|
-
]);
|
|
127
|
-
}
|
|
128
|
-
console.log(table.toString());
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
spin.stop();
|
|
132
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
133
|
-
process.exit(1);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
return cmd;
|
|
137
|
-
}
|
|
138
|
-
//# sourceMappingURL=browser.js.map
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { api } from '../utils/api.js';
|
|
4
|
-
import { spinner, success, error, info, createTable, formatRelativeTime, truncate } from '../utils/output.js';
|
|
5
|
-
const VALID_TYPES = ['code', 'chart', 'diagram', 'table', 'html', 'markdown', 'mermaid', 'svg'];
|
|
6
|
-
export function canvasCommands() {
|
|
7
|
-
const cmd = new Command('canvas')
|
|
8
|
-
.description('Manage canvas documents');
|
|
9
|
-
cmd
|
|
10
|
-
.command('list')
|
|
11
|
-
.alias('ls')
|
|
12
|
-
.description('List canvas documents')
|
|
13
|
-
.option('--json', 'Output as JSON')
|
|
14
|
-
.action(async (options) => {
|
|
15
|
-
const spin = spinner('Fetching canvases...').start();
|
|
16
|
-
try {
|
|
17
|
-
const result = await api.get('/api/canvas');
|
|
18
|
-
spin.stop();
|
|
19
|
-
if (!result.ok) {
|
|
20
|
-
error(result.error || 'Failed to fetch canvases');
|
|
21
|
-
process.exit(1);
|
|
22
|
-
}
|
|
23
|
-
const { canvases } = result.data;
|
|
24
|
-
if (options.json) {
|
|
25
|
-
console.log(JSON.stringify(canvases, null, 2));
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
if (canvases.length === 0) {
|
|
29
|
-
info('No canvas documents found.');
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
const table = createTable(['ID', 'Type', 'Title', 'Updated']);
|
|
33
|
-
for (const c of canvases) {
|
|
34
|
-
table.push([
|
|
35
|
-
chalk.dim(truncate(c.id, 12)),
|
|
36
|
-
chalk.cyan(c.type),
|
|
37
|
-
truncate(c.title || '-', 40),
|
|
38
|
-
formatRelativeTime(c.updatedAt),
|
|
39
|
-
]);
|
|
40
|
-
}
|
|
41
|
-
console.log(table.toString());
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
spin.stop();
|
|
45
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
46
|
-
process.exit(1);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
cmd
|
|
50
|
-
.command('show <id>')
|
|
51
|
-
.description('Show canvas document content')
|
|
52
|
-
.option('--json', 'Output as JSON')
|
|
53
|
-
.action(async (id, options) => {
|
|
54
|
-
const spin = spinner('Fetching canvas...').start();
|
|
55
|
-
try {
|
|
56
|
-
const result = await api.get(`/api/canvas/${id}`);
|
|
57
|
-
spin.stop();
|
|
58
|
-
if (!result.ok) {
|
|
59
|
-
error(result.error || 'Failed to fetch canvas');
|
|
60
|
-
process.exit(1);
|
|
61
|
-
}
|
|
62
|
-
const { canvas, content } = result.data;
|
|
63
|
-
if (options.json) {
|
|
64
|
-
console.log(JSON.stringify(result.data, null, 2));
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
console.log(`\n${chalk.bold(canvas.title || canvas.id)} ${chalk.dim(`[${canvas.type}]`)}`);
|
|
68
|
-
console.log(chalk.dim('─'.repeat(50)));
|
|
69
|
-
console.log(content);
|
|
70
|
-
console.log();
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
73
|
-
spin.stop();
|
|
74
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
75
|
-
process.exit(1);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
cmd
|
|
79
|
-
.command('render <type> <content>')
|
|
80
|
-
.description(`Render content as a canvas type (${VALID_TYPES.join('|')})`)
|
|
81
|
-
.option('--title <title>', 'Canvas title')
|
|
82
|
-
.option('--json', 'Output as JSON')
|
|
83
|
-
.action(async (type, content, options) => {
|
|
84
|
-
if (!VALID_TYPES.includes(type)) {
|
|
85
|
-
error(`Invalid type. Must be one of: ${VALID_TYPES.join(', ')}`);
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
|
-
const spin = spinner(`Rendering ${type} canvas...`).start();
|
|
89
|
-
try {
|
|
90
|
-
const result = await api.post('/api/canvas/render', {
|
|
91
|
-
type,
|
|
92
|
-
content,
|
|
93
|
-
title: options.title,
|
|
94
|
-
});
|
|
95
|
-
spin.stop();
|
|
96
|
-
if (!result.ok) {
|
|
97
|
-
error(result.error || 'Failed to render canvas');
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
|
-
if (options.json) {
|
|
101
|
-
console.log(JSON.stringify(result.data, null, 2));
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const data = result.data;
|
|
105
|
-
success(`Canvas rendered (${data.type})`);
|
|
106
|
-
console.log(chalk.dim(` ID: ${data.id}`));
|
|
107
|
-
}
|
|
108
|
-
catch (err) {
|
|
109
|
-
spin.stop();
|
|
110
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
111
|
-
process.exit(1);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
cmd
|
|
115
|
-
.command('clear [id]')
|
|
116
|
-
.description('Clear canvas document(s)')
|
|
117
|
-
.option('--yes', 'Skip confirmation')
|
|
118
|
-
.option('--json', 'Output as JSON')
|
|
119
|
-
.action(async (id, options) => {
|
|
120
|
-
if (!options.yes) {
|
|
121
|
-
const { createInterface } = await import('readline');
|
|
122
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
123
|
-
const label = id ? `canvas ${id}` : 'all canvases';
|
|
124
|
-
const confirmed = await new Promise((resolve) => {
|
|
125
|
-
rl.question(`Clear ${label}? (y/N) `, (ans) => { rl.close(); resolve(ans.toLowerCase() === 'y'); });
|
|
126
|
-
});
|
|
127
|
-
if (!confirmed) {
|
|
128
|
-
info('Aborted.');
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
const spin = spinner('Clearing canvas...').start();
|
|
133
|
-
try {
|
|
134
|
-
const path = id ? `/api/canvas/${id}` : '/api/canvas';
|
|
135
|
-
const result = await api.delete(path);
|
|
136
|
-
spin.stop();
|
|
137
|
-
if (!result.ok) {
|
|
138
|
-
error(result.error || 'Failed to clear canvas');
|
|
139
|
-
process.exit(1);
|
|
140
|
-
}
|
|
141
|
-
if (options.json) {
|
|
142
|
-
console.log(JSON.stringify({ ok: true }, null, 2));
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
success(id ? `Canvas ${id} cleared` : 'All canvases cleared');
|
|
146
|
-
}
|
|
147
|
-
catch (err) {
|
|
148
|
-
spin.stop();
|
|
149
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
return cmd;
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=canvas.js.map
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { api } from '../utils/api.js';
|
|
4
|
-
import { spinner, success, error, info, createTable, formatRelativeTime, truncate } from '../utils/output.js';
|
|
5
|
-
export function nodesCommands() {
|
|
6
|
-
const cmd = new Command('nodes')
|
|
7
|
-
.description('Manage distributed profClaw nodes');
|
|
8
|
-
cmd
|
|
9
|
-
.command('list')
|
|
10
|
-
.alias('ls')
|
|
11
|
-
.description('List connected nodes')
|
|
12
|
-
.option('--json', 'Output as JSON')
|
|
13
|
-
.action(async (options) => {
|
|
14
|
-
const spin = spinner('Fetching nodes...').start();
|
|
15
|
-
try {
|
|
16
|
-
const result = await api.get('/api/nodes');
|
|
17
|
-
spin.stop();
|
|
18
|
-
if (!result.ok) {
|
|
19
|
-
error(result.error || 'Failed to fetch nodes');
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
const { nodes } = result.data;
|
|
23
|
-
if (options.json) {
|
|
24
|
-
console.log(JSON.stringify(nodes, null, 2));
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
if (nodes.length === 0) {
|
|
28
|
-
info('No nodes connected. Add one: profclaw nodes add <url>');
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const table = createTable(['ID', 'Name', 'URL', 'Version', 'Latency', 'Last Seen']);
|
|
32
|
-
for (const n of nodes) {
|
|
33
|
-
const healthDot = n.healthy ? chalk.green('●') : chalk.red('●');
|
|
34
|
-
table.push([
|
|
35
|
-
chalk.dim(truncate(n.id, 12)),
|
|
36
|
-
healthDot + ' ' + (n.name || chalk.dim('-')),
|
|
37
|
-
truncate(n.url, 35),
|
|
38
|
-
n.version || chalk.dim('-'),
|
|
39
|
-
n.latencyMs != null ? `${n.latencyMs}ms` : chalk.dim('-'),
|
|
40
|
-
formatRelativeTime(n.lastSeen),
|
|
41
|
-
]);
|
|
42
|
-
}
|
|
43
|
-
console.log(table.toString());
|
|
44
|
-
console.log(chalk.dim(`\n${nodes.length} node${nodes.length !== 1 ? 's' : ''}`));
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
spin.stop();
|
|
48
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
cmd
|
|
53
|
-
.command('add <url>')
|
|
54
|
-
.description('Add a remote node by URL')
|
|
55
|
-
.option('--name <name>', 'Friendly name for the node')
|
|
56
|
-
.option('--json', 'Output as JSON')
|
|
57
|
-
.action(async (url, options) => {
|
|
58
|
-
const spin = spinner(`Adding node at ${url}...`).start();
|
|
59
|
-
try {
|
|
60
|
-
const result = await api.post('/api/nodes', { url, name: options.name });
|
|
61
|
-
spin.stop();
|
|
62
|
-
if (!result.ok) {
|
|
63
|
-
error(result.error || 'Failed to add node');
|
|
64
|
-
process.exit(1);
|
|
65
|
-
}
|
|
66
|
-
if (options.json) {
|
|
67
|
-
console.log(JSON.stringify(result.data, null, 2));
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
const node = result.data.node;
|
|
71
|
-
success(`Node added: ${chalk.cyan(node.name || node.url)}`);
|
|
72
|
-
console.log(chalk.dim(` ID: ${node.id}`));
|
|
73
|
-
if (node.version)
|
|
74
|
-
console.log(chalk.dim(` Version: ${node.version}`));
|
|
75
|
-
}
|
|
76
|
-
catch (err) {
|
|
77
|
-
spin.stop();
|
|
78
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
79
|
-
process.exit(1);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
cmd
|
|
83
|
-
.command('remove <id>')
|
|
84
|
-
.description('Remove a node by ID')
|
|
85
|
-
.option('--yes', 'Skip confirmation')
|
|
86
|
-
.option('--json', 'Output as JSON')
|
|
87
|
-
.action(async (id, options) => {
|
|
88
|
-
if (!options.yes) {
|
|
89
|
-
const { createInterface } = await import('readline');
|
|
90
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
91
|
-
const confirmed = await new Promise((resolve) => {
|
|
92
|
-
rl.question(`Remove node ${id}? (y/N) `, (ans) => { rl.close(); resolve(ans.toLowerCase() === 'y'); });
|
|
93
|
-
});
|
|
94
|
-
if (!confirmed) {
|
|
95
|
-
info('Aborted.');
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
const spin = spinner('Removing node...').start();
|
|
100
|
-
try {
|
|
101
|
-
const result = await api.delete(`/api/nodes/${id}`);
|
|
102
|
-
spin.stop();
|
|
103
|
-
if (!result.ok) {
|
|
104
|
-
error(result.error || 'Failed to remove node');
|
|
105
|
-
process.exit(1);
|
|
106
|
-
}
|
|
107
|
-
if (options.json) {
|
|
108
|
-
console.log(JSON.stringify({ ok: true, id }, null, 2));
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
success(`Node ${id} removed`);
|
|
112
|
-
}
|
|
113
|
-
catch (err) {
|
|
114
|
-
spin.stop();
|
|
115
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
116
|
-
process.exit(1);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
cmd
|
|
120
|
-
.command('sync')
|
|
121
|
-
.description('Sync configuration across all nodes')
|
|
122
|
-
.option('--json', 'Output as JSON')
|
|
123
|
-
.action(async (options) => {
|
|
124
|
-
const spin = spinner('Syncing nodes...').start();
|
|
125
|
-
try {
|
|
126
|
-
const result = await api.post('/api/nodes/sync');
|
|
127
|
-
spin.stop();
|
|
128
|
-
if (!result.ok) {
|
|
129
|
-
error(result.error || 'Sync failed');
|
|
130
|
-
process.exit(1);
|
|
131
|
-
}
|
|
132
|
-
if (options.json) {
|
|
133
|
-
console.log(JSON.stringify(result.data, null, 2));
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
const { synced, failed } = result.data;
|
|
137
|
-
success(`Synced ${synced} node${synced !== 1 ? 's' : ''}`);
|
|
138
|
-
if (failed > 0)
|
|
139
|
-
error(`Failed to sync ${failed} node${failed !== 1 ? 's' : ''}`);
|
|
140
|
-
}
|
|
141
|
-
catch (err) {
|
|
142
|
-
spin.stop();
|
|
143
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
144
|
-
process.exit(1);
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
cmd
|
|
148
|
-
.command('status [id]')
|
|
149
|
-
.description('Show status for all nodes or a specific node')
|
|
150
|
-
.option('--json', 'Output as JSON')
|
|
151
|
-
.action(async (id, options) => {
|
|
152
|
-
const spin = spinner('Checking node status...').start();
|
|
153
|
-
try {
|
|
154
|
-
const path = id ? `/api/nodes/${id}/status` : '/api/nodes/status';
|
|
155
|
-
const result = await api.get(path);
|
|
156
|
-
spin.stop();
|
|
157
|
-
if (!result.ok) {
|
|
158
|
-
error(result.error || 'Failed to check status');
|
|
159
|
-
process.exit(1);
|
|
160
|
-
}
|
|
161
|
-
if (options.json) {
|
|
162
|
-
console.log(JSON.stringify(result.data, null, 2));
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
if (id) {
|
|
166
|
-
const n = result.data;
|
|
167
|
-
console.log(`\n${chalk.bold('Node Status')}`);
|
|
168
|
-
console.log(` ${chalk.dim('ID:')} ${n.id}`);
|
|
169
|
-
console.log(` ${chalk.dim('URL:')} ${n.url}`);
|
|
170
|
-
console.log(` ${chalk.dim('Healthy:')} ${n.healthy ? chalk.green('yes') : chalk.red('no')}`);
|
|
171
|
-
console.log(` ${chalk.dim('Latency:')} ${n.latencyMs != null ? `${n.latencyMs}ms` : '-'}`);
|
|
172
|
-
console.log(` ${chalk.dim('Version:')} ${n.version || '-'}`);
|
|
173
|
-
console.log();
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
const { nodes } = result.data;
|
|
177
|
-
const healthy = nodes.filter((n) => n.healthy).length;
|
|
178
|
-
console.log(`\n${chalk.bold('Node Status')}`);
|
|
179
|
-
console.log(` Total: ${nodes.length}`);
|
|
180
|
-
console.log(` Healthy: ${chalk.green(healthy)}`);
|
|
181
|
-
console.log(` Unhealthy: ${nodes.length - healthy > 0 ? chalk.red(nodes.length - healthy) : chalk.dim('0')}`);
|
|
182
|
-
console.log();
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
catch (err) {
|
|
186
|
-
spin.stop();
|
|
187
|
-
error(err instanceof Error ? err.message : 'Unknown error');
|
|
188
|
-
process.exit(1);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
return cmd;
|
|
192
|
-
}
|
|
193
|
-
//# sourceMappingURL=nodes.js.map
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Span Exporters
|
|
3
|
-
*
|
|
4
|
-
* Pluggable export targets for collected spans.
|
|
5
|
-
* Ready for OTEL collector integration.
|
|
6
|
-
*/
|
|
7
|
-
import type { SpanExporter } from './tracer.js';
|
|
8
|
-
/**
|
|
9
|
-
* Console exporter - writes spans to the structured logger at debug level
|
|
10
|
-
*/
|
|
11
|
-
export declare function createConsoleExporter(): SpanExporter;
|
|
12
|
-
/**
|
|
13
|
-
* File exporter - appends spans as JSONL to a date-stamped file
|
|
14
|
-
*/
|
|
15
|
-
export declare function createFileExporter(outputDir?: string): SpanExporter;
|
|
16
|
-
/**
|
|
17
|
-
* OTLP HTTP exporter - sends spans to an OpenTelemetry collector endpoint.
|
|
18
|
-
* Uses a 5-second abort timeout so export failures do not block the process.
|
|
19
|
-
*/
|
|
20
|
-
export declare function createOTLPExporter(endpoint: string): SpanExporter;
|
|
21
|
-
//# sourceMappingURL=exporters.d.ts.map
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Span Exporters
|
|
3
|
-
*
|
|
4
|
-
* Pluggable export targets for collected spans.
|
|
5
|
-
* Ready for OTEL collector integration.
|
|
6
|
-
*/
|
|
7
|
-
import { writeFile, mkdir } from 'fs/promises';
|
|
8
|
-
import { existsSync } from 'fs';
|
|
9
|
-
import path from 'path';
|
|
10
|
-
import { logger } from '../utils/logger.js';
|
|
11
|
-
/**
|
|
12
|
-
* Console exporter - writes spans to the structured logger at debug level
|
|
13
|
-
*/
|
|
14
|
-
export function createConsoleExporter() {
|
|
15
|
-
return {
|
|
16
|
-
export: async (spans) => {
|
|
17
|
-
for (const span of spans) {
|
|
18
|
-
logger.debug('[Trace]', {
|
|
19
|
-
traceId: span.traceId,
|
|
20
|
-
spanId: span.spanId,
|
|
21
|
-
name: span.name,
|
|
22
|
-
durationMs: span.endTime !== undefined ? span.endTime - span.startTime : undefined,
|
|
23
|
-
status: span.status,
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* File exporter - appends spans as JSONL to a date-stamped file
|
|
31
|
-
*/
|
|
32
|
-
export function createFileExporter(outputDir) {
|
|
33
|
-
const dir = outputDir ?? path.resolve(process.cwd(), 'data', 'traces');
|
|
34
|
-
return {
|
|
35
|
-
export: async (spans) => {
|
|
36
|
-
if (!existsSync(dir)) {
|
|
37
|
-
await mkdir(dir, { recursive: true });
|
|
38
|
-
}
|
|
39
|
-
const date = new Date().toISOString().split('T')[0];
|
|
40
|
-
const filePath = path.join(dir, `traces-${date}.jsonl`);
|
|
41
|
-
const lines = spans.map(s => JSON.stringify(s)).join('\n') + '\n';
|
|
42
|
-
await writeFile(filePath, lines, { flag: 'a' });
|
|
43
|
-
logger.debug('[Trace] Exported to file', { file: filePath, count: spans.length });
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
function toOTLPValue(v) {
|
|
48
|
-
if (typeof v === 'string')
|
|
49
|
-
return { stringValue: v };
|
|
50
|
-
if (typeof v === 'number')
|
|
51
|
-
return { intValue: String(v) };
|
|
52
|
-
return { boolValue: v };
|
|
53
|
-
}
|
|
54
|
-
function spanKindToOTLP(kind) {
|
|
55
|
-
const map = {
|
|
56
|
-
server: 2,
|
|
57
|
-
client: 3,
|
|
58
|
-
producer: 4,
|
|
59
|
-
consumer: 5,
|
|
60
|
-
internal: 1,
|
|
61
|
-
};
|
|
62
|
-
return map[kind] ?? 1;
|
|
63
|
-
}
|
|
64
|
-
function spanStatusToOTLP(status) {
|
|
65
|
-
if (status === 'error')
|
|
66
|
-
return 2;
|
|
67
|
-
if (status === 'ok')
|
|
68
|
-
return 1;
|
|
69
|
-
return 0;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* OTLP HTTP exporter - sends spans to an OpenTelemetry collector endpoint.
|
|
73
|
-
* Uses a 5-second abort timeout so export failures do not block the process.
|
|
74
|
-
*/
|
|
75
|
-
export function createOTLPExporter(endpoint) {
|
|
76
|
-
return {
|
|
77
|
-
export: async (spans) => {
|
|
78
|
-
try {
|
|
79
|
-
const response = await fetch(endpoint, {
|
|
80
|
-
method: 'POST',
|
|
81
|
-
headers: { 'Content-Type': 'application/json' },
|
|
82
|
-
body: JSON.stringify({
|
|
83
|
-
resourceSpans: [
|
|
84
|
-
{
|
|
85
|
-
resource: {
|
|
86
|
-
attributes: [
|
|
87
|
-
{ key: 'service.name', value: { stringValue: 'profclaw' } },
|
|
88
|
-
{ key: 'service.version', value: { stringValue: '2.0.0' } },
|
|
89
|
-
],
|
|
90
|
-
},
|
|
91
|
-
scopeSpans: [
|
|
92
|
-
{
|
|
93
|
-
spans: spans.map(s => ({
|
|
94
|
-
traceId: s.traceId,
|
|
95
|
-
spanId: s.spanId,
|
|
96
|
-
parentSpanId: s.parentSpanId,
|
|
97
|
-
name: s.name,
|
|
98
|
-
kind: spanKindToOTLP(s.kind),
|
|
99
|
-
startTimeUnixNano: BigInt(s.startTime * 1_000_000).toString(),
|
|
100
|
-
endTimeUnixNano: s.endTime !== undefined
|
|
101
|
-
? BigInt(s.endTime * 1_000_000).toString()
|
|
102
|
-
: undefined,
|
|
103
|
-
status: { code: spanStatusToOTLP(s.status) },
|
|
104
|
-
attributes: Object.entries(s.attributes).map(([k, v]) => ({
|
|
105
|
-
key: k,
|
|
106
|
-
value: toOTLPValue(v),
|
|
107
|
-
})),
|
|
108
|
-
events: s.events.map(e => ({
|
|
109
|
-
name: e.name,
|
|
110
|
-
timeUnixNano: BigInt(e.timestamp * 1_000_000).toString(),
|
|
111
|
-
attributes: e.attributes
|
|
112
|
-
? Object.entries(e.attributes).map(([k, v]) => ({
|
|
113
|
-
key: k,
|
|
114
|
-
value: toOTLPValue(v),
|
|
115
|
-
}))
|
|
116
|
-
: [],
|
|
117
|
-
})),
|
|
118
|
-
})),
|
|
119
|
-
},
|
|
120
|
-
],
|
|
121
|
-
},
|
|
122
|
-
],
|
|
123
|
-
}),
|
|
124
|
-
signal: AbortSignal.timeout(5000),
|
|
125
|
-
});
|
|
126
|
-
if (!response.ok) {
|
|
127
|
-
logger.warn('[OTLP] Export failed', { status: response.status });
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
logger.warn('[OTLP] Export error', {
|
|
132
|
-
error: err instanceof Error ? err.message : String(err),
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
//# sourceMappingURL=exporters.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Diagnostics Module
|
|
3
|
-
*
|
|
4
|
-
* Lightweight OpenTelemetry-compatible tracing and metrics.
|
|
5
|
-
*/
|
|
6
|
-
export { startSpan, endSpan, addSpanEvent, setSpanAttribute, trace, recordMetric, incrementCounter, getDiagnostics, getTraceSpans, configureDiagnostics, stopDiagnostics, parseTraceparent, formatTraceparent, } from './tracer.js';
|
|
7
|
-
export type { Span, SpanEvent, SpanKind, SpanStatus, TraceContext, MetricPoint, SpanExporter, DiagnosticsConfig, MetricSummary, DiagnosticsSnapshot, } from './tracer.js';
|
|
8
|
-
export { tracingMiddleware } from './middleware.js';
|
|
9
|
-
export { createConsoleExporter, createFileExporter, createOTLPExporter, } from './exporters.js';
|
|
10
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Diagnostics Module
|
|
3
|
-
*
|
|
4
|
-
* Lightweight OpenTelemetry-compatible tracing and metrics.
|
|
5
|
-
*/
|
|
6
|
-
export { startSpan, endSpan, addSpanEvent, setSpanAttribute, trace, recordMetric, incrementCounter, getDiagnostics, getTraceSpans, configureDiagnostics, stopDiagnostics, parseTraceparent, formatTraceparent, } from './tracer.js';
|
|
7
|
-
export { tracingMiddleware } from './middleware.js';
|
|
8
|
-
export { createConsoleExporter, createFileExporter, createOTLPExporter, } from './exporters.js';
|
|
9
|
-
//# sourceMappingURL=index.js.map
|