@dharma-ai-labs/agent-fabric 0.2.14 → 0.2.16

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/README.md CHANGED
@@ -40,6 +40,14 @@ Current provider adapters are Codex, Claude Code, and Agy. Run
40
40
  `dharma providers list` because evidence, task, continuation, Skill installation,
41
41
  activation, and usage capabilities are reported independently.
42
42
 
43
+ Agy 1.1.15 Skill activation uses only its supported plugin and sandboxed print
44
+ interfaces. During onboarding, Dharma adds the narrow read-only
45
+ `command(git status)` preflight to Agy's permission allowlist. It never uses
46
+ `--dangerously-skip-permissions`. A signed remediation Skill contains a
47
+ content-bound activation token; Agy must return that token with a fresh nonce
48
+ before the device signs an active installation receipt. A mismatch restores the
49
+ previous bundle before the receipt is posted.
50
+
43
51
  Signed workspace registration returns the organization-admin-approved evidence
44
52
  policy from Dharma HQ. The CLI applies that server revision to
45
53
  `.dharma/approved-policy.json` automatically. Without an active content grant,
package/dist/index.d.ts CHANGED
@@ -161,11 +161,23 @@ export declare function verifyAgentFabricSkillInstallation(input: {
161
161
  workspace: string;
162
162
  env?: NodeJS.ProcessEnv;
163
163
  home?: string;
164
+ listAgyPlugins?: (executable: string, argv: string[], options: {
165
+ timeout: number;
166
+ env: NodeJS.ProcessEnv;
167
+ }) => Promise<{
168
+ stdout: string | Buffer;
169
+ }>;
164
170
  }): Promise<{
165
171
  provider: ProviderId;
166
172
  ready: boolean;
173
+ verificationScope: string;
174
+ bootstrapReady: boolean;
175
+ signedLifecycleReady: boolean;
167
176
  repositoryInstalled: boolean;
168
177
  nativeInstalled: boolean;
178
+ nativeManaged: boolean;
179
+ nativeDiscovered: boolean;
180
+ activationAttested: boolean;
169
181
  repositorySkillPath: string;
170
182
  connectionPath: string;
171
183
  nativeSkillPath: string;
@@ -176,12 +188,65 @@ export declare function verifyAgentFabricSkillInstallation(input: {
176
188
  }>;
177
189
  type AgyPluginExecutor = (executable: string, argv: string[], options: {
178
190
  timeout: number;
191
+ env: NodeJS.ProcessEnv;
179
192
  }) => Promise<unknown>;
180
193
  export declare function activateAgyPlugin(input?: {
181
194
  env?: NodeJS.ProcessEnv;
182
195
  home?: string;
183
196
  execute?: AgyPluginExecutor;
184
197
  }): Promise<void>;
198
+ export declare function ensureAgyReadOnlyAttestationPermission(input?: {
199
+ env?: NodeJS.ProcessEnv;
200
+ home?: string;
201
+ }): Promise<{
202
+ changed: boolean;
203
+ settingsPath: string;
204
+ permission: string;
205
+ }>;
206
+ type AgyAttestationExecutor = (executable: string, argv: string[], options: {
207
+ timeout: number;
208
+ env: NodeJS.ProcessEnv;
209
+ cwd: string;
210
+ }) => Promise<{
211
+ stdout: string | Buffer;
212
+ }>;
213
+ export declare function attestAgySkillActivation(input: {
214
+ skillId: string;
215
+ skillPath: string;
216
+ workspace: string;
217
+ challenge?: string;
218
+ env?: NodeJS.ProcessEnv;
219
+ execute?: AgyAttestationExecutor;
220
+ }): Promise<{
221
+ name: string;
222
+ status: "unavailable";
223
+ details: string;
224
+ } | {
225
+ name: string;
226
+ status: "fail";
227
+ details: string;
228
+ } | {
229
+ name: string;
230
+ status: "pass";
231
+ details: string;
232
+ }>;
233
+ export declare function attestAgySkillBundleActivation(input: {
234
+ bundle: SkillBundle;
235
+ nativeSkillDirectory: string;
236
+ workspace: string;
237
+ }): Promise<{
238
+ name: string;
239
+ status: "unavailable";
240
+ details: string;
241
+ } | {
242
+ name: string;
243
+ status: "fail";
244
+ details: string;
245
+ } | {
246
+ name: string;
247
+ status: "pass";
248
+ details: string;
249
+ }>;
185
250
  export declare function materializeInlineSkillFiles(bundle: SkillBundle, sourceRoot: string): Promise<boolean>;
186
251
  export declare function recoverLegacySkillBundleIdAfterAuthorizationFailure(input: {
187
252
  nativeSkillDirectory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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, providerExecutionRecords } from '@dharma-ai-labs/agent-fabric-provider-adapters';
13
+ import { agyAdapter, claudeAdapter, codexAdapter, providerAdapters, providerExecutionRecords, providerProcessEnvironment } 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.14';
19
+ const VERSION = '0.2.16';
20
20
  const USAGE = CLI_USAGE;
21
21
  const execFileAsync = promisify(execFile);
22
22
  export function parseCliOptions(args) {
@@ -2932,12 +2932,9 @@ The repository-local skill and connection manifest are authoritative for the act
2932
2932
  await mkdir(skillRoot, { recursive: true, mode: 0o700 });
2933
2933
  await writeFile(resolve(skillRoot, 'SKILL.md'), skill, { mode: 0o600 });
2934
2934
  await writeFile(marker, `${JSON.stringify({
2935
- schema: 'dharma.native-skill-bootstrap/v1',
2935
+ schema: 'dharma.native-skill-bootstrap/v2',
2936
2936
  managedBy: 'dharma-agent-fabric',
2937
2937
  provider: input.provider,
2938
- organizationId: input.organizationId,
2939
- workspaceId: input.workspaceId,
2940
- workspaceRouteHash: sha256(resolve(input.workspace)),
2941
2938
  hqUrl: input.hqUrl,
2942
2939
  installedAt: new Date().toISOString(),
2943
2940
  }, null, 2)}\n`, { mode: 0o600 });
@@ -2947,7 +2944,7 @@ The repository-local skill and connection manifest are authoritative for the act
2947
2944
  provider: input.provider,
2948
2945
  nativeSkillDirectory: root,
2949
2946
  skillPath: resolve(skillRoot, 'SKILL.md'),
2950
- activation: 'next_session',
2947
+ activation: input.provider === 'agy' ? 'manual_invocation_required' : 'next_session',
2951
2948
  verified: await pathExists(resolve(skillRoot, 'SKILL.md')) && await pathExists(marker),
2952
2949
  };
2953
2950
  }
@@ -2956,7 +2953,7 @@ export async function installAvailableNativeAgentFabricBootstraps(input) {
2956
2953
  const installed = [];
2957
2954
  const failures = [];
2958
2955
  for (const capability of input.providers) {
2959
- if (capability.skillInstall !== 'available')
2956
+ if (capability.skillInstall === 'unavailable')
2960
2957
  continue;
2961
2958
  try {
2962
2959
  installed.push(await install({
@@ -2985,7 +2982,39 @@ export async function verifyAgentFabricSkillInstallation(input) {
2985
2982
  const nativeSkillPath = resolve(nativeRoot, 'dharma-agent-fabric', 'SKILL.md');
2986
2983
  const nativeMarkerPath = resolve(nativeRoot, 'dharma-agent-fabric', '.dharma-agent-fabric-bootstrap.json');
2987
2984
  const repositoryInstalled = await pathExists(repositorySkillPath) && await pathExists(connectionPath);
2988
- const nativeInstalled = await pathExists(nativeSkillPath) && await pathExists(nativeMarkerPath);
2985
+ let nativeManaged = false;
2986
+ if (await pathExists(nativeSkillPath) && await pathExists(nativeMarkerPath)) {
2987
+ try {
2988
+ const marker = JSON.parse(await readFile(nativeMarkerPath, 'utf8'));
2989
+ nativeManaged = marker.managedBy === 'dharma-agent-fabric'
2990
+ && marker.provider === input.provider
2991
+ && ['dharma.native-skill-bootstrap/v1', 'dharma.native-skill-bootstrap/v2'].includes(String(marker.schema));
2992
+ }
2993
+ catch { }
2994
+ }
2995
+ const nativeInstalled = nativeManaged;
2996
+ let nativeDiscovered = input.provider === 'agy' ? false : nativeInstalled;
2997
+ if (input.provider === 'agy' && nativeInstalled) {
2998
+ try {
2999
+ const listAgyPlugins = input.listAgyPlugins
3000
+ || ((executable, argv, options) => (execFileAsync(executable, argv, options)));
3001
+ const { stdout } = await listAgyPlugins('agy', ['plugin', 'list'], {
3002
+ timeout: 30_000,
3003
+ env: providerProcessEnvironment(input.env),
3004
+ });
3005
+ const list = JSON.parse(String(stdout));
3006
+ nativeDiscovered = Array.isArray(list.imports) && list.imports.some((item) => {
3007
+ if (!item || typeof item !== 'object')
3008
+ return false;
3009
+ const plugin = item;
3010
+ return plugin.name === 'dharma-agent-fabric'
3011
+ && Array.isArray(plugin.components)
3012
+ && plugin.components.includes('skills');
3013
+ });
3014
+ }
3015
+ catch { }
3016
+ }
3017
+ const bootstrapReady = repositoryInstalled && nativeInstalled && nativeDiscovered;
2989
3018
  let workspaceId;
2990
3019
  let organizationAgentId;
2991
3020
  try {
@@ -3000,25 +3029,46 @@ export async function verifyAgentFabricSkillInstallation(input) {
3000
3029
  const activeBundleId = workspaceId && organizationAgentId && config
3001
3030
  ? (await activeSkillAuthorization(input.provider, workspaceId, organizationAgentId, config))?.bundleId ?? null
3002
3031
  : null;
3032
+ let activationAttested = input.provider !== 'agy' ? nativeInstalled : false;
3033
+ if (input.provider === 'agy' && activeBundleId && workspaceId) {
3034
+ try {
3035
+ const receipt = JSON.parse(await readFile(resolve(nativeRoot, '.dharma-managed', 'workspaces', workspaceId, 'active', 'INSTALL_RECEIPT.json'), 'utf8'));
3036
+ activationAttested = Array.isArray(receipt.checks) && receipt.checks.some((item) => (item && typeof item === 'object'
3037
+ && item.name === 'provider:agy:activation'
3038
+ && item.status === 'pass'));
3039
+ }
3040
+ catch { }
3041
+ }
3042
+ const signedLifecycleReady = bootstrapReady && activationAttested && Boolean(activeBundleId);
3003
3043
  return {
3004
3044
  provider: input.provider,
3005
- ready: repositoryInstalled && nativeInstalled,
3045
+ ready: bootstrapReady,
3046
+ verificationScope: 'generic_bootstrap',
3047
+ bootstrapReady,
3048
+ signedLifecycleReady,
3006
3049
  repositoryInstalled,
3007
3050
  nativeInstalled,
3051
+ nativeManaged,
3052
+ nativeDiscovered,
3053
+ activationAttested,
3008
3054
  repositorySkillPath,
3009
3055
  connectionPath,
3010
3056
  nativeSkillPath,
3011
3057
  workspaceId: workspaceId || null,
3012
3058
  activeBundleId,
3013
- activation: 'next_session',
3014
- nextAction: repositoryInstalled && nativeInstalled
3015
- ? `Start a new ${input.provider} session from ${workspace} and invoke the dharma-agent-fabric skill.`
3016
- : 'Run dharma onboard again from the repository root.',
3059
+ activation: input.provider === 'agy' ? (activationAttested ? 'attested' : 'manual_invocation_required') : 'next_session',
3060
+ nextAction: input.provider === 'agy' && bootstrapReady && !activationAttested
3061
+ ? 'The Agy bootstrap is installed and discoverable. A signed remediation bundle must include and pass the content-bound activation challenge before full lifecycle support is reported.'
3062
+ : bootstrapReady
3063
+ ? `Start a new ${input.provider} session from ${workspace} and invoke the dharma-agent-fabric skill.`
3064
+ : 'Run dharma onboard again from the repository root.',
3017
3065
  };
3018
3066
  }
3019
3067
  export async function activateAgyPlugin(input = {}) {
3068
+ await ensureAgyReadOnlyAttestationPermission({ env: input.env, home: input.home });
3020
3069
  const root = resolve(nativeSkillDirectory('agy', input.env, input.home), '..');
3021
3070
  const execute = input.execute || ((executable, argv, options) => execFileAsync(executable, argv, options));
3071
+ const options = { timeout: 30_000, env: providerProcessEnvironment(input.env) };
3022
3072
  await mkdir(root, { recursive: true, mode: 0o700 });
3023
3073
  const manifest = resolve(root, 'plugin.json');
3024
3074
  try {
@@ -3027,9 +3077,151 @@ export async function activateAgyPlugin(input = {}) {
3027
3077
  catch {
3028
3078
  await writeFile(manifest, `${JSON.stringify({ name: 'dharma-agent-fabric' }, null, 2)}\n`, { mode: 0o600 });
3029
3079
  }
3030
- await execute('agy', ['plugin', 'validate', root], { timeout: 30_000 });
3031
- await execute('agy', ['plugin', 'install', root], { timeout: 30_000 });
3032
- await execute('agy', ['plugin', 'enable', 'dharma-agent-fabric'], { timeout: 30_000 });
3080
+ await execute('agy', ['plugin', 'validate', root], options);
3081
+ await execute('agy', ['plugin', 'install', root], options);
3082
+ await execute('agy', ['plugin', 'enable', 'dharma-agent-fabric'], options);
3083
+ }
3084
+ const AGY_ATTESTATION_PERMISSION = 'command(git status)';
3085
+ const AGY_ACTIVATION_TOKEN = /^Dharma activation token: `(sha256:[a-f0-9]{64})`$/m;
3086
+ export async function ensureAgyReadOnlyAttestationPermission(input = {}) {
3087
+ const configRoot = resolve(input.env?.AGY_CONFIG_DIR || resolve(input.home || homedir(), '.gemini', 'antigravity-cli'));
3088
+ const settingsPath = resolve(configRoot, 'settings.json');
3089
+ await mkdir(configRoot, { recursive: true, mode: 0o700 });
3090
+ let settings = {};
3091
+ if (await pathExists(settingsPath)) {
3092
+ const parsed = JSON.parse(await readFile(settingsPath, 'utf8'));
3093
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
3094
+ throw new Error('Agy settings must be a JSON object before Dharma can add its read-only preflight permission.');
3095
+ }
3096
+ settings = parsed;
3097
+ }
3098
+ const permissions = settings.permissions && typeof settings.permissions === 'object' && !Array.isArray(settings.permissions)
3099
+ ? settings.permissions
3100
+ : {};
3101
+ const current = permissions.allow;
3102
+ if (current !== undefined && (!Array.isArray(current) || current.some((item) => typeof item !== 'string'))) {
3103
+ throw new Error('Agy permissions.allow must be a string array.');
3104
+ }
3105
+ const allow = [...new Set([...(Array.isArray(current) ? current : []), AGY_ATTESTATION_PERMISSION])];
3106
+ if (Array.isArray(current) && current.length === allow.length) {
3107
+ return { changed: false, settingsPath, permission: AGY_ATTESTATION_PERMISSION };
3108
+ }
3109
+ const updated = { ...settings, permissions: { ...permissions, allow } };
3110
+ const temporary = resolve(configRoot, `.settings.${randomUUID()}.tmp`);
3111
+ await writeFile(temporary, `${JSON.stringify(updated, null, 2)}\n`, { mode: 0o600 });
3112
+ await rename(temporary, settingsPath);
3113
+ return { changed: true, settingsPath, permission: AGY_ATTESTATION_PERMISSION };
3114
+ }
3115
+ function parseAgyStructuredResponse(stdout) {
3116
+ try {
3117
+ const outer = JSON.parse(String(stdout));
3118
+ if (outer.status !== 'SUCCESS' || typeof outer.response !== 'string')
3119
+ return null;
3120
+ const match = outer.response.match(/\{[\s\S]*\}/);
3121
+ if (!match)
3122
+ return null;
3123
+ const value = JSON.parse(match[0]);
3124
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : null;
3125
+ }
3126
+ catch {
3127
+ return null;
3128
+ }
3129
+ }
3130
+ export async function attestAgySkillActivation(input) {
3131
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(input.skillId)) {
3132
+ throw new Error('Agy activation skill identifier is invalid.');
3133
+ }
3134
+ const skill = await readFile(input.skillPath, 'utf8');
3135
+ const token = skill.match(AGY_ACTIVATION_TOKEN)?.[1];
3136
+ if (!token) {
3137
+ return {
3138
+ name: 'provider:agy:activation',
3139
+ status: 'unavailable',
3140
+ details: `Signed skill ${input.skillId} does not contain a Dharma activation token.`,
3141
+ };
3142
+ }
3143
+ const challenge = input.challenge || randomUUID();
3144
+ if (!/^[A-Za-z0-9_-]{8,128}$/.test(challenge))
3145
+ throw new Error('Agy activation challenge is invalid.');
3146
+ const schema = JSON.stringify({
3147
+ type: 'object',
3148
+ additionalProperties: false,
3149
+ required: ['challenge', 'activationToken'],
3150
+ properties: {
3151
+ challenge: { type: 'string' },
3152
+ activationToken: { type: 'string' },
3153
+ },
3154
+ });
3155
+ const prompt = `/${input.skillId}\nDharma activation attestation. Do not use tools or inspect files. Return only JSON with fields challenge and activationToken. Challenge: ${challenge}`;
3156
+ const execute = input.execute || ((executable, argv, options) => execFileAsync(executable, argv, options));
3157
+ let stdout;
3158
+ try {
3159
+ ({ stdout } = await execute('agy', [
3160
+ '--new-project',
3161
+ '--print', prompt,
3162
+ '--output-format', 'json',
3163
+ '--json-schema', schema,
3164
+ '--model', input.env?.DHARMA_AGY_ATTEST_MODEL || 'gemini-3.7-flash-low',
3165
+ '--mode', 'plan',
3166
+ '--sandbox',
3167
+ '--print-timeout', '90s',
3168
+ ], {
3169
+ timeout: 120_000,
3170
+ env: providerProcessEnvironment(input.env),
3171
+ cwd: await realpath(input.workspace),
3172
+ }));
3173
+ }
3174
+ catch (error) {
3175
+ return {
3176
+ name: 'provider:agy:activation',
3177
+ status: 'fail',
3178
+ details: error instanceof Error ? `Agy activation process failed: ${error.message}`.slice(0, 1_000) : 'Agy activation process failed.',
3179
+ };
3180
+ }
3181
+ const response = parseAgyStructuredResponse(stdout);
3182
+ if (!response || response.challenge !== challenge) {
3183
+ return {
3184
+ name: 'provider:agy:activation',
3185
+ status: 'fail',
3186
+ details: 'Agy did not return the fresh activation challenge.',
3187
+ };
3188
+ }
3189
+ if (response.activationToken !== token) {
3190
+ return {
3191
+ name: 'provider:agy:activation',
3192
+ status: 'fail',
3193
+ details: 'Agy returned an activation token that does not match the installed signed skill.',
3194
+ };
3195
+ }
3196
+ return {
3197
+ name: 'provider:agy:activation',
3198
+ status: 'pass',
3199
+ details: `Agy expanded ${input.skillId} and returned a fresh content-bound challenge.`,
3200
+ };
3201
+ }
3202
+ export async function attestAgySkillBundleActivation(input) {
3203
+ if (input.bundle.skills.length === 0) {
3204
+ return {
3205
+ name: 'provider:agy:activation',
3206
+ status: 'unavailable',
3207
+ details: 'The signed bundle contains no Agy skill content to attest.',
3208
+ };
3209
+ }
3210
+ await activateAgyPlugin();
3211
+ for (const skill of input.bundle.skills) {
3212
+ const check = await attestAgySkillActivation({
3213
+ skillId: skill.skillId,
3214
+ skillPath: resolve(input.nativeSkillDirectory, skill.skillId, 'SKILL.md'),
3215
+ workspace: input.workspace,
3216
+ });
3217
+ if (check.status !== 'pass')
3218
+ return check;
3219
+ }
3220
+ return {
3221
+ name: 'provider:agy:activation',
3222
+ status: 'pass',
3223
+ details: `Agy expanded ${input.bundle.skills.length} signed skill${input.bundle.skills.length === 1 ? '' : 's'} with fresh content-bound challenges.`,
3224
+ };
3033
3225
  }
3034
3226
  function containedInlinePath(root, value) {
3035
3227
  if (!value || value.includes('\\') || isAbsolute(value))
@@ -3184,6 +3376,13 @@ async function skillSync(flags) {
3184
3376
  provider,
3185
3377
  smokeCommandId: typeof flags.get('smoke-command') === 'string' ? String(flags.get('smoke-command')) : undefined,
3186
3378
  organizationApprovalId: typeof flags.get('approval-id') === 'string' ? String(flags.get('approval-id')) : undefined,
3379
+ ...(provider === 'agy' ? {
3380
+ providerActivationCheck: () => attestAgySkillBundleActivation({
3381
+ bundle,
3382
+ nativeSkillDirectory: destination,
3383
+ workspace: workspace.path,
3384
+ }),
3385
+ } : {}),
3187
3386
  });
3188
3387
  const restoreAnchor = async () => {
3189
3388
  if (previousAnchor) {
@@ -3237,8 +3436,6 @@ async function skillSync(flags) {
3237
3436
  activatedAt: receipt.completedAt,
3238
3437
  expiresAt: bundle.expiresAt ?? null,
3239
3438
  });
3240
- if (provider === 'agy')
3241
- await activateAgyPlugin();
3242
3439
  }
3243
3440
  }
3244
3441
  catch (error) {