a2acalling 0.6.48 ā 0.6.50
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/bin/cli.js +79 -2
- package/docs/plans/2026-02-16-auto-updater.md +1284 -0
- package/docs/plans/2026-02-16-e2e-test-prompt-sequence.md +3085 -0
- package/docs/plans/2026-02-17-claude-code-codex-skills.md +770 -0
- package/docs/prompts/e2e-test-agent.md +368 -0
- package/docs/protocol.md +121 -0
- package/package.json +1 -1
- package/scripts/install-skills.js +80 -0
- package/scripts/postinstall.js +12 -0
- package/src/dashboard/public/app.js +108 -1
- package/src/dashboard/public/index.html +9 -0
- package/src/dashboard/public/style.css +27 -0
- package/src/lib/claude-subagent.js +6 -5
- package/src/lib/config.js +42 -0
- package/src/lib/conversation-driver.js +74 -24
- package/src/lib/openclaw-integration.js +22 -66
- package/src/lib/runtime-adapter.js +8 -3
- package/src/lib/summary-formatter.js +168 -0
- package/src/lib/summary-prompt.js +203 -0
- package/src/lib/tokens.js +13 -1
- package/src/lib/turn-timeout.js +52 -0
- package/src/lib/update-checker.js +93 -0
- package/src/lib/update-manager.js +313 -0
- package/src/routes/a2a.js +9 -1
- package/src/routes/dashboard.js +103 -1
- package/src/server.js +130 -26
package/bin/cli.js
CHANGED
|
@@ -37,7 +37,8 @@ const ONBOARDING_EXEMPT = new Set([
|
|
|
37
37
|
'dashboard',
|
|
38
38
|
'server',
|
|
39
39
|
'setup',
|
|
40
|
-
'install'
|
|
40
|
+
'install',
|
|
41
|
+
'skills'
|
|
41
42
|
]);
|
|
42
43
|
|
|
43
44
|
function isOnboarded() {
|
|
@@ -710,6 +711,8 @@ const commands = {
|
|
|
710
711
|
|
|
711
712
|
// Get objectives from disclosure
|
|
712
713
|
const objectives = tierTopics.objectives || [];
|
|
714
|
+
const timeoutMsRaw = args.flags['timeout-ms'] || args.flags.timeout_ms;
|
|
715
|
+
const timeoutMs = timeoutMsRaw ? Number.parseInt(String(timeoutMsRaw), 10) : null;
|
|
713
716
|
|
|
714
717
|
const { token, record } = store.create({
|
|
715
718
|
name: args.flags.name || args.flags.n || 'unnamed',
|
|
@@ -720,7 +723,8 @@ const commands = {
|
|
|
720
723
|
notify: args.flags.notify || 'all',
|
|
721
724
|
maxCalls,
|
|
722
725
|
allowedTopics,
|
|
723
|
-
allowedGoals: objectives.map(o => o.objective || o)
|
|
726
|
+
allowedGoals: objectives.map(o => o.objective || o),
|
|
727
|
+
timeoutMs
|
|
724
728
|
});
|
|
725
729
|
|
|
726
730
|
const resolvedHost = await resolveInviteHostname();
|
|
@@ -759,6 +763,7 @@ const commands = {
|
|
|
759
763
|
console.log(`Disclosure: ${record.disclosure}`);
|
|
760
764
|
console.log(`Notify: ${record.notify}`);
|
|
761
765
|
console.log(`Max calls: ${record.max_calls || 'unlimited'}`);
|
|
766
|
+
if (record.timeout_ms) console.log(`Turn timeout: ${record.timeout_ms}ms`);
|
|
762
767
|
if (linkContact) console.log(`Linked to: ${linkContact}`);
|
|
763
768
|
console.log(`\nTo revoke: a2a revoke ${record.id}`);
|
|
764
769
|
console.log(`\n${'ā'.repeat(50)}`);
|
|
@@ -1355,11 +1360,15 @@ a2a add "${inviteUrl}" "${ownerText || 'friend'}" && a2a call "${ownerText || 'f
|
|
|
1355
1360
|
|
|
1356
1361
|
// Build owner context from config for summarizer
|
|
1357
1362
|
let ownerContext = {};
|
|
1363
|
+
let configTurnTimeoutMs = null;
|
|
1358
1364
|
try {
|
|
1359
1365
|
const { A2AConfig } = require('../src/lib/config');
|
|
1360
1366
|
const config = new A2AConfig();
|
|
1361
1367
|
const configAll = config.getAll();
|
|
1362
1368
|
const tierGoals = configAll.tiers?.public?.goals || [];
|
|
1369
|
+
configTurnTimeoutMs = configAll.defaults?.turnTimeoutMs
|
|
1370
|
+
|| configAll.defaults?.turn_timeout_ms
|
|
1371
|
+
|| null;
|
|
1363
1372
|
ownerContext = {
|
|
1364
1373
|
goals: tierGoals,
|
|
1365
1374
|
agentName: agentContext.name,
|
|
@@ -1378,6 +1387,7 @@ a2a add "${inviteUrl}" "${ownerText || 'friend'}" && a2a call "${ownerText || 'f
|
|
|
1378
1387
|
disclosure,
|
|
1379
1388
|
minTurns,
|
|
1380
1389
|
maxTurns,
|
|
1390
|
+
configTurnTimeoutMs,
|
|
1381
1391
|
ownerContext,
|
|
1382
1392
|
onTurn: (info) => {
|
|
1383
1393
|
const preview = info.messagePreview.length >= 80
|
|
@@ -2491,8 +2501,30 @@ a2a add "${inviteUrl}" "${ownerText || 'friend'}" && a2a call "${ownerText || 'f
|
|
|
2491
2501
|
const { execSync } = require('child_process');
|
|
2492
2502
|
const path = require('path');
|
|
2493
2503
|
const pkg = require('../package.json');
|
|
2504
|
+
const { A2AConfig } = require('../src/lib/config');
|
|
2494
2505
|
const currentVersion = pkg.version;
|
|
2495
2506
|
const checkOnly = args.flags.check || args.flags.c;
|
|
2507
|
+
const autoMode = args.flags.auto ? String(args.flags.auto).trim().toLowerCase() : null;
|
|
2508
|
+
|
|
2509
|
+
if (autoMode) {
|
|
2510
|
+
const config = new A2AConfig();
|
|
2511
|
+
if (autoMode === 'status') {
|
|
2512
|
+
const au = config.getAutoUpdate ? config.getAutoUpdate() : { enabled: true, intervalMs: 3600000, allowMajor: false };
|
|
2513
|
+
console.log('Auto-update configuration:\n');
|
|
2514
|
+
console.log(` Enabled: ${au.enabled ? 'yes' : 'no'}`);
|
|
2515
|
+
console.log(` Interval: ${Math.floor((au.intervalMs || 3600000) / 1000)}s`);
|
|
2516
|
+
console.log(` Allow major updates: ${au.allowMajor ? 'yes' : 'no'}`);
|
|
2517
|
+
console.log(` Last known good version: ${au.lastGoodVersion || '(none)'}`);
|
|
2518
|
+
return;
|
|
2519
|
+
}
|
|
2520
|
+
if (autoMode === 'on' || autoMode === 'off') {
|
|
2521
|
+
config.setAutoUpdate({ enabled: autoMode === 'on' });
|
|
2522
|
+
console.log(`Auto-update ${autoMode === 'on' ? 'enabled' : 'disabled'}.`);
|
|
2523
|
+
return;
|
|
2524
|
+
}
|
|
2525
|
+
console.error('Invalid --auto value. Use: on | off | status');
|
|
2526
|
+
process.exit(1);
|
|
2527
|
+
}
|
|
2496
2528
|
|
|
2497
2529
|
console.log(`\nš¦ A2A Update\n${'ā'.repeat(50)}\n`);
|
|
2498
2530
|
console.log(` Installed: v${currentVersion}`);
|
|
@@ -2603,6 +2635,46 @@ a2a add "${inviteUrl}" "${ownerText || 'friend'}" && a2a call "${ownerText || 'f
|
|
|
2603
2635
|
return commands.quickstart(args);
|
|
2604
2636
|
},
|
|
2605
2637
|
|
|
2638
|
+
skills: (args) => {
|
|
2639
|
+
const { installSkills, SKILL_FILES } = require('../scripts/install-skills');
|
|
2640
|
+
const check = args.flags.check || args.flags.c;
|
|
2641
|
+
const force = args.flags.force;
|
|
2642
|
+
const targetDir = process.cwd();
|
|
2643
|
+
|
|
2644
|
+
if (check) {
|
|
2645
|
+
console.log('A2A skills for this project:\n');
|
|
2646
|
+
for (const file of SKILL_FILES) {
|
|
2647
|
+
const destPath = path.join(targetDir, file.dest);
|
|
2648
|
+
const exists = fs.existsSync(destPath);
|
|
2649
|
+
const icon = exists ? ' \u2713' : ' \u2717';
|
|
2650
|
+
console.log(`${icon} ${file.dest}${exists ? ' (installed)' : ' (not installed)'}`);
|
|
2651
|
+
}
|
|
2652
|
+
console.log(`\nRun "a2a skills" to install missing files.`);
|
|
2653
|
+
return;
|
|
2654
|
+
}
|
|
2655
|
+
|
|
2656
|
+
const result = installSkills(targetDir, { force });
|
|
2657
|
+
|
|
2658
|
+
if (result.installed.length) {
|
|
2659
|
+
console.log(`\n Installed ${result.installed.length} A2A skill file(s):\n`);
|
|
2660
|
+
result.installed.forEach(f => console.log(` + ${f}`));
|
|
2661
|
+
}
|
|
2662
|
+
if (result.skipped.length) {
|
|
2663
|
+
console.log(`\n Skipped ${result.skipped.length} unchanged file(s)`);
|
|
2664
|
+
}
|
|
2665
|
+
if (result.errors.length) {
|
|
2666
|
+
console.error(`\n Errors:`);
|
|
2667
|
+
result.errors.forEach(e => console.error(` ! ${e.file}: ${e.error}`));
|
|
2668
|
+
}
|
|
2669
|
+
|
|
2670
|
+
if (result.installed.length === 0 && result.skipped.length > 0) {
|
|
2671
|
+
console.log('\n All skills already installed. Use --force to overwrite.\n');
|
|
2672
|
+
} else if (result.installed.length > 0) {
|
|
2673
|
+
console.log('\n Skills ready. In Claude Code, type /a2a- to see available commands.');
|
|
2674
|
+
console.log(' In Codex CLI, A2A instructions are in .codex/AGENTS.md\n');
|
|
2675
|
+
}
|
|
2676
|
+
},
|
|
2677
|
+
|
|
2606
2678
|
version: () => {
|
|
2607
2679
|
const pkg = require('../package.json');
|
|
2608
2680
|
console.log(pkg.version);
|
|
@@ -2623,6 +2695,7 @@ Commands:
|
|
|
2623
2695
|
--disclosure, -d Disclosure level (public, minimal, none)
|
|
2624
2696
|
--notify Owner notification (all, summary, none)
|
|
2625
2697
|
--max-calls Maximum invocations (default: 100)
|
|
2698
|
+
--timeout-ms Per-token Claude turn timeout in milliseconds
|
|
2626
2699
|
--link, -l Auto-link to contact name
|
|
2627
2700
|
|
|
2628
2701
|
list List active tokens
|
|
@@ -2681,12 +2754,16 @@ Server:
|
|
|
2681
2754
|
|
|
2682
2755
|
update Update A2A to latest version (npm or git pull)
|
|
2683
2756
|
--check, -c Check for updates without installing
|
|
2757
|
+
--auto Manage auto-update: on|off|status
|
|
2684
2758
|
|
|
2685
2759
|
install Install A2A for OpenClaw
|
|
2686
2760
|
setup Auto setup (gateway-aware dashboard install)
|
|
2687
2761
|
uninstall Stop server and remove local config/DB
|
|
2688
2762
|
--keep-config Preserve config/DB (for reinstall)
|
|
2689
2763
|
--force Skip confirmation prompt
|
|
2764
|
+
skills Install Claude Code + Codex CLI skills
|
|
2765
|
+
--check, -c Show what would be installed
|
|
2766
|
+
--force Overwrite existing files
|
|
2690
2767
|
version Show installed package version
|
|
2691
2768
|
|
|
2692
2769
|
Examples:
|