@pixelbyte-software/pixcode 1.33.10 → 1.34.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/dist/api-docs.html +395 -395
- package/dist/assets/{index-B_dU5AHA.js → index-BvClqlMf.js} +134 -134
- package/dist/favicon.svg +8 -8
- package/dist/icons/icon-128x128.svg +9 -9
- package/dist/icons/icon-144x144.svg +9 -9
- package/dist/icons/icon-152x152.svg +9 -9
- package/dist/icons/icon-192x192.svg +9 -9
- package/dist/icons/icon-384x384.svg +9 -9
- package/dist/icons/icon-512x512.svg +9 -9
- package/dist/icons/icon-72x72.svg +9 -9
- package/dist/icons/icon-96x96.svg +9 -9
- package/dist/icons/icon-template.svg +9 -9
- package/dist/index.html +1 -1
- package/dist/logo.svg +12 -12
- package/dist/openapi.yaml +1311 -1311
- package/dist-server/server/index.js +4 -0
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/modules/orchestration/a2a/adapter-registry.js +47 -0
- package/dist-server/server/modules/orchestration/a2a/adapter-registry.js.map +1 -0
- package/dist-server/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.js +17 -0
- package/dist-server/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.js.map +1 -0
- package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js +233 -0
- package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js.map +1 -0
- package/dist-server/server/modules/orchestration/a2a/agent-card.js +50 -0
- package/dist-server/server/modules/orchestration/a2a/agent-card.js.map +1 -0
- package/dist-server/server/modules/orchestration/a2a/auth.middleware.js +25 -0
- package/dist-server/server/modules/orchestration/a2a/auth.middleware.js.map +1 -0
- package/dist-server/server/modules/orchestration/a2a/bus.js +34 -0
- package/dist-server/server/modules/orchestration/a2a/bus.js.map +1 -0
- package/dist-server/server/modules/orchestration/a2a/routes.js +233 -0
- package/dist-server/server/modules/orchestration/a2a/routes.js.map +1 -0
- package/dist-server/server/modules/orchestration/a2a/types.js +6 -0
- package/dist-server/server/modules/orchestration/a2a/types.js.map +1 -0
- package/dist-server/server/modules/orchestration/a2a/validator.js +85 -0
- package/dist-server/server/modules/orchestration/a2a/validator.js.map +1 -0
- package/dist-server/server/modules/orchestration/index.js +10 -0
- package/dist-server/server/modules/orchestration/index.js.map +1 -0
- package/dist-server/server/opencode-cli.js +4 -1
- package/dist-server/server/opencode-cli.js.map +1 -1
- package/package.json +178 -178
- package/scripts/smoke/a2a-roundtrip.mjs +98 -0
- package/server/database/db.js +794 -794
- package/server/database/json-store.js +194 -194
- package/server/index.js +9 -0
- package/server/modules/orchestration/a2a/adapter-registry.ts +58 -0
- package/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.ts +49 -0
- package/server/modules/orchestration/a2a/adapters/claude-code.adapter.ts +283 -0
- package/server/modules/orchestration/a2a/agent-card.ts +55 -0
- package/server/modules/orchestration/a2a/auth.middleware.ts +29 -0
- package/server/modules/orchestration/a2a/bus.ts +46 -0
- package/server/modules/orchestration/a2a/routes.ts +264 -0
- package/server/modules/orchestration/a2a/types.ts +111 -0
- package/server/modules/orchestration/a2a/validator.ts +90 -0
- package/server/modules/orchestration/index.ts +26 -0
- package/server/modules/providers/list/opencode/opencode-auth.provider.ts +130 -130
- package/server/modules/providers/list/opencode/opencode-mcp.provider.ts +126 -126
- package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +232 -232
- package/server/modules/providers/list/opencode/opencode.provider.ts +29 -29
- package/server/modules/providers/list/qwen/qwen-auth.provider.ts +145 -145
- package/server/modules/providers/list/qwen/qwen-mcp.provider.ts +114 -114
- package/server/modules/providers/list/qwen/qwen-sessions.provider.ts +265 -265
- package/server/modules/providers/list/qwen/qwen.provider.ts +21 -21
- package/server/modules/providers/shared/provider-configs.ts +142 -142
- package/server/opencode-cli.js +4 -1
- package/server/opencode-response-handler.js +107 -107
- package/server/qwen-code-cli.js +395 -395
- package/server/qwen-response-handler.js +73 -73
- package/server/routes/qwen.js +27 -27
- package/server/services/external-access.js +171 -171
- package/server/services/provider-credentials.js +189 -189
- package/server/services/provider-models.js +381 -381
- package/server/services/telegram/telegram-http-client.js +130 -130
- package/server/services/vapid-keys.js +36 -36
- package/server/utils/port-access.js +209 -209
- package/scripts/rest-sweep.mjs +0 -93
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// scripts/smoke/a2a-roundtrip.mjs
|
|
2
|
+
// End-to-end smoke check for the A2A foundation.
|
|
3
|
+
//
|
|
4
|
+
// Usage: node scripts/smoke/a2a-roundtrip.mjs [baseUrl]
|
|
5
|
+
// Default: http://127.0.0.1:3001
|
|
6
|
+
//
|
|
7
|
+
// Pre-reqs:
|
|
8
|
+
// - pixcode server running (npm run server:dev-watch)
|
|
9
|
+
// - ANTHROPIC_API_KEY (or pixcode auth) configured for Claude Code
|
|
10
|
+
//
|
|
11
|
+
// What it does:
|
|
12
|
+
// 1. GET /a2a/.well-known/agent-card.json - sanity check
|
|
13
|
+
// 2. GET /a2a/agents - confirms claude-code is registered
|
|
14
|
+
// 3. POST /a2a/tasks - submits a tiny task
|
|
15
|
+
// 4. Streams /a2a/tasks/:id/stream - prints events until terminal state
|
|
16
|
+
//
|
|
17
|
+
// Pass/fail:
|
|
18
|
+
// Exits 0 on terminal state "completed". Non-zero otherwise.
|
|
19
|
+
|
|
20
|
+
const baseUrl = process.argv[2] ?? 'http://127.0.0.1:3001';
|
|
21
|
+
|
|
22
|
+
async function jget(path) {
|
|
23
|
+
const r = await fetch(`${baseUrl}${path}`);
|
|
24
|
+
if (!r.ok) throw new Error(`GET ${path} -> ${r.status}`);
|
|
25
|
+
return r.json();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async function main() {
|
|
29
|
+
console.log('1) /a2a/.well-known/agent-card.json');
|
|
30
|
+
const card = await jget('/a2a/.well-known/agent-card.json');
|
|
31
|
+
console.log(' name=', card.name, 'version=', card.version);
|
|
32
|
+
if (card.name !== 'pixcode') throw new Error('AgentCard.name != "pixcode"');
|
|
33
|
+
|
|
34
|
+
console.log('2) /a2a/agents');
|
|
35
|
+
const agents = await jget('/a2a/agents');
|
|
36
|
+
const ids = agents.agents.map((a) => a.name);
|
|
37
|
+
console.log(' registered:', ids.join(', '));
|
|
38
|
+
if (!ids.includes('pixcode-claude-code')) {
|
|
39
|
+
throw new Error('claude-code adapter not registered');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
console.log('3) POST /a2a/tasks');
|
|
43
|
+
const submitRes = await fetch(`${baseUrl}/a2a/tasks`, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: { 'content-type': 'application/json' },
|
|
46
|
+
body: JSON.stringify({
|
|
47
|
+
adapterId: 'claude-code',
|
|
48
|
+
message: {
|
|
49
|
+
messageId: 'm_smoke_1',
|
|
50
|
+
role: 'user',
|
|
51
|
+
parts: [{ kind: 'text', text: 'Reply with the single word: ok' }],
|
|
52
|
+
},
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
if (!submitRes.ok) throw new Error(`submit -> ${submitRes.status}`);
|
|
56
|
+
const task = await submitRes.json();
|
|
57
|
+
console.log(' task.id=', task.id, 'state=', task.state);
|
|
58
|
+
|
|
59
|
+
console.log('4) GET /a2a/tasks/:id/stream (SSE)');
|
|
60
|
+
const streamRes = await fetch(`${baseUrl}/a2a/tasks/${task.id}/stream`);
|
|
61
|
+
if (!streamRes.ok) throw new Error(`stream -> ${streamRes.status}`);
|
|
62
|
+
|
|
63
|
+
const reader = streamRes.body.getReader();
|
|
64
|
+
const dec = new TextDecoder();
|
|
65
|
+
let buffer = '';
|
|
66
|
+
let terminalState = null;
|
|
67
|
+
|
|
68
|
+
while (true) {
|
|
69
|
+
const { done, value } = await reader.read();
|
|
70
|
+
if (done) break;
|
|
71
|
+
buffer += dec.decode(value, { stream: true });
|
|
72
|
+
|
|
73
|
+
let idx;
|
|
74
|
+
while ((idx = buffer.indexOf('\n\n')) !== -1) {
|
|
75
|
+
const frame = buffer.slice(0, idx);
|
|
76
|
+
buffer = buffer.slice(idx + 2);
|
|
77
|
+
const dataLine = frame.split('\n').find((l) => l.startsWith('data: '));
|
|
78
|
+
if (!dataLine) continue;
|
|
79
|
+
const event = JSON.parse(dataLine.slice('data: '.length));
|
|
80
|
+
console.log(' event:', event.kind ?? 'snapshot', '->', event);
|
|
81
|
+
if (event.kind === 'task-state') {
|
|
82
|
+
terminalState = event.state;
|
|
83
|
+
if (['completed', 'canceled', 'failed'].includes(terminalState)) break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (terminalState && ['completed', 'canceled', 'failed'].includes(terminalState)) break;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
console.log('terminal state:', terminalState);
|
|
90
|
+
if (terminalState !== 'completed') {
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
main().catch((err) => {
|
|
96
|
+
console.error('SMOKE FAILED:', err);
|
|
97
|
+
process.exit(2);
|
|
98
|
+
});
|