@dharma-ai-labs/agent-fabric 0.2.11 → 0.2.13
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/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +139 -24
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +112 -2
- package/dist/index.test.js.map +1 -1
- package/dist/usage.d.ts +1 -1
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +1 -1
- package/dist/usage.js.map +1 -1
- package/package.json +6 -6
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { type ProviderCapability, type ProviderId, type TrustedServerSigningKeys
|
|
|
3
3
|
import { type TrajectoryCapsule } from '@dharma-ai-labs/agent-fabric-evidence-reduction';
|
|
4
4
|
import { type OrganizationPolicy } from '@dharma-ai-labs/agent-fabric-policy';
|
|
5
5
|
import { type ProviderSession } from '@dharma-ai-labs/agent-fabric-provider-adapters';
|
|
6
|
-
import { type SecureSecretStore } from '@dharma-ai-labs/agent-fabric-relay-client';
|
|
6
|
+
import { AgentFabricClient, type SecureSecretStore } from '@dharma-ai-labs/agent-fabric-relay-client';
|
|
7
7
|
import { type SkillBundle } from '@dharma-ai-labs/agent-fabric-skill-manager';
|
|
8
8
|
import { type TaskEnvelope, type TaskReceipt } from '@dharma-ai-labs/agent-fabric-task-runner';
|
|
9
9
|
type Output = unknown;
|
|
@@ -57,6 +57,16 @@ export declare function assertTaskSkillPin(pinned: TaskEnvelope['skillBundle'],
|
|
|
57
57
|
} | null): void;
|
|
58
58
|
export declare function taskSkillPinFailureCode(error: unknown): string;
|
|
59
59
|
export declare function requireExplicitConfirmation(flags: Map<string, string | boolean>, action: string): void;
|
|
60
|
+
export type ControlAgentCliClient = Pick<AgentFabricClient, 'listControlAgentSessions' | 'createControlAgentSession' | 'submitControlAgentMessage' | 'listControlAgentEvents'>;
|
|
61
|
+
type ControlAgentCliClientFactory = () => Promise<ControlAgentCliClient>;
|
|
62
|
+
export declare function controlAgentDecisionUrl(input: {
|
|
63
|
+
portalOrigin: string;
|
|
64
|
+
organizationId: string;
|
|
65
|
+
toolCallId: string;
|
|
66
|
+
decision: 'approve' | 'reject';
|
|
67
|
+
sessionId?: string;
|
|
68
|
+
}): string;
|
|
69
|
+
export declare function runAssistantCommand(subcommand: string | undefined, flags: Map<string, string | boolean>, openClient?: ControlAgentCliClientFactory, openUrl?: (url: string) => Promise<boolean>): Promise<Record<string, unknown>>;
|
|
60
70
|
export declare function parseSelectedProviderIds(values: Array<string | boolean>): ProviderId[] | null;
|
|
61
71
|
export declare function actionDecisionCapabilityFreshUntil(keyset: TrustedServerSigningKeyset, trustedKeyVersions: string[], now?: Date): string;
|
|
62
72
|
export declare function receiptAwareProviderCapabilities(providers: ProviderCapability[], now?: Date): Promise<ProviderCapability[]>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AASA,OAAO,EAGL,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,KAAK,0BAA0B,EAC1E,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAA2G,KAAK,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAClM,OAAO,EAAsE,KAAK,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAClJ,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,13 +10,13 @@ import { promisify } from 'node:util';
|
|
|
10
10
|
import { canonicalize, createActionDecisionPublicKeyResolver, sha256, validateContract, validateTrustedServerSigningKeysetContract, verifyCanonicalObject, verifyInitialServerSigningKeyset, } from '@dharma-ai-labs/agent-fabric-contracts';
|
|
11
11
|
import { buildTrajectoryCapsule, redactValue, referencesExcludedPath, trajectoryCapsuleHash } from '@dharma-ai-labs/agent-fabric-evidence-reduction';
|
|
12
12
|
import { assertPolicy, loadOrganizationPolicy, verifyServerAuthorizedPolicy } from '@dharma-ai-labs/agent-fabric-policy';
|
|
13
|
-
import { agyAdapter, claudeAdapter, codexAdapter, providerAdapters } from '@dharma-ai-labs/agent-fabric-provider-adapters';
|
|
13
|
+
import { agyAdapter, claudeAdapter, codexAdapter, providerAdapters, providerExecutionRecords } from '@dharma-ai-labs/agent-fabric-provider-adapters';
|
|
14
14
|
import { AgentFabricClient, beginEnrollment, loadOrCreateDeviceIdentity, normalizeHqUrl, pollEnrollment, deleteActiveSkillAuthorizationAnchor, loadActiveSkillAuthorizationAnchor, loadDeviceEnrollmentAnchor, saveActiveSkillAuthorizationAnchor, isDefinitiveAgentFabricRejection, recoverDeviceEnrollmentConsistency, saveDeviceConfig, saveDeviceEnrollmentAnchor, } from '@dharma-ai-labs/agent-fabric-relay-client';
|
|
15
15
|
import { AgentFabricClient as AgentFabricApiClient } from '@dharma-ai-labs/agent-fabric-sdk';
|
|
16
16
|
import { getActiveSkillBundleAuthorization, getExpiredSkillBundleAuthorizationForReplacement, getLegacySkillBundleIdForUpgrade, installSkillBundle, rollbackUnconfirmedSkillBundle, verifySkillBundle } from '@dharma-ai-labs/agent-fabric-skill-manager';
|
|
17
17
|
import { executeTask, FileActionExecutionJournal, FileTaskReceiptStore, providerInstructionsForTask, } from '@dharma-ai-labs/agent-fabric-task-runner';
|
|
18
18
|
import { CLI_USAGE } from './usage.js';
|
|
19
|
-
const VERSION = '0.2.
|
|
19
|
+
const VERSION = '0.2.13';
|
|
20
20
|
const USAGE = CLI_USAGE;
|
|
21
21
|
const execFileAsync = promisify(execFile);
|
|
22
22
|
export function parseCliOptions(args) {
|
|
@@ -1234,6 +1234,98 @@ async function openVerificationUri(url) {
|
|
|
1234
1234
|
}
|
|
1235
1235
|
return false;
|
|
1236
1236
|
}
|
|
1237
|
+
function validatedControlAgentId(value, label) {
|
|
1238
|
+
if (!UUID_PATTERN.test(value))
|
|
1239
|
+
throw new Error(`${label} must be a UUID.`);
|
|
1240
|
+
return value;
|
|
1241
|
+
}
|
|
1242
|
+
function controlAgentSessionId(response) {
|
|
1243
|
+
const session = response.session && typeof response.session === 'object' && !Array.isArray(response.session)
|
|
1244
|
+
? response.session
|
|
1245
|
+
: null;
|
|
1246
|
+
const id = typeof session?.id === 'string' ? session.id : '';
|
|
1247
|
+
return validatedControlAgentId(id, 'Created control-agent session ID');
|
|
1248
|
+
}
|
|
1249
|
+
export function controlAgentDecisionUrl(input) {
|
|
1250
|
+
const url = new URL('/portal/dashboard', normalizeHqUrl(input.portalOrigin));
|
|
1251
|
+
url.searchParams.set('orgId', input.organizationId);
|
|
1252
|
+
url.searchParams.set('controlAgent', 'open');
|
|
1253
|
+
url.searchParams.set('toolCallId', validatedControlAgentId(input.toolCallId, 'Control-agent tool call ID'));
|
|
1254
|
+
url.searchParams.set('decision', input.decision);
|
|
1255
|
+
if (input.sessionId) {
|
|
1256
|
+
url.searchParams.set('sessionId', validatedControlAgentId(input.sessionId, 'Control-agent session ID'));
|
|
1257
|
+
}
|
|
1258
|
+
return url.toString();
|
|
1259
|
+
}
|
|
1260
|
+
export async function runAssistantCommand(subcommand, flags, openClient = client, openUrl = openVerificationUri) {
|
|
1261
|
+
if (!['chat', 'history', 'status', 'approve', 'reject'].includes(String(subcommand))) {
|
|
1262
|
+
throw new Error('Assistant command must be chat, history, status, approve, or reject.');
|
|
1263
|
+
}
|
|
1264
|
+
if (subcommand === 'approve' || subcommand === 'reject') {
|
|
1265
|
+
const config = await readDeviceConfig();
|
|
1266
|
+
if (!config)
|
|
1267
|
+
throw new Error('Assistant approval requires an enrolled device. Run dharma login first.');
|
|
1268
|
+
const toolCallId = required(flags, 'tool-call-id');
|
|
1269
|
+
const sessionId = typeof flags.get('session-id') === 'string' ? String(flags.get('session-id')) : undefined;
|
|
1270
|
+
const url = controlAgentDecisionUrl({
|
|
1271
|
+
portalOrigin: portalUrl(flags, config.hqUrl),
|
|
1272
|
+
organizationId: config.organizationId,
|
|
1273
|
+
toolCallId,
|
|
1274
|
+
decision: subcommand,
|
|
1275
|
+
...(sessionId ? { sessionId } : {}),
|
|
1276
|
+
});
|
|
1277
|
+
const opened = flags.has('no-open') ? false : await openUrl(url);
|
|
1278
|
+
return {
|
|
1279
|
+
ok: true,
|
|
1280
|
+
decision: subcommand,
|
|
1281
|
+
approvalPerformed: false,
|
|
1282
|
+
opened,
|
|
1283
|
+
url,
|
|
1284
|
+
nextStep: 'Review the exact tool authority and confirm or reject it in the authenticated Dharma portal.',
|
|
1285
|
+
};
|
|
1286
|
+
}
|
|
1287
|
+
const fabric = await openClient();
|
|
1288
|
+
if (subcommand === 'history') {
|
|
1289
|
+
const sessionId = typeof flags.get('session-id') === 'string'
|
|
1290
|
+
? validatedControlAgentId(String(flags.get('session-id')), 'Control-agent session ID')
|
|
1291
|
+
: null;
|
|
1292
|
+
if (!sessionId)
|
|
1293
|
+
return fabric.listControlAgentSessions();
|
|
1294
|
+
const afterSequence = Number(flags.get('after-sequence') || 0);
|
|
1295
|
+
if (!Number.isSafeInteger(afterSequence) || afterSequence < 0) {
|
|
1296
|
+
throw new Error('--after-sequence must be a non-negative integer.');
|
|
1297
|
+
}
|
|
1298
|
+
return fabric.listControlAgentEvents(sessionId, afterSequence);
|
|
1299
|
+
}
|
|
1300
|
+
if (subcommand === 'status') {
|
|
1301
|
+
const sessionId = validatedControlAgentId(required(flags, 'session-id'), 'Control-agent session ID');
|
|
1302
|
+
const [session, events] = await Promise.all([
|
|
1303
|
+
fabric.listControlAgentSessions(sessionId),
|
|
1304
|
+
fabric.listControlAgentEvents(sessionId, 0),
|
|
1305
|
+
]);
|
|
1306
|
+
return { ok: true, sessionId, session, events };
|
|
1307
|
+
}
|
|
1308
|
+
requireExplicitConfirmation(flags, 'Sending a paid organization control-agent message');
|
|
1309
|
+
const suppliedBody = flags.has('json-body') || flags.has('body-file')
|
|
1310
|
+
? await commandJsonBody(flags)
|
|
1311
|
+
: { message: required(flags, 'message') };
|
|
1312
|
+
const message = typeof suppliedBody.message === 'string' ? suppliedBody.message.trim() : '';
|
|
1313
|
+
if (!message)
|
|
1314
|
+
throw new Error('Assistant chat requires a non-empty message.');
|
|
1315
|
+
const sessionIdFlag = typeof flags.get('session-id') === 'string'
|
|
1316
|
+
? validatedControlAgentId(String(flags.get('session-id')), 'Control-agent session ID')
|
|
1317
|
+
: null;
|
|
1318
|
+
const created = sessionIdFlag ? null : await fabric.createControlAgentSession(String(flags.get('title') || 'CLI conversation'));
|
|
1319
|
+
const sessionId = sessionIdFlag || controlAgentSessionId(created);
|
|
1320
|
+
const accepted = await fabric.submitControlAgentMessage(sessionId, suppliedBody);
|
|
1321
|
+
return {
|
|
1322
|
+
ok: true,
|
|
1323
|
+
sessionId,
|
|
1324
|
+
sessionCreated: Boolean(created),
|
|
1325
|
+
accepted,
|
|
1326
|
+
statusCommand: `dharma assistant status --session-id ${sessionId}`,
|
|
1327
|
+
};
|
|
1328
|
+
}
|
|
1237
1329
|
async function login(flags) {
|
|
1238
1330
|
let pending;
|
|
1239
1331
|
if (flags.has('resume')) {
|
|
@@ -2368,28 +2460,49 @@ export function taskReceiptSession(task, receipt, workspace) {
|
|
|
2368
2460
|
coverage: 'observed',
|
|
2369
2461
|
startedAt: receipt.startedAt,
|
|
2370
2462
|
endedAt: receipt.completedAt,
|
|
2371
|
-
records: [
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2463
|
+
records: [instructionRecord, ...receipt.commandResults.flatMap((result, index) => {
|
|
2464
|
+
if (result.commandId.startsWith('provider.')) {
|
|
2465
|
+
return providerExecutionRecords({
|
|
2466
|
+
provider: task.target.provider,
|
|
2467
|
+
stdout: result.stdout,
|
|
2468
|
+
workspace,
|
|
2469
|
+
startedAt: receipt.startedAt,
|
|
2470
|
+
endedAt: receipt.completedAt,
|
|
2471
|
+
}).map((record, recordIndex) => ({
|
|
2472
|
+
...record,
|
|
2473
|
+
line: (index + 2) * 1_000_000 + recordIndex,
|
|
2474
|
+
native: {
|
|
2475
|
+
...record.native,
|
|
2476
|
+
taskId: task.taskId,
|
|
2477
|
+
commandId: result.commandId,
|
|
2478
|
+
exitCode: result.exitCode,
|
|
2479
|
+
signal: result.signal,
|
|
2480
|
+
timedOut: result.timedOut,
|
|
2481
|
+
stdoutSha256: result.stdoutSha256,
|
|
2482
|
+
stderrSha256: result.stderrSha256,
|
|
2483
|
+
},
|
|
2484
|
+
}));
|
|
2485
|
+
}
|
|
2486
|
+
return [{
|
|
2487
|
+
native: {
|
|
2488
|
+
taskId: task.taskId,
|
|
2489
|
+
commandId: result.commandId,
|
|
2490
|
+
exitCode: result.exitCode,
|
|
2491
|
+
signal: result.signal,
|
|
2492
|
+
timedOut: result.timedOut,
|
|
2493
|
+
stdout: result.stdout,
|
|
2494
|
+
stderr: result.stderr,
|
|
2495
|
+
stdoutSha256: result.stdoutSha256,
|
|
2496
|
+
stderrSha256: result.stderrSha256,
|
|
2497
|
+
},
|
|
2498
|
+
sourcePath: 'dharma-task-receipt',
|
|
2499
|
+
line: index + 2,
|
|
2500
|
+
workspace,
|
|
2501
|
+
timestamp: receipt.completedAt,
|
|
2502
|
+
kind: 'validation',
|
|
2503
|
+
coverage: 'observed',
|
|
2504
|
+
}];
|
|
2505
|
+
})],
|
|
2393
2506
|
};
|
|
2394
2507
|
}
|
|
2395
2508
|
function prepareSignedTaskTrajectory(input) {
|
|
@@ -3278,6 +3391,8 @@ export async function run(argv) {
|
|
|
3278
3391
|
return status;
|
|
3279
3392
|
}
|
|
3280
3393
|
}
|
|
3394
|
+
if (command === 'assistant')
|
|
3395
|
+
return runAssistantCommand(subcommand, flags);
|
|
3281
3396
|
if ([
|
|
3282
3397
|
'organization', 'agents', 'experiments', 'failures', 'remediations', 'handoffs', 'usage',
|
|
3283
3398
|
].includes(String(command)) || (['tasks', 'skills'].includes(String(command))
|