@dharma-ai-labs/agent-fabric 0.2.31 → 0.2.33
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 +31 -2
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +101 -4
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +28 -1
- 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 +2 -2
package/README.md
CHANGED
|
@@ -6,9 +6,38 @@ discovers provider capabilities, keeps full trajectories in an encrypted local
|
|
|
6
6
|
vault, syncs policy-qualified evidence, executes bounded signed tasks, and
|
|
7
7
|
installs signed Skill releases with receipts and rollback ancestry.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Autonomous organization setup
|
|
10
10
|
|
|
11
|
-
Requires Node.js 22.20
|
|
11
|
+
Requires Node.js 22.20.0 through 24.x.
|
|
12
|
+
|
|
13
|
+
An organization administrator can create a one-time setup from **Portal → Agent
|
|
14
|
+
Fabric → Instructions**. Paste the complete copied runbook into a coding agent
|
|
15
|
+
while its working directory is the intended source repository. The runbook uses:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
dharma bootstrap \
|
|
19
|
+
--portal-url https://www.dharma-ai.io \
|
|
20
|
+
--organization-id <organization-id> \
|
|
21
|
+
--grant <single-use-grant> \
|
|
22
|
+
--workspace . \
|
|
23
|
+
--policy-revision <dashboard-policy-revision>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`bootstrap` does not open a browser. It redeems the short-lived grant into an
|
|
27
|
+
Ed25519 device identity and a revocable, device-scoped organization API token,
|
|
28
|
+
stores both in the operating-system credential store, connects only the current
|
|
29
|
+
repository, obtains its signed policy, and installs supported native skills.
|
|
30
|
+
The grant is usable only until its displayed expiry and is never stored by HQ
|
|
31
|
+
in plaintext. Device revocation also revokes the linked organization token.
|
|
32
|
+
|
|
33
|
+
Use the separate teammate action in the Instructions tab to send a Clerk
|
|
34
|
+
organization invitation and copy a distinct one-time setup for that teammate.
|
|
35
|
+
The agent connection can complete before the teammate accepts portal access.
|
|
36
|
+
|
|
37
|
+
## Manual enrollment
|
|
38
|
+
|
|
39
|
+
Manual browser-confirmed enrollment remains available when no one-time grant is
|
|
40
|
+
issued:
|
|
12
41
|
|
|
13
42
|
```bash
|
|
14
43
|
npm install --global @dharma-ai-labs/agent-fabric
|
package/dist/index.d.ts
CHANGED
|
@@ -56,6 +56,11 @@ export declare function assertTaskSkillPin(pinned: TaskEnvelope['skillBundle'],
|
|
|
56
56
|
bundleHash: string;
|
|
57
57
|
} | null): void;
|
|
58
58
|
export declare function taskSkillPinFailureCode(error: unknown): string;
|
|
59
|
+
export declare function isTransientBootstrapError(error: unknown): boolean;
|
|
60
|
+
export declare function retryBootstrapOnboarding<T>(operation: () => Promise<T>, options?: {
|
|
61
|
+
delaysMs?: readonly number[];
|
|
62
|
+
wait?: (delayMs: number) => Promise<void>;
|
|
63
|
+
}): Promise<T>;
|
|
59
64
|
export declare function requireExplicitConfirmation(flags: Map<string, string | boolean>, action: string): void;
|
|
60
65
|
export type ControlAgentCliClient = Pick<AgentFabricClient, 'listControlAgentSessions' | 'createControlAgentSession' | 'submitControlAgentMessage' | 'listControlAgentEvents'>;
|
|
61
66
|
type ControlAgentCliClientFactory = () => Promise<ControlAgentCliClient>;
|
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,EAAkI,KAAK,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACtN,OAAO,EACL,iBAAiB,
|
|
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,EAAkI,KAAK,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACtN,OAAO,EACL,iBAAiB,EAI4B,KAAK,iBAAiB,EACpE,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAgM,KAAK,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAC5Q,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,0CAA0C,CAAC;AAOlD,KAAK,MAAM,GAAG,OAAO,CAAC;AAsBtB,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAC/C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IACrC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAChD,CAuBA;AAQD,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,QAAQ,SAA6B,GAAG,MAAM,CAE7G;AAoBD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAO1F;AA6DD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAU,oBASnD;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,mBAEzD;AA2BD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,MAAM,CAM3F;AAiFD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAKtE;AAWD,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,kBAAkB,QAkLlH;AAoHD,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,iBAAiB,iBAOxF;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,iBAAiB,iBAmBzF;AAED,wBAAsB,iBAAiB,CAAC,IAAI,SAAe,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAgBvG;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;;;;GAoFA;AAgBD,wBAAsB,8BAA8B,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOpH;AAED,wBAAsB,gCAAgC,CAAC,CAAC,EACtD,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAUZ;AAiED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,OAAO,EACd,sBAAsB,EAAE,MAAM,EAC9B,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,GAAG,OAAa,GACf,kBAAkB,CAsFpB;AAkBD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA4BhE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAC/F,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,cAAc,CAAC;CACnC,CAiBA;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmBnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW;;;;;SAqBvD;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC,EACnC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACtD,IAAI,CAaN;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM9D;AA2DD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMjE;AAED,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC,GACL,OAAO,CAAC,CAAC,CAAC,CAYZ;AA6FD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,QAI/F;AA2GD,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,EACxD,0BAA0B,GACxB,2BAA2B,GAC3B,2BAA2B,GAC3B,wBAAwB,CAC3B,CAAC;AAEF,KAAK,4BAA4B,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAezE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,UAUA;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACpC,UAAU,GAAE,4BAAqC,EACjD,OAAO,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAuB,GAC/D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqElC;AAudD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,IAAI,CAW7F;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,0BAA0B,EAClC,kBAAkB,EAAE,MAAM,EAAE,EAC5B,GAAG,OAAa,GACf,MAAM,CASR;AAQD,wBAAsB,gCAAgC,CACpD,SAAS,EAAE,kBAAkB,EAAE,EAC/B,GAAG,OAAa,GACf,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA2C/B;AA0OD,wBAAsB,iCAAiC,CAAC,KAAK,EAAE;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;;;;GAiFA;AA6UD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAmE/G;AAqGD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,GAAG,qBAAqB,CAAC,CAAC;CAC5E,GAAG,IAAI,CASP;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,EACpD,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,GAClD,OAAO,CAET;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,aAAa,CAAC,CAAC;IAC3D,SAAS,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,GAAG,qBAAqB,CAAC,CAAC;CAC5E,GAAG,IAAI,CAQP;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC;IACtD,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IACpD,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/H,GAAG,OAAO,CAAC,OAAO,CAAC,CAUnB;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC;IACtD,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,uBAAuB,CAAC,CAAC;IAC/D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9H,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrH,oBAGA;AA2SD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,UAAU,EACpB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,IAAI,SAAY,UAMjB;AAED,KAAK,mBAAmB,GAAG,CACzB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,KAC9D,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,CAAC;AAE3C,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;;;GASA;AAED,wBAAsB,iCAAiC,CAAC,KAAK,EAAE;IAC7D,QAAQ,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;;;;;;GAgDA;AAED,KAAK,yBAAyB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAC5E,KAAK,wBAAwB,GAAG,OAAO,iCAAiC,CAAC;AAEzE,wBAAsB,2CAA2C,CAAC,KAAK,EAAE;IACvE,SAAS,EAAE,yBAAyB,EAAE,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACpC;;;;;;;;;kBAGmC,MAAM;cAAQ,6BAA6B;iBAAW,MAAM;;GAoB/F;AAED,wBAAsB,kCAAkC,CAAC,KAAK,EAAE;IAC9D,QAAQ,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,CACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;KAAE,KACjD,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;CACxC;;;;;;;;;;;;;;;;;;GA+GA;AAED,wBAAsB,iCAAiC,CAAC,KAAK,EAAE;IAC7D,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;;;;;;;;;;;;GA2DA;AAED,KAAK,iBAAiB,GAAG,CACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KACjD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,wBAAsB,iBAAiB,CAAC,KAAK,GAAE;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,iBAAiB,CAAC;CACxB,iBAYL;AAKD,wBAAsB,sCAAsC,CAAC,KAAK,GAAE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACV;;;;GA8BL;AAED,KAAK,sBAAsB,GAAG,CAC5B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,KAC9D,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,CAAC;AAe1C,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC;;;;;;;;;;;;GAqEA;AAED,wBAAsB,8BAA8B,CAAC,KAAK,EAAE;IAC1D,MAAM,EAAE,WAAW,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;;;;;;;;;;;;GAsBA;AAcD,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBA+BxF;AAED,wBAAsB,mDAAmD,CAAC,KAAK,EAAE;IAC/E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlB;AAED,wBAAsB,sDAAsD,CAAC,KAAK,EAAE;IAClF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CAElB;AAkPD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+FzD"}
|
package/dist/index.js
CHANGED
|
@@ -11,12 +11,12 @@ import { canonicalize, createActionDecisionPublicKeyResolver, sha256, validateCo
|
|
|
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
13
|
import { agyAdapter, claudeAdapter, codexAdapter, hermesAdapter, providerAdapters, providerExecutionRecords, providerProcessEnvironment } from '@dharma-ai-labs/agent-fabric-provider-adapters';
|
|
14
|
-
import { AgentFabricClient, beginEnrollment, loadOrCreateDeviceIdentity, normalizeHqUrl, pollEnrollment, deleteActiveSkillAuthorizationAnchor, loadActiveSkillAuthorizationAnchor, loadDeviceEnrollmentAnchor, saveActiveSkillAuthorizationAnchor, isDefinitiveAgentFabricRejection, recoverDeviceEnrollmentConsistency, saveDeviceConfig, saveDeviceEnrollmentAnchor, } from '@dharma-ai-labs/agent-fabric-relay-client';
|
|
14
|
+
import { AgentFabricClient, beginEnrollment, loadOrCreateDeviceIdentity, normalizeHqUrl, pollEnrollment, deleteActiveSkillAuthorizationAnchor, loadActiveSkillAuthorizationAnchor, loadDeviceEnrollmentAnchor, saveActiveSkillAuthorizationAnchor, isDefinitiveAgentFabricRejection, recoverDeviceEnrollmentConsistency, loadOrganizationApiToken, redeemBootstrapGrant, saveDeviceConfig, saveDeviceEnrollmentAnchor, saveOrganizationApiToken, } 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.33';
|
|
20
20
|
const USAGE = CLI_USAGE;
|
|
21
21
|
const execFileAsync = promisify(execFile);
|
|
22
22
|
const LOCAL_PROVIDER_IDS = ['codex', 'claude', 'agy', 'hermes'];
|
|
@@ -1095,15 +1095,110 @@ async function organizationApi(flags) {
|
|
|
1095
1095
|
const organizationId = String(flags.get('organization-id') || enrolled?.organizationId || '').trim();
|
|
1096
1096
|
if (!organizationId)
|
|
1097
1097
|
throw new Error('Organization command requires --organization-id or an enrolled device.');
|
|
1098
|
-
const token = String(process.env.DHARMA_ORG_API_TOKEN || '').trim()
|
|
1098
|
+
const token = String(process.env.DHARMA_ORG_API_TOKEN || '').trim()
|
|
1099
|
+
|| await loadOrganizationApiToken({
|
|
1100
|
+
hqUrl: enrolled?.hqUrl || portalUrl(flags),
|
|
1101
|
+
organizationId,
|
|
1102
|
+
}) || '';
|
|
1099
1103
|
if (!token)
|
|
1100
|
-
throw new Error('Organization command requires DHARMA_ORG_API_TOKEN. Tokens are not accepted on the command line.');
|
|
1104
|
+
throw new Error('Organization command requires a token in the OS credential store or DHARMA_ORG_API_TOKEN. Tokens are not accepted on the command line.');
|
|
1101
1105
|
return new AgentFabricApiClient({
|
|
1102
1106
|
organizationId,
|
|
1103
1107
|
token,
|
|
1104
1108
|
baseUrl: portalUrl(flags, enrolled?.hqUrl || 'https://www.dharma-ai.io'),
|
|
1105
1109
|
});
|
|
1106
1110
|
}
|
|
1111
|
+
const BOOTSTRAP_ONBOARD_RETRY_DELAYS_MS = [250, 750, 1_500, 3_000];
|
|
1112
|
+
export function isTransientBootstrapError(error) {
|
|
1113
|
+
const candidate = error;
|
|
1114
|
+
const code = String(candidate?.code || candidate?.cause?.code || '').toUpperCase();
|
|
1115
|
+
if (['ECONNRESET', 'ECONNREFUSED', 'ETIMEDOUT', 'EAI_AGAIN', 'UND_ERR_CONNECT_TIMEOUT'].includes(code))
|
|
1116
|
+
return true;
|
|
1117
|
+
const message = String(candidate?.message || error || '');
|
|
1118
|
+
return /(?:ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|socket hang up|fetch failed|network error|relay request was rejected|\b50[234]\b)/i.test(message);
|
|
1119
|
+
}
|
|
1120
|
+
export async function retryBootstrapOnboarding(operation, options = {}) {
|
|
1121
|
+
const delaysMs = options.delaysMs || BOOTSTRAP_ONBOARD_RETRY_DELAYS_MS;
|
|
1122
|
+
const wait = options.wait || ((delayMs) => new Promise((resolveWait) => setTimeout(resolveWait, delayMs)));
|
|
1123
|
+
for (let attempt = 0;; attempt += 1) {
|
|
1124
|
+
try {
|
|
1125
|
+
return await operation();
|
|
1126
|
+
}
|
|
1127
|
+
catch (error) {
|
|
1128
|
+
const delayMs = delaysMs[attempt];
|
|
1129
|
+
if (!isTransientBootstrapError(error) || delayMs === undefined)
|
|
1130
|
+
throw error;
|
|
1131
|
+
await wait(delayMs);
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
async function bootstrap(flags) {
|
|
1136
|
+
const hqUrl = normalizeHqUrl(portalUrl(flags));
|
|
1137
|
+
const organizationId = required(flags, 'organization-id');
|
|
1138
|
+
const bootstrapToken = required(flags, 'grant');
|
|
1139
|
+
const workspace = await realpath(String(flags.get('workspace') || '.'));
|
|
1140
|
+
const policyRevision = required(flags, 'policy-revision');
|
|
1141
|
+
const existing = await readDeviceConfig();
|
|
1142
|
+
if (existing && (existing.organizationId !== organizationId || existing.hqUrl !== hqUrl)) {
|
|
1143
|
+
throw new Error('This DHARMA_HOME is enrolled to another organization or portal. Use a separate DHARMA_HOME.');
|
|
1144
|
+
}
|
|
1145
|
+
const name = String(flags.get('device-name') || `${process.env.USER || process.env.USERNAME || 'developer'} device`);
|
|
1146
|
+
const devicePlatform = await platform();
|
|
1147
|
+
const identity = await loadOrCreateDeviceIdentity({ hqUrl, organizationId });
|
|
1148
|
+
const redeemed = await redeemBootstrapGrant({
|
|
1149
|
+
hqUrl,
|
|
1150
|
+
organizationId,
|
|
1151
|
+
bootstrapToken,
|
|
1152
|
+
name,
|
|
1153
|
+
platform: devicePlatform,
|
|
1154
|
+
publicKeyEd25519: identity.publicKeyEd25519,
|
|
1155
|
+
});
|
|
1156
|
+
const config = existing || {
|
|
1157
|
+
schema: 'dharma.device-config/v1',
|
|
1158
|
+
hqUrl,
|
|
1159
|
+
organizationId,
|
|
1160
|
+
deviceId: redeemed.deviceId,
|
|
1161
|
+
deviceName: name,
|
|
1162
|
+
platform: devicePlatform,
|
|
1163
|
+
publicKeyEd25519: identity.publicKeyEd25519,
|
|
1164
|
+
serverPublicKeyEd25519: redeemed.serverPublicKeyEd25519,
|
|
1165
|
+
relayUrl: redeemed.relayUrl,
|
|
1166
|
+
enrolledAt: new Date().toISOString(),
|
|
1167
|
+
};
|
|
1168
|
+
if (config.deviceId !== redeemed.deviceId
|
|
1169
|
+
|| config.publicKeyEd25519 !== identity.publicKeyEd25519
|
|
1170
|
+
|| config.serverPublicKeyEd25519 !== redeemed.serverPublicKeyEd25519) {
|
|
1171
|
+
throw new Error('Bootstrap replay does not match the enrolled device identity.');
|
|
1172
|
+
}
|
|
1173
|
+
if (redeemed.serverSigningKeyset) {
|
|
1174
|
+
const verification = verifyInitialServerSigningKeyset(redeemed.serverSigningKeyset, createPublicKey({ key: { kty: 'OKP', crv: 'Ed25519', x: redeemed.serverPublicKeyEd25519 }, format: 'jwk' }), organizationId);
|
|
1175
|
+
if (!verification.ok)
|
|
1176
|
+
throw new Error(`Bootstrap signing keyset was rejected: ${verification.reason}.`);
|
|
1177
|
+
config.serverSigningKeyset = redeemed.serverSigningKeyset;
|
|
1178
|
+
}
|
|
1179
|
+
await saveDeviceConfig(configPath(), config);
|
|
1180
|
+
await saveDeviceEnrollmentAnchor({ config });
|
|
1181
|
+
await saveOrganizationApiToken({ hqUrl, organizationId, token: redeemed.organizationApiToken });
|
|
1182
|
+
const onboardFlags = new Map(flags);
|
|
1183
|
+
onboardFlags.delete('grant');
|
|
1184
|
+
onboardFlags.set('portal-url', hqUrl);
|
|
1185
|
+
onboardFlags.set('organization-id', organizationId);
|
|
1186
|
+
onboardFlags.set('workspace', workspace);
|
|
1187
|
+
onboardFlags.set('policy-revision', policyRevision);
|
|
1188
|
+
const onboarded = await retryBootstrapOnboarding(async () => await onboard(onboardFlags));
|
|
1189
|
+
return {
|
|
1190
|
+
ok: true,
|
|
1191
|
+
stage: onboarded.stage,
|
|
1192
|
+
enrollment: {
|
|
1193
|
+
organizationId,
|
|
1194
|
+
deviceId: config.deviceId,
|
|
1195
|
+
status: 'approved',
|
|
1196
|
+
organizationApiTokenStored: true,
|
|
1197
|
+
scopes: redeemed.organizationApiTokenScopes,
|
|
1198
|
+
},
|
|
1199
|
+
repository: onboarded,
|
|
1200
|
+
};
|
|
1201
|
+
}
|
|
1107
1202
|
async function commandJsonBody(flags) {
|
|
1108
1203
|
const inline = flags.get('json-body');
|
|
1109
1204
|
const path = flags.get('body-file');
|
|
@@ -3703,6 +3798,8 @@ export async function run(argv) {
|
|
|
3703
3798
|
return USAGE;
|
|
3704
3799
|
if (flags.has('version') || command === 'version')
|
|
3705
3800
|
return { version: VERSION };
|
|
3801
|
+
if (command === 'bootstrap')
|
|
3802
|
+
return bootstrap(flags);
|
|
3706
3803
|
if (command === 'onboard')
|
|
3707
3804
|
return onboard(flags);
|
|
3708
3805
|
if (command === 'login')
|