a2acalling 0.6.58 → 0.6.60
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 +9 -12
- package/docs/plans/2026-02-18-a2a-41-permissions-tab.md +1273 -0
- package/package.json +1 -1
- package/scripts/install-skills.js +8 -1
- package/src/dashboard/public/app.js +520 -22
- package/src/dashboard/public/index.html +20 -8
- package/src/dashboard/public/style.css +219 -0
- package/src/lib/config.js +5 -15
- package/src/lib/tokens.js +3 -3
- package/src/routes/a2a.js +0 -1
- package/src/routes/dashboard.js +0 -3
- package/.a2a-manifest.json +0 -47
- package/.claude/a2a-skill-reference.md +0 -462
- package/.claude/commands/a2a-call.md +0 -26
- package/.claude/commands/a2a-contacts.md +0 -31
- package/.claude/commands/a2a-invite.md +0 -33
- package/.claude/commands/a2a-setup.md +0 -30
- package/.claude/commands/a2a-status.md +0 -24
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
<sl-tab-group id="main-tabs">
|
|
19
19
|
<sl-tab slot="nav" panel="contacts" active>Contacts</sl-tab>
|
|
20
20
|
<sl-tab slot="nav" panel="calls">Calls</sl-tab>
|
|
21
|
-
<sl-tab slot="nav" panel="
|
|
21
|
+
<sl-tab slot="nav" panel="permissions">Permissions</sl-tab>
|
|
22
22
|
<sl-tab slot="nav" panel="invites">Invites</sl-tab>
|
|
23
23
|
<sl-tab slot="nav" panel="logs">Logs</sl-tab>
|
|
24
24
|
|
|
@@ -64,22 +64,29 @@
|
|
|
64
64
|
<div id="call-detail"></div>
|
|
65
65
|
</sl-tab-panel>
|
|
66
66
|
|
|
67
|
-
<sl-tab-panel name="
|
|
68
|
-
<h2>
|
|
67
|
+
<sl-tab-panel name="permissions">
|
|
68
|
+
<h2>Permission Tiers</h2>
|
|
69
69
|
<div class="row">
|
|
70
70
|
<label for="tier-select">Tier</label>
|
|
71
71
|
<sl-select id="tier-select" size="small" style="min-width:200px;"></sl-select>
|
|
72
72
|
<sl-button id="new-tier-btn" size="small">New Tier</sl-button>
|
|
73
|
+
<sl-button id="preview-caller-btn" size="small" variant="neutral">
👁 Preview as Caller</sl-button>
|
|
73
74
|
</div>
|
|
74
75
|
|
|
76
|
+
<div id="tier-warnings" class="tier-warnings"></div>
|
|
77
|
+
|
|
78
|
+
<sl-checkbox id="show-drag-columns">Show all tiers side-by-side</sl-checkbox>
|
|
79
|
+
<div id="tier-columns" class="tier-columns"></div>
|
|
80
|
+
|
|
75
81
|
<form id="tier-form">
|
|
76
|
-
<sl-input id="tier-id" label="Tier ID" readonly></sl-input>
|
|
77
82
|
<sl-input id="tier-name" label="Name"></sl-input>
|
|
78
83
|
<sl-input id="tier-description" label="Description"></sl-input>
|
|
79
|
-
<
|
|
80
|
-
<
|
|
81
|
-
<
|
|
82
|
-
<
|
|
84
|
+
<label>Allowed Tools</label>
|
|
85
|
+
<div id="tier-tools-list" class="tools-checklist"></div>
|
|
86
|
+
<label>Topics</label>
|
|
87
|
+
<div id="tier-topics-list"></div>
|
|
88
|
+
<label>Goals</label>
|
|
89
|
+
<div id="tier-goals-list"></div>
|
|
83
90
|
<div class="row">
|
|
84
91
|
<sl-button type="submit" variant="primary">Save Tier</sl-button>
|
|
85
92
|
</div>
|
|
@@ -158,6 +165,11 @@
|
|
|
158
165
|
<tbody></tbody>
|
|
159
166
|
</table>
|
|
160
167
|
</sl-card>
|
|
168
|
+
|
|
169
|
+
<sl-dialog id="preview-dialog" label="Caller Preview" style="--width: 540px;">
|
|
170
|
+
<div id="preview-content"></div>
|
|
171
|
+
<sl-button slot="footer" variant="primary" id="preview-close-btn">Close</sl-button>
|
|
172
|
+
</sl-dialog>
|
|
161
173
|
</sl-tab-panel>
|
|
162
174
|
|
|
163
175
|
<sl-tab-panel name="invites">
|
|
@@ -201,8 +201,227 @@ sl-tab-panel::part(base) {
|
|
|
201
201
|
padding: 1rem;
|
|
202
202
|
}
|
|
203
203
|
|
|
204
|
+
/* ── A2A-41: Topic/Goal list rows ──────────────────────────── */
|
|
205
|
+
.topic-row {
|
|
206
|
+
display: flex;
|
|
207
|
+
align-items: flex-start;
|
|
208
|
+
gap: 0.5rem;
|
|
209
|
+
padding: 0.5rem 0.6rem;
|
|
210
|
+
border: 1px solid var(--line);
|
|
211
|
+
border-radius: 6px;
|
|
212
|
+
margin-bottom: 0.4rem;
|
|
213
|
+
background: var(--panel);
|
|
214
|
+
cursor: grab;
|
|
215
|
+
transition: box-shadow 0.15s ease, border-color 0.15s ease;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.topic-row:hover {
|
|
219
|
+
border-color: var(--accent);
|
|
220
|
+
box-shadow: 0 1px 4px rgba(20, 102, 193, 0.1);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.topic-row.dragging {
|
|
224
|
+
opacity: 0.5;
|
|
225
|
+
border-style: dashed;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.topic-row.inherited {
|
|
229
|
+
opacity: 0.55;
|
|
230
|
+
background: #f8fafc;
|
|
231
|
+
cursor: default;
|
|
232
|
+
border-style: dashed;
|
|
233
|
+
border-color: #c5cfd9;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.topic-row.inherited .drag-handle,
|
|
237
|
+
.topic-row.inherited .topic-delete-btn {
|
|
238
|
+
display: none;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.drag-handle {
|
|
242
|
+
color: #9ca8b5;
|
|
243
|
+
cursor: grab;
|
|
244
|
+
user-select: none;
|
|
245
|
+
font-size: 1.1rem;
|
|
246
|
+
line-height: 1;
|
|
247
|
+
padding-top: 2px;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.topic-content {
|
|
251
|
+
flex: 1;
|
|
252
|
+
min-width: 0;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.topic-header {
|
|
256
|
+
display: flex;
|
|
257
|
+
align-items: center;
|
|
258
|
+
gap: 0.4rem;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.topic-label {
|
|
262
|
+
flex: 1;
|
|
263
|
+
font-size: 0.9rem;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.topic-description {
|
|
267
|
+
margin-top: 0.35rem;
|
|
268
|
+
padding-left: 0.1rem;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.topic-desc-text {
|
|
272
|
+
font-size: 0.82rem;
|
|
273
|
+
color: #4b5d73;
|
|
274
|
+
margin: 0 0 0.3rem;
|
|
275
|
+
line-height: 1.4;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.inherited-badge {
|
|
279
|
+
font-size: 0.72rem;
|
|
280
|
+
color: #7a8da0;
|
|
281
|
+
font-style: italic;
|
|
282
|
+
margin-left: auto;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.add-item-btn {
|
|
286
|
+
width: 100%;
|
|
287
|
+
margin-top: 0.3rem;
|
|
288
|
+
border: 1px dashed var(--line);
|
|
289
|
+
border-radius: 6px;
|
|
290
|
+
padding: 0.4rem;
|
|
291
|
+
background: transparent;
|
|
292
|
+
color: #7a8da0;
|
|
293
|
+
cursor: pointer;
|
|
294
|
+
font-size: 0.85rem;
|
|
295
|
+
transition: border-color 0.15s, color 0.15s;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.add-item-btn:hover {
|
|
299
|
+
border-color: var(--accent);
|
|
300
|
+
color: var(--accent);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/* ── A2A-41: Tools checklist ───────────────────────────────── */
|
|
304
|
+
.tools-checklist {
|
|
305
|
+
display: flex;
|
|
306
|
+
flex-direction: column;
|
|
307
|
+
gap: 0.35rem;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.tools-checklist sl-checkbox {
|
|
311
|
+
margin-bottom: 0;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.tools-checklist sl-checkbox::part(label) {
|
|
315
|
+
font-size: 0.88rem;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.tool-desc {
|
|
319
|
+
color: #4b5d73;
|
|
320
|
+
font-weight: normal;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/* ── A2A-41: Three-column tier layout ──────────────────────── */
|
|
324
|
+
.tier-columns {
|
|
325
|
+
display: grid;
|
|
326
|
+
grid-template-columns: 1fr 1fr 1fr;
|
|
327
|
+
gap: 0.8rem;
|
|
328
|
+
margin-bottom: 1.2rem;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.tier-column {
|
|
332
|
+
border: 1px solid var(--line);
|
|
333
|
+
border-radius: 8px;
|
|
334
|
+
padding: 0.6rem;
|
|
335
|
+
background: #fbfdff;
|
|
336
|
+
min-height: 120px;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.tier-column h4 {
|
|
340
|
+
margin: 0 0 0.5rem;
|
|
341
|
+
font-size: 0.9rem;
|
|
342
|
+
color: var(--ink);
|
|
343
|
+
padding-bottom: 0.4rem;
|
|
344
|
+
border-bottom: 1px solid var(--line);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.tier-drop-zone {
|
|
348
|
+
min-height: 60px;
|
|
349
|
+
transition: background 0.15s ease;
|
|
350
|
+
border-radius: 4px;
|
|
351
|
+
padding: 0.2rem;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.tier-drop-zone.drag-over {
|
|
355
|
+
background: rgba(20, 102, 193, 0.06);
|
|
356
|
+
outline: 2px dashed var(--accent);
|
|
357
|
+
outline-offset: -2px;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/* ── A2A-41: Validation warnings ───────────────────────────── */
|
|
361
|
+
.tier-warnings {
|
|
362
|
+
margin-bottom: 0.8rem;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.tier-warning {
|
|
366
|
+
display: flex;
|
|
367
|
+
align-items: center;
|
|
368
|
+
gap: 0.5rem;
|
|
369
|
+
padding: 0.45rem 0.7rem;
|
|
370
|
+
border-radius: 6px;
|
|
371
|
+
font-size: 0.82rem;
|
|
372
|
+
margin-bottom: 0.3rem;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.tier-warning.warn {
|
|
376
|
+
background: #fef3c7;
|
|
377
|
+
border: 1px solid #f59e0b;
|
|
378
|
+
color: #92400e;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
.tier-warning.danger {
|
|
382
|
+
background: #fee2e2;
|
|
383
|
+
border: 1px solid #ef4444;
|
|
384
|
+
color: #991b1b;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
.tier-warning.info {
|
|
388
|
+
background: #dbeafe;
|
|
389
|
+
border: 1px solid #3b82f6;
|
|
390
|
+
color: #1e40af;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/* ── A2A-41: Preview dialog ────────────────────────────────── */
|
|
394
|
+
#preview-content h4 {
|
|
395
|
+
font-size: 0.88rem;
|
|
396
|
+
margin: 0.8rem 0 0.3rem;
|
|
397
|
+
color: var(--ink);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
#preview-content h4:first-child {
|
|
401
|
+
margin-top: 0;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
#preview-content ul {
|
|
405
|
+
margin: 0;
|
|
406
|
+
padding-left: 1.2rem;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
#preview-content li {
|
|
410
|
+
font-size: 0.85rem;
|
|
411
|
+
margin-bottom: 0.25rem;
|
|
412
|
+
line-height: 1.4;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
#preview-content li strong {
|
|
416
|
+
color: var(--ink);
|
|
417
|
+
}
|
|
418
|
+
|
|
204
419
|
@media (max-width: 720px) {
|
|
205
420
|
sl-tab-group::part(nav) {
|
|
206
421
|
overflow-x: auto;
|
|
207
422
|
}
|
|
423
|
+
/* A2A-41: collapse three-column layout to single column on narrow screens */
|
|
424
|
+
.tier-columns {
|
|
425
|
+
grid-template-columns: 1fr;
|
|
426
|
+
}
|
|
208
427
|
}
|
package/src/lib/config.js
CHANGED
|
@@ -106,17 +106,8 @@ function validateTierPatch(tierName, tierConfig) {
|
|
|
106
106
|
out.description = sanitizeString(tierConfig.description, 300);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
throw configValidationError(
|
|
112
|
-
'A2A_CONFIG_INVALID_TIER_DISCLOSURE',
|
|
113
|
-
`Invalid tier disclosure for "${tierName}": expected string`,
|
|
114
|
-
null,
|
|
115
|
-
{ tier: tierName, received_type: typeof tierConfig.disclosure }
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
out.disclosure = sanitizeString(tierConfig.disclosure, 40) || 'minimal';
|
|
119
|
-
}
|
|
109
|
+
// A2A-41: disclosure field intentionally removed. If present in input,
|
|
110
|
+
// it is silently ignored for backward compatibility with older clients.
|
|
120
111
|
|
|
121
112
|
if (tierConfig.capabilities !== undefined) {
|
|
122
113
|
out.capabilities = validateStringArray(tierConfig.capabilities, `${tierName}.capabilities`, {
|
|
@@ -183,6 +174,9 @@ const DEFAULT_CONFIG = {
|
|
|
183
174
|
},
|
|
184
175
|
|
|
185
176
|
// Permission tiers
|
|
177
|
+
// A2A-41: disclosure field removed from tiers. It was intended to control
|
|
178
|
+
// HOW info is shared (freely/minimally/none) but was never consumed by
|
|
179
|
+
// prompt templates. The disclosure SYSTEM (disclosure.js, manifest) remains.
|
|
186
180
|
tiers: {
|
|
187
181
|
public: {
|
|
188
182
|
name: 'Public',
|
|
@@ -191,7 +185,6 @@ const DEFAULT_CONFIG = {
|
|
|
191
185
|
allowed_tools: ['Read', 'Grep', 'Glob'],
|
|
192
186
|
topics: ['chat'],
|
|
193
187
|
goals: [],
|
|
194
|
-
disclosure: 'minimal',
|
|
195
188
|
examples: ['calendar availability', 'public social posts', 'general questions']
|
|
196
189
|
},
|
|
197
190
|
friends: {
|
|
@@ -201,7 +194,6 @@ const DEFAULT_CONFIG = {
|
|
|
201
194
|
allowed_tools: ['Bash(readonly)', 'Read', 'Grep', 'Glob', 'WebSearch', 'WebFetch'],
|
|
202
195
|
topics: ['chat', 'search', 'openclaw', 'a2a'],
|
|
203
196
|
goals: [],
|
|
204
|
-
disclosure: 'public',
|
|
205
197
|
examples: ['email summaries', 'schedule meetings', 'project discussions']
|
|
206
198
|
},
|
|
207
199
|
family: {
|
|
@@ -211,7 +203,6 @@ const DEFAULT_CONFIG = {
|
|
|
211
203
|
allowed_tools: ['Bash', 'Read', 'Grep', 'Glob', 'WebSearch', 'WebFetch'],
|
|
212
204
|
topics: ['chat', 'search', 'openclaw', 'a2a', 'tools', 'memory'],
|
|
213
205
|
goals: [],
|
|
214
|
-
disclosure: 'public',
|
|
215
206
|
examples: ['deep collaboration', 'private project context', 'personal notes']
|
|
216
207
|
},
|
|
217
208
|
custom: {
|
|
@@ -221,7 +212,6 @@ const DEFAULT_CONFIG = {
|
|
|
221
212
|
allowed_tools: ['Read', 'Grep', 'Glob'],
|
|
222
213
|
topics: [],
|
|
223
214
|
goals: [],
|
|
224
|
-
disclosure: 'minimal',
|
|
225
215
|
examples: []
|
|
226
216
|
}
|
|
227
217
|
},
|
package/src/lib/tokens.js
CHANGED
|
@@ -189,12 +189,14 @@ class TokenStore {
|
|
|
189
189
|
* - Timeout: 5-300 seconds (enforced server-side)
|
|
190
190
|
*/
|
|
191
191
|
create(options = {}) {
|
|
192
|
+
// A2A-41: disclosure field removed from tokens. Was never used by
|
|
193
|
+
// prompt generation. Existing tokens with disclosure field are harmless
|
|
194
|
+
// — the field is simply not read.
|
|
192
195
|
const {
|
|
193
196
|
name = 'unnamed',
|
|
194
197
|
owner = null,
|
|
195
198
|
expires = '1d',
|
|
196
199
|
permissions = 'public',
|
|
197
|
-
disclosure = 'minimal',
|
|
198
200
|
notify = 'all',
|
|
199
201
|
maxCalls = 100, // Default limit, not unlimited
|
|
200
202
|
capabilities = null, // Array of capability strings, snapshotted at creation
|
|
@@ -273,7 +275,6 @@ class TokenStore {
|
|
|
273
275
|
allowed_tools: allowedTools || defaultTools[tier] || TokenStore.DEFAULT_ALLOWED_TOOLS.public,
|
|
274
276
|
timeout_ms: parsePositiveTimeoutMs(timeoutMs),
|
|
275
277
|
tier_settings: tierSettings || {}, // Snapshot of settings at creation
|
|
276
|
-
disclosure,
|
|
277
278
|
notify,
|
|
278
279
|
max_calls: maxCalls,
|
|
279
280
|
calls_made: 0,
|
|
@@ -359,7 +360,6 @@ class TokenStore {
|
|
|
359
360
|
allowed_tools: record.allowed_tools || TokenStore.DEFAULT_ALLOWED_TOOLS[tier] || TokenStore.DEFAULT_ALLOWED_TOOLS.public,
|
|
360
361
|
timeout_ms: timeoutMs,
|
|
361
362
|
tier_settings: record.tier_settings || {},
|
|
362
|
-
disclosure: record.disclosure,
|
|
363
363
|
notify: record.notify,
|
|
364
364
|
calls_remaining: record.max_calls ? record.max_calls - record.calls_made : null
|
|
365
365
|
};
|
package/src/routes/a2a.js
CHANGED
|
@@ -350,7 +350,6 @@ function createRoutes(options = {}) {
|
|
|
350
350
|
allowed_goals: validation.allowed_goals,
|
|
351
351
|
allowed_tools: validation.allowed_tools,
|
|
352
352
|
timeout_ms: validation.timeout_ms,
|
|
353
|
-
disclosure: validation.disclosure,
|
|
354
353
|
caller: sanitizedCaller,
|
|
355
354
|
conversation_id: conversation_id || `conv_${Date.now()}_${crypto.randomBytes(6).toString('hex')}`,
|
|
356
355
|
trace_id: traceId,
|
package/src/routes/dashboard.js
CHANGED
|
@@ -1276,7 +1276,6 @@ function createDashboardApiRouter(options = {}) {
|
|
|
1276
1276
|
allowed_tools: sanitizeStringArray(configTier.allowed_tools || [], 30, 80),
|
|
1277
1277
|
topics: sanitizeStringArray(configTier.topics || []),
|
|
1278
1278
|
goals: sanitizeStringArray(configTier.goals || []),
|
|
1279
|
-
disclosure: configTier.disclosure || 'minimal',
|
|
1280
1279
|
examples: sanitizeStringArray(configTier.examples || [], 20, 120),
|
|
1281
1280
|
manifest: {
|
|
1282
1281
|
topics: manifestTier.topics || [],
|
|
@@ -1310,7 +1309,6 @@ function createDashboardApiRouter(options = {}) {
|
|
|
1310
1309
|
const update = {};
|
|
1311
1310
|
if (body.name !== undefined) update.name = sanitizeString(body.name, 120);
|
|
1312
1311
|
if (body.description !== undefined) update.description = sanitizeString(body.description, 300);
|
|
1313
|
-
if (body.disclosure !== undefined) update.disclosure = sanitizeString(body.disclosure, 40) || 'minimal';
|
|
1314
1312
|
if (body.capabilities !== undefined) update.capabilities = sanitizeStringArray(body.capabilities, 100, 120);
|
|
1315
1313
|
if (body.allowed_tools !== undefined) update.allowed_tools = sanitizeStringArray(body.allowed_tools, 30, 80);
|
|
1316
1314
|
if (body.examples !== undefined) update.examples = sanitizeStringArray(body.examples, 20, 120);
|
|
@@ -1375,7 +1373,6 @@ function createDashboardApiRouter(options = {}) {
|
|
|
1375
1373
|
allowed_tools: sanitizeStringArray(body.allowed_tools || [], 30, 80),
|
|
1376
1374
|
topics: sanitizeStringArray(body.topics || []),
|
|
1377
1375
|
goals: sanitizeStringArray(body.goals || []),
|
|
1378
|
-
disclosure: sanitizeString(body.disclosure || 'minimal', 40),
|
|
1379
1376
|
examples: sanitizeStringArray(body.examples || [], 20, 120)
|
|
1380
1377
|
});
|
|
1381
1378
|
} catch (err) {
|
package/.a2a-manifest.json
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": "0.6.57",
|
|
3
|
-
"installed_at": "2026-02-18T08:14:45.764Z",
|
|
4
|
-
"files": [
|
|
5
|
-
{
|
|
6
|
-
"path": "CLAUDE.md",
|
|
7
|
-
"action": "skipped"
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
"path": ".claude/a2a-skill-reference.md",
|
|
11
|
-
"action": "skipped"
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"path": ".claude/commands/a2a-call.md",
|
|
15
|
-
"action": "skipped"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"path": ".claude/commands/a2a-invite.md",
|
|
19
|
-
"action": "skipped"
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"path": ".claude/commands/a2a-contacts.md",
|
|
23
|
-
"action": "skipped"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"path": ".claude/commands/a2a-status.md",
|
|
27
|
-
"action": "skipped"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"path": ".claude/commands/a2a-setup.md",
|
|
31
|
-
"action": "skipped"
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"path": ".codex/AGENTS.md",
|
|
35
|
-
"action": "error",
|
|
36
|
-
"detail": "Source file not found"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"path": ".a2a-manifest.json",
|
|
40
|
-
"action": "created"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"path": ".a2a-install.log",
|
|
44
|
-
"action": "created"
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
}
|