@dharma-ai-labs/agent-fabric 0.2.15 → 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 +8 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +165 -8
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +109 -4
- package/dist/index.test.js.map +1 -1
- package/package.json +5 -5
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
|
@@ -195,6 +195,58 @@ export declare function activateAgyPlugin(input?: {
|
|
|
195
195
|
home?: string;
|
|
196
196
|
execute?: AgyPluginExecutor;
|
|
197
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
|
+
}>;
|
|
198
250
|
export declare function materializeInlineSkillFiles(bundle: SkillBundle, sourceRoot: string): Promise<boolean>;
|
|
199
251
|
export declare function recoverLegacySkillBundleIdAfterAuthorizationFailure(input: {
|
|
200
252
|
nativeSkillDirectory: string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
@@ -16,7 +16,7 @@ import { AgentFabricClient as AgentFabricApiClient } from '@dharma-ai-labs/agent
|
|
|
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.16';
|
|
20
20
|
const USAGE = CLI_USAGE;
|
|
21
21
|
const execFileAsync = promisify(execFile);
|
|
22
22
|
export function parseCliOptions(args) {
|
|
@@ -3014,9 +3014,7 @@ export async function verifyAgentFabricSkillInstallation(input) {
|
|
|
3014
3014
|
}
|
|
3015
3015
|
catch { }
|
|
3016
3016
|
}
|
|
3017
|
-
const activationAttested = input.provider === 'agy' ? false : nativeInstalled;
|
|
3018
3017
|
const bootstrapReady = repositoryInstalled && nativeInstalled && nativeDiscovered;
|
|
3019
|
-
const signedLifecycleReady = bootstrapReady && activationAttested;
|
|
3020
3018
|
let workspaceId;
|
|
3021
3019
|
let organizationAgentId;
|
|
3022
3020
|
try {
|
|
@@ -3031,6 +3029,17 @@ export async function verifyAgentFabricSkillInstallation(input) {
|
|
|
3031
3029
|
const activeBundleId = workspaceId && organizationAgentId && config
|
|
3032
3030
|
? (await activeSkillAuthorization(input.provider, workspaceId, organizationAgentId, config))?.bundleId ?? null
|
|
3033
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);
|
|
3034
3043
|
return {
|
|
3035
3044
|
provider: input.provider,
|
|
3036
3045
|
ready: bootstrapReady,
|
|
@@ -3047,15 +3056,16 @@ export async function verifyAgentFabricSkillInstallation(input) {
|
|
|
3047
3056
|
nativeSkillPath,
|
|
3048
3057
|
workspaceId: workspaceId || null,
|
|
3049
3058
|
activeBundleId,
|
|
3050
|
-
activation: input.provider === 'agy' ? '
|
|
3051
|
-
nextAction: input.provider === 'agy' && bootstrapReady
|
|
3052
|
-
? 'The Agy bootstrap is installed and discoverable.
|
|
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.'
|
|
3053
3062
|
: bootstrapReady
|
|
3054
3063
|
? `Start a new ${input.provider} session from ${workspace} and invoke the dharma-agent-fabric skill.`
|
|
3055
3064
|
: 'Run dharma onboard again from the repository root.',
|
|
3056
3065
|
};
|
|
3057
3066
|
}
|
|
3058
3067
|
export async function activateAgyPlugin(input = {}) {
|
|
3068
|
+
await ensureAgyReadOnlyAttestationPermission({ env: input.env, home: input.home });
|
|
3059
3069
|
const root = resolve(nativeSkillDirectory('agy', input.env, input.home), '..');
|
|
3060
3070
|
const execute = input.execute || ((executable, argv, options) => execFileAsync(executable, argv, options));
|
|
3061
3071
|
const options = { timeout: 30_000, env: providerProcessEnvironment(input.env) };
|
|
@@ -3071,6 +3081,148 @@ export async function activateAgyPlugin(input = {}) {
|
|
|
3071
3081
|
await execute('agy', ['plugin', 'install', root], options);
|
|
3072
3082
|
await execute('agy', ['plugin', 'enable', 'dharma-agent-fabric'], options);
|
|
3073
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
|
+
};
|
|
3225
|
+
}
|
|
3074
3226
|
function containedInlinePath(root, value) {
|
|
3075
3227
|
if (!value || value.includes('\\') || isAbsolute(value))
|
|
3076
3228
|
throw new Error('Inline skill file path is invalid.');
|
|
@@ -3224,6 +3376,13 @@ async function skillSync(flags) {
|
|
|
3224
3376
|
provider,
|
|
3225
3377
|
smokeCommandId: typeof flags.get('smoke-command') === 'string' ? String(flags.get('smoke-command')) : undefined,
|
|
3226
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
|
+
} : {}),
|
|
3227
3386
|
});
|
|
3228
3387
|
const restoreAnchor = async () => {
|
|
3229
3388
|
if (previousAnchor) {
|
|
@@ -3277,8 +3436,6 @@ async function skillSync(flags) {
|
|
|
3277
3436
|
activatedAt: receipt.completedAt,
|
|
3278
3437
|
expiresAt: bundle.expiresAt ?? null,
|
|
3279
3438
|
});
|
|
3280
|
-
if (provider === 'agy')
|
|
3281
|
-
await activateAgyPlugin();
|
|
3282
3439
|
}
|
|
3283
3440
|
}
|
|
3284
3441
|
catch (error) {
|