@agenthifive/openclaw 0.1.0

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.
Files changed (65) hide show
  1. package/README.md +124 -0
  2. package/dist/client.d.ts +27 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +136 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/index.d.ts +16 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +23 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/jwt-utils.d.ts +29 -0
  11. package/dist/jwt-utils.d.ts.map +1 -0
  12. package/dist/jwt-utils.js +55 -0
  13. package/dist/jwt-utils.js.map +1 -0
  14. package/dist/patch-verify.d.ts +28 -0
  15. package/dist/patch-verify.d.ts.map +1 -0
  16. package/dist/patch-verify.js +72 -0
  17. package/dist/patch-verify.js.map +1 -0
  18. package/dist/pending-approvals.d.ts +55 -0
  19. package/dist/pending-approvals.d.ts.map +1 -0
  20. package/dist/pending-approvals.js +95 -0
  21. package/dist/pending-approvals.js.map +1 -0
  22. package/dist/prompt-reference.d.ts +51 -0
  23. package/dist/prompt-reference.d.ts.map +1 -0
  24. package/dist/prompt-reference.js +645 -0
  25. package/dist/prompt-reference.js.map +1 -0
  26. package/dist/register.d.ts +20 -0
  27. package/dist/register.d.ts.map +1 -0
  28. package/dist/register.js +551 -0
  29. package/dist/register.js.map +1 -0
  30. package/dist/runtime.d.ts +66 -0
  31. package/dist/runtime.d.ts.map +1 -0
  32. package/dist/runtime.js +87 -0
  33. package/dist/runtime.js.map +1 -0
  34. package/dist/session-context.d.ts +39 -0
  35. package/dist/session-context.d.ts.map +1 -0
  36. package/dist/session-context.js +58 -0
  37. package/dist/session-context.js.map +1 -0
  38. package/dist/setup-wizard.d.ts +28 -0
  39. package/dist/setup-wizard.d.ts.map +1 -0
  40. package/dist/setup-wizard.js +303 -0
  41. package/dist/setup-wizard.js.map +1 -0
  42. package/dist/tools.d.ts +27 -0
  43. package/dist/tools.d.ts.map +1 -0
  44. package/dist/tools.js +128 -0
  45. package/dist/tools.js.map +1 -0
  46. package/dist/types.d.ts +93 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/vault-action-proxy.d.ts +75 -0
  51. package/dist/vault-action-proxy.d.ts.map +1 -0
  52. package/dist/vault-action-proxy.js +152 -0
  53. package/dist/vault-action-proxy.js.map +1 -0
  54. package/dist/vault-provider.d.ts +52 -0
  55. package/dist/vault-provider.d.ts.map +1 -0
  56. package/dist/vault-provider.js +37 -0
  57. package/dist/vault-provider.js.map +1 -0
  58. package/dist/vault-token-manager.d.ts +42 -0
  59. package/dist/vault-token-manager.d.ts.map +1 -0
  60. package/dist/vault-token-manager.js +124 -0
  61. package/dist/vault-token-manager.js.map +1 -0
  62. package/openclaw.plugin.json +59 -0
  63. package/package.json +58 -0
  64. package/patches/README.md +85 -0
  65. package/patches/model-auth.patch +44 -0
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Runtime exports for OpenClaw core patches.
3
+ *
4
+ * This module is imported dynamically by the model-auth.ts patch via:
5
+ * const runtime = await import("@agenthifive/openclaw/runtime");
6
+ *
7
+ * It exposes the minimum surface needed for credential resolution without
8
+ * pulling in the full plugin. When the plugin is not installed, the dynamic
9
+ * import fails silently and the patch is a no-op.
10
+ *
11
+ * Separate entry point from index.ts so patches import only what they need.
12
+ */
13
+ import type { CredentialProvider } from "./vault-provider.js";
14
+ /**
15
+ * Query for credential resolution from the patch.
16
+ * Mirrors the fork's CredentialQuery shape used in model-auth.ts.
17
+ */
18
+ export type RuntimeCredentialQuery = {
19
+ kind: "model_provider" | "channel" | "plugin_config";
20
+ provider: string;
21
+ profileId?: string;
22
+ fields?: string[];
23
+ };
24
+ /**
25
+ * Result returned to the patch from credential resolution.
26
+ */
27
+ export type RuntimeCredentialResult = {
28
+ apiKey: string;
29
+ source?: string;
30
+ mode?: "api-key" | "oauth" | "token";
31
+ };
32
+ /**
33
+ * Called by register.ts after agent auth is initialized.
34
+ * Sets the vault bearer token getter for Tier 0 proxied providers.
35
+ */
36
+ export declare function setVaultBearerToken(token: string | null): void;
37
+ /**
38
+ * Called by register.ts to set the credential provider for Tier 0.5 resolution.
39
+ */
40
+ export declare function setCredentialProvider(provider: CredentialProvider | null): void;
41
+ /**
42
+ * Called by register.ts to set the list of providers that should use vault bearer tokens.
43
+ */
44
+ export declare function setProxiedProviders(providers: string[]): void;
45
+ /**
46
+ * Get the current vault bearer token for proxied provider auth.
47
+ * Returns null if the plugin is not initialized or no token is available.
48
+ */
49
+ export declare function getVaultBearerToken(): string | null;
50
+ /**
51
+ * Get the list of providers configured for vault token proxying.
52
+ */
53
+ export declare function getProxiedProviders(): string[];
54
+ /**
55
+ * Resolve credentials via the configured credential provider chain.
56
+ * Returns null if no provider is configured or no credentials are found.
57
+ *
58
+ * Adapts between the patch-facing types (RuntimeCredentialQuery/Result)
59
+ * and the internal CredentialProvider interface.
60
+ */
61
+ export declare function resolveCredential(query: RuntimeCredentialQuery): Promise<RuntimeCredentialResult | null>;
62
+ /**
63
+ * Check whether the runtime has been initialized (plugin is loaded and auth is ready).
64
+ */
65
+ export declare function isInitialized(): boolean;
66
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAM9D;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,gBAAgB,GAAG,SAAS,GAAG,eAAe,CAAC;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;CACtC,CAAC;AAcF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAE/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAE7D;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAiBzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Runtime exports for OpenClaw core patches.
3
+ *
4
+ * This module is imported dynamically by the model-auth.ts patch via:
5
+ * const runtime = await import("@agenthifive/openclaw/runtime");
6
+ *
7
+ * It exposes the minimum surface needed for credential resolution without
8
+ * pulling in the full plugin. When the plugin is not installed, the dynamic
9
+ * import fails silently and the patch is a no-op.
10
+ *
11
+ * Separate entry point from index.ts so patches import only what they need.
12
+ */
13
+ // ---------------------------------------------------------------------------
14
+ // Module-scoped state — set by register.ts during plugin init
15
+ // ---------------------------------------------------------------------------
16
+ let _vaultBearerToken = null;
17
+ let _credentialProvider = null;
18
+ let _proxiedProviders = [];
19
+ // ---------------------------------------------------------------------------
20
+ // Setup (called by register.ts)
21
+ // ---------------------------------------------------------------------------
22
+ /**
23
+ * Called by register.ts after agent auth is initialized.
24
+ * Sets the vault bearer token getter for Tier 0 proxied providers.
25
+ */
26
+ export function setVaultBearerToken(token) {
27
+ _vaultBearerToken = token;
28
+ }
29
+ /**
30
+ * Called by register.ts to set the credential provider for Tier 0.5 resolution.
31
+ */
32
+ export function setCredentialProvider(provider) {
33
+ _credentialProvider = provider;
34
+ }
35
+ /**
36
+ * Called by register.ts to set the list of providers that should use vault bearer tokens.
37
+ */
38
+ export function setProxiedProviders(providers) {
39
+ _proxiedProviders = providers;
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // Patch-facing API
43
+ // ---------------------------------------------------------------------------
44
+ /**
45
+ * Get the current vault bearer token for proxied provider auth.
46
+ * Returns null if the plugin is not initialized or no token is available.
47
+ */
48
+ export function getVaultBearerToken() {
49
+ return _vaultBearerToken;
50
+ }
51
+ /**
52
+ * Get the list of providers configured for vault token proxying.
53
+ */
54
+ export function getProxiedProviders() {
55
+ return _proxiedProviders;
56
+ }
57
+ /**
58
+ * Resolve credentials via the configured credential provider chain.
59
+ * Returns null if no provider is configured or no credentials are found.
60
+ *
61
+ * Adapts between the patch-facing types (RuntimeCredentialQuery/Result)
62
+ * and the internal CredentialProvider interface.
63
+ */
64
+ export async function resolveCredential(query) {
65
+ if (!_credentialProvider)
66
+ return null;
67
+ const internalQuery = {
68
+ provider: query.provider,
69
+ };
70
+ if (query.fields)
71
+ internalQuery.scopes = query.fields;
72
+ const result = await _credentialProvider.resolve(internalQuery);
73
+ if (!result)
74
+ return null;
75
+ return {
76
+ apiKey: result.token,
77
+ source: `credential-provider:${_credentialProvider.id}`,
78
+ mode: "api-key",
79
+ };
80
+ }
81
+ /**
82
+ * Check whether the runtime has been initialized (plugin is loaded and auth is ready).
83
+ */
84
+ export function isInitialized() {
85
+ return _vaultBearerToken !== null || _credentialProvider !== null;
86
+ }
87
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA4BH,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAE9E,IAAI,iBAAiB,GAAkB,IAAI,CAAC;AAC5C,IAAI,mBAAmB,GAA8B,IAAI,CAAC;AAC1D,IAAI,iBAAiB,GAAa,EAAE,CAAC;AAErC,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAoB;IACtD,iBAAiB,GAAG,KAAK,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAmC;IACvE,mBAAmB,GAAG,QAAQ,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAmB;IACrD,iBAAiB,GAAG,SAAS,CAAC;AAChC,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAA6B;IAE7B,IAAI,CAAC,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,aAAa,GAAkD;QACnE,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;IACF,IAAI,KAAK,CAAC,MAAM;QAAE,aAAa,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAEtD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,MAAM,EAAE,uBAAuB,mBAAmB,CAAC,EAAE,EAAE;QACvD,IAAI,EAAE,SAAS;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,iBAAiB,KAAK,IAAI,IAAI,mBAAmB,KAAK,IAAI,CAAC;AACpE,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Lightweight session context tracking for vault tools.
3
+ *
4
+ * The `before_agent_start` hook has access to the current session's key
5
+ * (via PluginHookAgentContext), but agent tools receive no session context.
6
+ * This module bridges the gap with a module-scoped variable.
7
+ *
8
+ * The hook sets the current session at the start of each agent turn;
9
+ * the vault_execute tool reads it when writing pending approvals.
10
+ *
11
+ * Safety: OpenClaw serialises agent turns per session lane, so within
12
+ * a single session the set → read ordering is guaranteed. Concurrent
13
+ * sessions on different lanes have a theoretical race window, but the
14
+ * impact is minimal (worst case: an approval notification routes to a
15
+ * slightly wrong session; the correct session still picks it up via the
16
+ * before_agent_start fallback hook on its next turn).
17
+ */
18
+ export type SessionContext = {
19
+ sessionKey: string;
20
+ channel?: string;
21
+ peerId?: string;
22
+ peerKind?: string;
23
+ };
24
+ export declare function setCurrentSessionContext(ctx: SessionContext): void;
25
+ export declare function getCurrentSessionContext(): SessionContext | undefined;
26
+ /**
27
+ * Parse routing info from a session key.
28
+ *
29
+ * Session keys from buildAgentPeerSessionKey use these formats:
30
+ * "agent:{agentId}:{channel}:{peerKind}:{peerId}" (per-channel-peer / group)
31
+ * "agent:{agentId}:{channel}:{accountId}:{peerKind}:{peerId}" (per-account-channel-peer)
32
+ * "agent:{agentId}:main" (TUI/webchat dmScope=main)
33
+ */
34
+ export declare function parseSessionKey(sessionKey: string): {
35
+ channel?: string;
36
+ peerKind?: string;
37
+ peerId?: string;
38
+ };
39
+ //# sourceMappingURL=session-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../src/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAIF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAElE;AAED,wBAAgB,wBAAwB,IAAI,cAAc,GAAG,SAAS,CAErE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAkBA"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Lightweight session context tracking for vault tools.
3
+ *
4
+ * The `before_agent_start` hook has access to the current session's key
5
+ * (via PluginHookAgentContext), but agent tools receive no session context.
6
+ * This module bridges the gap with a module-scoped variable.
7
+ *
8
+ * The hook sets the current session at the start of each agent turn;
9
+ * the vault_execute tool reads it when writing pending approvals.
10
+ *
11
+ * Safety: OpenClaw serialises agent turns per session lane, so within
12
+ * a single session the set → read ordering is guaranteed. Concurrent
13
+ * sessions on different lanes have a theoretical race window, but the
14
+ * impact is minimal (worst case: an approval notification routes to a
15
+ * slightly wrong session; the correct session still picks it up via the
16
+ * before_agent_start fallback hook on its next turn).
17
+ */
18
+ let _current;
19
+ export function setCurrentSessionContext(ctx) {
20
+ _current = ctx;
21
+ }
22
+ export function getCurrentSessionContext() {
23
+ return _current;
24
+ }
25
+ /**
26
+ * Parse routing info from a session key.
27
+ *
28
+ * Session keys from buildAgentPeerSessionKey use these formats:
29
+ * "agent:{agentId}:{channel}:{peerKind}:{peerId}" (per-channel-peer / group)
30
+ * "agent:{agentId}:{channel}:{accountId}:{peerKind}:{peerId}" (per-account-channel-peer)
31
+ * "agent:{agentId}:main" (TUI/webchat dmScope=main)
32
+ */
33
+ export function parseSessionKey(sessionKey) {
34
+ const parts = sessionKey.split(":");
35
+ if (parts.length < 5) {
36
+ return {};
37
+ }
38
+ if (parts.length === 5) {
39
+ const result = {};
40
+ if (parts[2])
41
+ result.channel = parts[2];
42
+ if (parts[3])
43
+ result.peerKind = parts[3];
44
+ if (parts[4])
45
+ result.peerId = parts[4];
46
+ return result;
47
+ }
48
+ const result = {};
49
+ if (parts[2])
50
+ result.channel = parts[2];
51
+ if (parts[4])
52
+ result.peerKind = parts[4];
53
+ const peerId = parts.slice(5).join(":");
54
+ if (peerId)
55
+ result.peerId = peerId;
56
+ return result;
57
+ }
58
+ //# sourceMappingURL=session-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-context.js","sourceRoot":"","sources":["../src/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,IAAI,QAAoC,CAAC;AAEzC,MAAM,UAAU,wBAAwB,CAAC,GAAmB;IAC1D,QAAQ,GAAG,GAAG,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAKhD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAA6D,EAAE,CAAC;QAC5E,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAA6D,EAAE,CAAC;IAC5E,IAAI,KAAK,CAAC,CAAC,CAAC;QAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,CAAC,CAAC;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Setup wizard for AgentHiFive vault integration.
3
+ *
4
+ * Bootstraps agent auth, discovers capabilities, and outputs JSON config
5
+ * that the user pastes into their openclaw.json.
6
+ *
7
+ * Two modes:
8
+ * - Interactive: prompts via Node.js readline
9
+ * - Non-interactive: accepts --base-url and --bootstrap-secret flags
10
+ *
11
+ * Registered as `openclaw setup-vault` via api.registerCommand() in register.ts.
12
+ */
13
+ export interface SetupOptions {
14
+ baseUrl?: string;
15
+ bootstrapSecret?: string;
16
+ nonInteractive?: boolean;
17
+ }
18
+ export declare function buildConfigOutput(params: {
19
+ baseUrl: string;
20
+ agentId: string;
21
+ privateKey: JsonWebKey;
22
+ connections: Record<string, string>;
23
+ connectedProviders: string[];
24
+ proxiedProviders: string[];
25
+ }): object;
26
+ export declare function runSetupWizard(opts?: SetupOptions): Promise<void>;
27
+ export declare function parseSetupArgs(args: string[]): SetupOptions;
28
+ //# sourceMappingURL=setup-wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA8HD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,GAAG,MAAM,CA4BT;AAMD,wBAAsB,cAAc,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2K3E;AAmCD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAsB3D"}
@@ -0,0 +1,303 @@
1
+ /**
2
+ * Setup wizard for AgentHiFive vault integration.
3
+ *
4
+ * Bootstraps agent auth, discovers capabilities, and outputs JSON config
5
+ * that the user pastes into their openclaw.json.
6
+ *
7
+ * Two modes:
8
+ * - Interactive: prompts via Node.js readline
9
+ * - Non-interactive: accepts --base-url and --bootstrap-secret flags
10
+ *
11
+ * Registered as `openclaw setup-vault` via api.registerCommand() in register.ts.
12
+ */
13
+ import { generateKeyPair, exportJWK } from "jose";
14
+ import { VaultTokenManager } from "./vault-token-manager.js";
15
+ // ---------------------------------------------------------------------------
16
+ // Readline helpers
17
+ // ---------------------------------------------------------------------------
18
+ async function prompt(question, defaultValue) {
19
+ const { createInterface } = await import("node:readline");
20
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
21
+ const suffix = defaultValue ? ` [${defaultValue}]` : "";
22
+ return new Promise((resolve) => {
23
+ rl.question(`${question}${suffix}: `, (answer) => {
24
+ rl.close();
25
+ resolve(answer.trim() || defaultValue || "");
26
+ });
27
+ });
28
+ }
29
+ async function confirm(question, defaultYes = true) {
30
+ const hint = defaultYes ? "[Y/n]" : "[y/N]";
31
+ const answer = await prompt(`${question} ${hint}`);
32
+ if (!answer)
33
+ return defaultYes;
34
+ return answer.toLowerCase().startsWith("y");
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // Vault API helpers
38
+ // ---------------------------------------------------------------------------
39
+ async function bootstrapAgent(baseUrl, bootstrapSecret) {
40
+ const { publicKey, privateKey } = await generateKeyPair("ES256");
41
+ const publicJWK = await exportJWK(publicKey);
42
+ const privateJWK = await exportJWK(privateKey);
43
+ const response = await fetch(`${baseUrl}/v1/agents/bootstrap`, {
44
+ method: "POST",
45
+ headers: { "Content-Type": "application/json" },
46
+ body: JSON.stringify({
47
+ bootstrapSecret: bootstrapSecret.trim(),
48
+ publicKey: publicJWK,
49
+ }),
50
+ signal: AbortSignal.timeout(10_000),
51
+ });
52
+ if (!response.ok) {
53
+ const body = await response.text().catch(() => "");
54
+ throw new Error(`Bootstrap failed (${response.status}): ${body || "check that the secret is valid and not expired"}`);
55
+ }
56
+ const result = (await response.json());
57
+ return { ...result, privateKey: privateJWK };
58
+ }
59
+ async function fetchCapabilities(baseUrl, token) {
60
+ const response = await fetch(`${baseUrl}/v1/capabilities/me`, {
61
+ method: "GET",
62
+ headers: { Authorization: `Bearer ${token}` },
63
+ signal: AbortSignal.timeout(5_000),
64
+ });
65
+ if (!response.ok) {
66
+ throw new Error(`Capabilities fetch failed (${response.status})`);
67
+ }
68
+ const body = (await response.json());
69
+ return body.activeConnections ?? [];
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Service mapping
73
+ // ---------------------------------------------------------------------------
74
+ const SUPPORTED_SERVICES = {
75
+ telegram: "telegram",
76
+ slack: "slack",
77
+ "microsoft-teams": "msteams",
78
+ "anthropic-messages": "anthropic",
79
+ openai: "openai",
80
+ gemini: "gemini",
81
+ };
82
+ function integrationLabel(conn) {
83
+ if (conn.category === "llm")
84
+ return "LLM proxy";
85
+ if (conn.credentialType === "bot_token")
86
+ return "brokered API proxy";
87
+ if (conn.credentialType === "oauth")
88
+ return "brokered API proxy";
89
+ return "auth managed";
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // Config output builder
93
+ // ---------------------------------------------------------------------------
94
+ export function buildConfigOutput(params) {
95
+ return {
96
+ plugins: {
97
+ enabled: true,
98
+ allow: ["agenthifive"],
99
+ load: {
100
+ paths: ["@agenthifive/openclaw"],
101
+ },
102
+ entries: {
103
+ agenthifive: {
104
+ enabled: true,
105
+ hooks: { allowPromptInjection: true },
106
+ config: {
107
+ baseUrl: params.baseUrl,
108
+ auth: {
109
+ mode: "agent",
110
+ agentId: params.agentId,
111
+ privateKey: Buffer.from(JSON.stringify(params.privateKey)).toString("base64"),
112
+ },
113
+ connectedProviders: params.connectedProviders,
114
+ proxiedProviders: params.proxiedProviders,
115
+ },
116
+ },
117
+ },
118
+ },
119
+ };
120
+ }
121
+ // ---------------------------------------------------------------------------
122
+ // Main wizard
123
+ // ---------------------------------------------------------------------------
124
+ export async function runSetupWizard(opts = {}) {
125
+ const log = (msg) => process.stdout.write(`${msg}\n`);
126
+ log("");
127
+ log(" AgentHiFive Vault Setup");
128
+ log(" " + "=".repeat(40));
129
+ log("");
130
+ // Step 1: Base URL
131
+ let baseUrl = opts.baseUrl;
132
+ if (!baseUrl) {
133
+ if (opts.nonInteractive) {
134
+ throw new Error("--base-url is required in non-interactive mode");
135
+ }
136
+ baseUrl = await prompt("AgentHiFive base URL", "https://app.agenthifive.com");
137
+ }
138
+ baseUrl = baseUrl.replace(/\/+$/, "");
139
+ // Step 2: Bootstrap secret
140
+ let bootstrapSecret = opts.bootstrapSecret;
141
+ if (!bootstrapSecret) {
142
+ if (opts.nonInteractive) {
143
+ throw new Error("--bootstrap-secret is required in non-interactive mode");
144
+ }
145
+ log("");
146
+ log(" Generate a bootstrap secret from the AgentHiFive dashboard:");
147
+ log(" Dashboard -> Agents -> [your agent] -> Bootstrap Secret");
148
+ log(" The secret expires in 1 hour.");
149
+ log("");
150
+ bootstrapSecret = await prompt("Bootstrap secret (ah5b_...)");
151
+ }
152
+ if (!bootstrapSecret.startsWith("ah5b_")) {
153
+ throw new Error("Bootstrap secrets must start with ah5b_");
154
+ }
155
+ // Step 3: Bootstrap — generate key pair + register
156
+ log("");
157
+ log(" Bootstrapping agent...");
158
+ const { agentId, name, status, privateKey } = await bootstrapAgent(baseUrl, bootstrapSecret);
159
+ log(` Agent "${name}" bootstrapped (${agentId.slice(0, 8)}..., status: ${status})`);
160
+ // Step 4: Verify token exchange
161
+ log(" Verifying token exchange...");
162
+ const tokenManager = new VaultTokenManager({
163
+ baseUrl,
164
+ agentId,
165
+ privateKey,
166
+ tokenAudience: baseUrl,
167
+ });
168
+ try {
169
+ await tokenManager.init();
170
+ log(" Token exchange successful");
171
+ }
172
+ catch (err) {
173
+ log(` WARNING: Token exchange failed: ${err instanceof Error ? err.message : String(err)}`);
174
+ log(" Config will still be generated — you may need to fix auth settings.");
175
+ tokenManager.stop();
176
+ outputMinimalConfig(log, baseUrl, agentId, privateKey);
177
+ return;
178
+ }
179
+ // Step 5: Fetch capabilities
180
+ log(" Fetching capabilities...");
181
+ let vaultConnections = [];
182
+ try {
183
+ vaultConnections = await fetchCapabilities(baseUrl, tokenManager.getToken());
184
+ }
185
+ catch (err) {
186
+ log(` WARNING: Could not fetch capabilities: ${err instanceof Error ? err.message : String(err)}`);
187
+ }
188
+ tokenManager.stop();
189
+ // Step 6: Show connection status
190
+ const connections = {};
191
+ const connectedProviders = [];
192
+ const proxiedProviders = [];
193
+ const seenServices = new Set();
194
+ log("");
195
+ log(" Connected Services:");
196
+ log(" " + "-".repeat(50));
197
+ for (const conn of vaultConnections) {
198
+ const openclawName = SUPPORTED_SERVICES[conn.service] ?? conn.service;
199
+ connections[openclawName] = conn.connectionId ?? "vault-managed";
200
+ if (seenServices.has(conn.service))
201
+ continue;
202
+ seenServices.add(conn.service);
203
+ const displayLabel = conn.displayName || openclawName;
204
+ log(` + ${displayLabel.padEnd(20)} - connected (${integrationLabel(conn)})`);
205
+ connectedProviders.push(openclawName);
206
+ if (conn.category === "llm") {
207
+ proxiedProviders.push(openclawName);
208
+ }
209
+ }
210
+ // Show missing services
211
+ for (const [serviceId, openclawName] of Object.entries(SUPPORTED_SERVICES)) {
212
+ if (!seenServices.has(serviceId)) {
213
+ log(` - ${openclawName.padEnd(20)} - not connected`);
214
+ }
215
+ }
216
+ if (vaultConnections.length === 0) {
217
+ log(" No connections found. Add connections in the AgentHiFive dashboard.");
218
+ }
219
+ // Step 7: Ask about credential proxying patch
220
+ let showPatchInstructions = false;
221
+ if (proxiedProviders.length > 0 && !opts.nonInteractive) {
222
+ log("");
223
+ showPatchInstructions = await confirm(" Enable LLM credential proxying? (requires a one-time patch)");
224
+ }
225
+ // Step 8: Output config
226
+ const configBlock = buildConfigOutput({
227
+ baseUrl,
228
+ agentId,
229
+ privateKey,
230
+ connections,
231
+ connectedProviders,
232
+ proxiedProviders,
233
+ });
234
+ log("");
235
+ log(" " + "=".repeat(50));
236
+ log(" Add this to your ~/.openclaw/openclaw.json:");
237
+ log(" " + "=".repeat(50));
238
+ log("");
239
+ log(JSON.stringify(configBlock, null, 2));
240
+ log("");
241
+ if (showPatchInstructions) {
242
+ log(" " + "-".repeat(50));
243
+ log(" To enable LLM credential proxying, apply the patch:");
244
+ log(" " + "-".repeat(50));
245
+ log("");
246
+ log(" pnpm patch openclaw");
247
+ log(" cd <temp-directory>");
248
+ log(" patch -p1 < node_modules/@agenthifive/openclaw/patches/model-auth.patch");
249
+ log(" pnpm patch-commit <temp-directory>");
250
+ log("");
251
+ }
252
+ log(" Setup complete!");
253
+ log("");
254
+ }
255
+ // ---------------------------------------------------------------------------
256
+ // Fallback: minimal config when token exchange fails
257
+ // ---------------------------------------------------------------------------
258
+ function outputMinimalConfig(log, baseUrl, agentId, privateKey) {
259
+ const configBlock = buildConfigOutput({
260
+ baseUrl,
261
+ agentId,
262
+ privateKey,
263
+ connections: {},
264
+ connectedProviders: [],
265
+ proxiedProviders: [],
266
+ });
267
+ log("");
268
+ log(" " + "=".repeat(50));
269
+ log(" Add this to your ~/.openclaw/openclaw.json:");
270
+ log(" (capabilities could not be fetched - update manually)");
271
+ log(" " + "=".repeat(50));
272
+ log("");
273
+ log(JSON.stringify(configBlock, null, 2));
274
+ log("");
275
+ }
276
+ // ---------------------------------------------------------------------------
277
+ // CLI argument parser (for non-interactive mode)
278
+ // ---------------------------------------------------------------------------
279
+ export function parseSetupArgs(args) {
280
+ const opts = {};
281
+ for (let i = 0; i < args.length; i++) {
282
+ const arg = args[i];
283
+ if (arg === "--base-url" && args[i + 1]) {
284
+ const val = args[++i];
285
+ if (val)
286
+ opts.baseUrl = val;
287
+ }
288
+ else if (arg === "--bootstrap-secret" && args[i + 1]) {
289
+ const val = args[++i];
290
+ if (val)
291
+ opts.bootstrapSecret = val;
292
+ }
293
+ else if (arg === "--non-interactive") {
294
+ opts.nonInteractive = true;
295
+ }
296
+ }
297
+ // Auto-enable non-interactive if both required args are provided
298
+ if (opts.baseUrl && opts.bootstrapSecret) {
299
+ opts.nonInteractive = true;
300
+ }
301
+ return opts;
302
+ }
303
+ //# sourceMappingURL=setup-wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ExecuteInput, ExecuteOutput, ExecuteApprovalOutput, ApprovalRequestInput, ApprovalRequestOutput, ApprovalCommitInput, ApprovalCommitOutput, ConnectionsListOutput, ConnectionRevokeInput, ConnectionRevokeOutput } from "./types.js";
2
+ import { VaultClient } from "./client.js";
3
+ /**
4
+ * Executes an operation via the Vault's Model B brokered proxy.
5
+ * Returns the execution result or approval requirement.
6
+ */
7
+ export declare function execute(client: VaultClient, input: ExecuteInput): Promise<ExecuteOutput | ExecuteApprovalOutput>;
8
+ /**
9
+ * Creates a step-up approval request.
10
+ * The user must approve before the action is executed.
11
+ */
12
+ export declare function approvalRequest(client: VaultClient, input: ApprovalRequestInput): Promise<ApprovalRequestOutput>;
13
+ /**
14
+ * Polls approval status until approved/denied/expired or timeout.
15
+ * On approval, the caller should re-submit the original request
16
+ * with the approvalId to execute it.
17
+ */
18
+ export declare function approvalCommit(client: VaultClient, input: ApprovalCommitInput, pollTimeoutMs?: number, pollIntervalMs?: number): Promise<ApprovalCommitOutput>;
19
+ /**
20
+ * Lists all connections for the current workspace.
21
+ */
22
+ export declare function connectionsList(client: VaultClient): Promise<ConnectionsListOutput>;
23
+ /**
24
+ * Revokes a connection immediately.
25
+ */
26
+ export declare function connectionRevoke(client: VaultClient, input: ConnectionRevokeInput): Promise<ConnectionRevokeOutput>;
27
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAKzD;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,aAAa,GAAG,qBAAqB,CAAC,CAyChD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CA2BhC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,mBAAmB,EAC1B,aAAa,GAAE,MAAgC,EAC/C,cAAc,GAAE,MAAiC,GAChD,OAAO,CAAC,oBAAoB,CAAC,CAoD/B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAOhC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAejC"}