oneclaw 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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/adapters/index.d.ts +4 -0
  4. package/dist/adapters/index.js +36 -0
  5. package/dist/adapters/index.js.map +1 -0
  6. package/dist/adapters/nanoclaw.d.ts +6 -0
  7. package/dist/adapters/nanoclaw.js +94 -0
  8. package/dist/adapters/nanoclaw.js.map +1 -0
  9. package/dist/adapters/openclaw.d.ts +30 -0
  10. package/dist/adapters/openclaw.js +85 -0
  11. package/dist/adapters/openclaw.js.map +1 -0
  12. package/dist/adapters/owpenbot.d.ts +39 -0
  13. package/dist/adapters/owpenbot.js +130 -0
  14. package/dist/adapters/owpenbot.js.map +1 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +268 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/core/doctor.d.ts +6 -0
  19. package/dist/core/doctor.js +41 -0
  20. package/dist/core/doctor.js.map +1 -0
  21. package/dist/core/fs.d.ts +2 -0
  22. package/dist/core/fs.js +19 -0
  23. package/dist/core/fs.js.map +1 -0
  24. package/dist/core/packs.d.ts +6 -0
  25. package/dist/core/packs.js +75 -0
  26. package/dist/core/packs.js.map +1 -0
  27. package/dist/core/paths.d.ts +6 -0
  28. package/dist/core/paths.js +11 -0
  29. package/dist/core/paths.js.map +1 -0
  30. package/dist/core/run-state.d.ts +25 -0
  31. package/dist/core/run-state.js +34 -0
  32. package/dist/core/run-state.js.map +1 -0
  33. package/dist/core/schema.d.ts +330 -0
  34. package/dist/core/schema.js +72 -0
  35. package/dist/core/schema.js.map +1 -0
  36. package/dist/core/secrets.d.ts +9 -0
  37. package/dist/core/secrets.js +65 -0
  38. package/dist/core/secrets.js.map +1 -0
  39. package/dist/core/types.d.ts +69 -0
  40. package/dist/core/types.js +3 -0
  41. package/dist/core/types.js.map +1 -0
  42. package/dist/core/workflow.d.ts +48 -0
  43. package/dist/core/workflow.js +92 -0
  44. package/dist/core/workflow.js.map +1 -0
  45. package/dist/providers/agentmail.d.ts +2 -0
  46. package/dist/providers/agentmail.js +145 -0
  47. package/dist/providers/agentmail.js.map +1 -0
  48. package/dist/providers/bitwarden.d.ts +2 -0
  49. package/dist/providers/bitwarden.js +225 -0
  50. package/dist/providers/bitwarden.js.map +1 -0
  51. package/dist/providers/index.d.ts +5 -0
  52. package/dist/providers/index.js +15 -0
  53. package/dist/providers/index.js.map +1 -0
  54. package/dist/providers/telegram.d.ts +2 -0
  55. package/dist/providers/telegram.js +91 -0
  56. package/dist/providers/telegram.js.map +1 -0
  57. package/package.json +40 -0
@@ -0,0 +1,330 @@
1
+ import { z } from "zod";
2
+ import { TARGETS, type IdentityPack } from "./types.js";
3
+ export declare const identityPackSchema: z.ZodObject<{
4
+ schema: z.ZodLiteral<"one-identity/v1">;
5
+ packId: z.ZodString;
6
+ createdAt: z.ZodString;
7
+ updatedAt: z.ZodString;
8
+ accounts: z.ZodObject<{
9
+ email: z.ZodOptional<z.ZodObject<{
10
+ provider: z.ZodLiteral<"agentmail">;
11
+ inboxId: z.ZodString;
12
+ address: z.ZodString;
13
+ apiKeyRef: z.ZodString;
14
+ webhookSecretRef: z.ZodOptional<z.ZodString>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ provider: "agentmail";
17
+ inboxId: string;
18
+ address: string;
19
+ apiKeyRef: string;
20
+ webhookSecretRef?: string | undefined;
21
+ }, {
22
+ provider: "agentmail";
23
+ inboxId: string;
24
+ address: string;
25
+ apiKeyRef: string;
26
+ webhookSecretRef?: string | undefined;
27
+ }>>;
28
+ telegram: z.ZodOptional<z.ZodObject<{
29
+ provider: z.ZodLiteral<"telegram">;
30
+ identityId: z.ZodString;
31
+ botUsername: z.ZodString;
32
+ tokenRef: z.ZodString;
33
+ }, "strip", z.ZodTypeAny, {
34
+ identityId: string;
35
+ provider: "telegram";
36
+ botUsername: string;
37
+ tokenRef: string;
38
+ }, {
39
+ identityId: string;
40
+ provider: "telegram";
41
+ botUsername: string;
42
+ tokenRef: string;
43
+ }>>;
44
+ slack: z.ZodOptional<z.ZodObject<{
45
+ provider: z.ZodLiteral<"slack">;
46
+ identityId: z.ZodString;
47
+ botTokenRef: z.ZodString;
48
+ appTokenRef: z.ZodString;
49
+ }, "strip", z.ZodTypeAny, {
50
+ identityId: string;
51
+ provider: "slack";
52
+ botTokenRef: string;
53
+ appTokenRef: string;
54
+ }, {
55
+ identityId: string;
56
+ provider: "slack";
57
+ botTokenRef: string;
58
+ appTokenRef: string;
59
+ }>>;
60
+ bitwarden: z.ZodOptional<z.ZodObject<{
61
+ provider: z.ZodLiteral<"bitwarden">;
62
+ accountEmail: z.ZodString;
63
+ vault: z.ZodString;
64
+ itemRefs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
65
+ sessionRef: z.ZodOptional<z.ZodString>;
66
+ masterPasswordRef: z.ZodOptional<z.ZodString>;
67
+ }, "strip", z.ZodTypeAny, {
68
+ vault: string;
69
+ itemRefs: string[];
70
+ provider: "bitwarden";
71
+ accountEmail: string;
72
+ sessionRef?: string | undefined;
73
+ masterPasswordRef?: string | undefined;
74
+ }, {
75
+ vault: string;
76
+ provider: "bitwarden";
77
+ accountEmail: string;
78
+ sessionRef?: string | undefined;
79
+ itemRefs?: string[] | undefined;
80
+ masterPasswordRef?: string | undefined;
81
+ }>>;
82
+ }, "strip", z.ZodTypeAny, {
83
+ telegram?: {
84
+ identityId: string;
85
+ provider: "telegram";
86
+ botUsername: string;
87
+ tokenRef: string;
88
+ } | undefined;
89
+ slack?: {
90
+ identityId: string;
91
+ provider: "slack";
92
+ botTokenRef: string;
93
+ appTokenRef: string;
94
+ } | undefined;
95
+ bitwarden?: {
96
+ vault: string;
97
+ itemRefs: string[];
98
+ provider: "bitwarden";
99
+ accountEmail: string;
100
+ sessionRef?: string | undefined;
101
+ masterPasswordRef?: string | undefined;
102
+ } | undefined;
103
+ email?: {
104
+ provider: "agentmail";
105
+ inboxId: string;
106
+ address: string;
107
+ apiKeyRef: string;
108
+ webhookSecretRef?: string | undefined;
109
+ } | undefined;
110
+ }, {
111
+ telegram?: {
112
+ identityId: string;
113
+ provider: "telegram";
114
+ botUsername: string;
115
+ tokenRef: string;
116
+ } | undefined;
117
+ slack?: {
118
+ identityId: string;
119
+ provider: "slack";
120
+ botTokenRef: string;
121
+ appTokenRef: string;
122
+ } | undefined;
123
+ bitwarden?: {
124
+ vault: string;
125
+ provider: "bitwarden";
126
+ accountEmail: string;
127
+ sessionRef?: string | undefined;
128
+ itemRefs?: string[] | undefined;
129
+ masterPasswordRef?: string | undefined;
130
+ } | undefined;
131
+ email?: {
132
+ provider: "agentmail";
133
+ inboxId: string;
134
+ address: string;
135
+ apiKeyRef: string;
136
+ webhookSecretRef?: string | undefined;
137
+ } | undefined;
138
+ }>;
139
+ targets: z.ZodDefault<z.ZodArray<z.ZodEnum<["owpenbot", "openclaw", "nanoclaw"]>, "many">>;
140
+ provisioning: z.ZodOptional<z.ZodObject<{
141
+ runs: z.ZodArray<z.ZodObject<{
142
+ runId: z.ZodString;
143
+ startedAt: z.ZodString;
144
+ updatedAt: z.ZodString;
145
+ completed: z.ZodBoolean;
146
+ steps: z.ZodArray<z.ZodObject<{
147
+ provider: z.ZodString;
148
+ stepId: z.ZodString;
149
+ kind: z.ZodEnum<["api_call", "browser_task", "manual_checkpoint", "verify", "persist_secret"]>;
150
+ status: z.ZodEnum<["completed", "blocked"]>;
151
+ detail: z.ZodString;
152
+ updatedAt: z.ZodString;
153
+ }, "strip", z.ZodTypeAny, {
154
+ provider: string;
155
+ status: "completed" | "blocked";
156
+ stepId: string;
157
+ kind: "api_call" | "browser_task" | "manual_checkpoint" | "verify" | "persist_secret";
158
+ detail: string;
159
+ updatedAt: string;
160
+ }, {
161
+ provider: string;
162
+ status: "completed" | "blocked";
163
+ stepId: string;
164
+ kind: "api_call" | "browser_task" | "manual_checkpoint" | "verify" | "persist_secret";
165
+ detail: string;
166
+ updatedAt: string;
167
+ }>, "many">;
168
+ }, "strip", z.ZodTypeAny, {
169
+ completed: boolean;
170
+ updatedAt: string;
171
+ runId: string;
172
+ startedAt: string;
173
+ steps: {
174
+ provider: string;
175
+ status: "completed" | "blocked";
176
+ stepId: string;
177
+ kind: "api_call" | "browser_task" | "manual_checkpoint" | "verify" | "persist_secret";
178
+ detail: string;
179
+ updatedAt: string;
180
+ }[];
181
+ }, {
182
+ completed: boolean;
183
+ updatedAt: string;
184
+ runId: string;
185
+ startedAt: string;
186
+ steps: {
187
+ provider: string;
188
+ status: "completed" | "blocked";
189
+ stepId: string;
190
+ kind: "api_call" | "browser_task" | "manual_checkpoint" | "verify" | "persist_secret";
191
+ detail: string;
192
+ updatedAt: string;
193
+ }[];
194
+ }>, "many">;
195
+ }, "strip", z.ZodTypeAny, {
196
+ runs: {
197
+ completed: boolean;
198
+ updatedAt: string;
199
+ runId: string;
200
+ startedAt: string;
201
+ steps: {
202
+ provider: string;
203
+ status: "completed" | "blocked";
204
+ stepId: string;
205
+ kind: "api_call" | "browser_task" | "manual_checkpoint" | "verify" | "persist_secret";
206
+ detail: string;
207
+ updatedAt: string;
208
+ }[];
209
+ }[];
210
+ }, {
211
+ runs: {
212
+ completed: boolean;
213
+ updatedAt: string;
214
+ runId: string;
215
+ startedAt: string;
216
+ steps: {
217
+ provider: string;
218
+ status: "completed" | "blocked";
219
+ stepId: string;
220
+ kind: "api_call" | "browser_task" | "manual_checkpoint" | "verify" | "persist_secret";
221
+ detail: string;
222
+ updatedAt: string;
223
+ }[];
224
+ }[];
225
+ }>>;
226
+ }, "strip", z.ZodTypeAny, {
227
+ updatedAt: string;
228
+ schema: "one-identity/v1";
229
+ packId: string;
230
+ createdAt: string;
231
+ accounts: {
232
+ telegram?: {
233
+ identityId: string;
234
+ provider: "telegram";
235
+ botUsername: string;
236
+ tokenRef: string;
237
+ } | undefined;
238
+ slack?: {
239
+ identityId: string;
240
+ provider: "slack";
241
+ botTokenRef: string;
242
+ appTokenRef: string;
243
+ } | undefined;
244
+ bitwarden?: {
245
+ vault: string;
246
+ itemRefs: string[];
247
+ provider: "bitwarden";
248
+ accountEmail: string;
249
+ sessionRef?: string | undefined;
250
+ masterPasswordRef?: string | undefined;
251
+ } | undefined;
252
+ email?: {
253
+ provider: "agentmail";
254
+ inboxId: string;
255
+ address: string;
256
+ apiKeyRef: string;
257
+ webhookSecretRef?: string | undefined;
258
+ } | undefined;
259
+ };
260
+ targets: ("owpenbot" | "openclaw" | "nanoclaw")[];
261
+ provisioning?: {
262
+ runs: {
263
+ completed: boolean;
264
+ updatedAt: string;
265
+ runId: string;
266
+ startedAt: string;
267
+ steps: {
268
+ provider: string;
269
+ status: "completed" | "blocked";
270
+ stepId: string;
271
+ kind: "api_call" | "browser_task" | "manual_checkpoint" | "verify" | "persist_secret";
272
+ detail: string;
273
+ updatedAt: string;
274
+ }[];
275
+ }[];
276
+ } | undefined;
277
+ }, {
278
+ updatedAt: string;
279
+ schema: "one-identity/v1";
280
+ packId: string;
281
+ createdAt: string;
282
+ accounts: {
283
+ telegram?: {
284
+ identityId: string;
285
+ provider: "telegram";
286
+ botUsername: string;
287
+ tokenRef: string;
288
+ } | undefined;
289
+ slack?: {
290
+ identityId: string;
291
+ provider: "slack";
292
+ botTokenRef: string;
293
+ appTokenRef: string;
294
+ } | undefined;
295
+ bitwarden?: {
296
+ vault: string;
297
+ provider: "bitwarden";
298
+ accountEmail: string;
299
+ sessionRef?: string | undefined;
300
+ itemRefs?: string[] | undefined;
301
+ masterPasswordRef?: string | undefined;
302
+ } | undefined;
303
+ email?: {
304
+ provider: "agentmail";
305
+ inboxId: string;
306
+ address: string;
307
+ apiKeyRef: string;
308
+ webhookSecretRef?: string | undefined;
309
+ } | undefined;
310
+ };
311
+ targets?: ("owpenbot" | "openclaw" | "nanoclaw")[] | undefined;
312
+ provisioning?: {
313
+ runs: {
314
+ completed: boolean;
315
+ updatedAt: string;
316
+ runId: string;
317
+ startedAt: string;
318
+ steps: {
319
+ provider: string;
320
+ status: "completed" | "blocked";
321
+ stepId: string;
322
+ kind: "api_call" | "browser_task" | "manual_checkpoint" | "verify" | "persist_secret";
323
+ detail: string;
324
+ updatedAt: string;
325
+ }[];
326
+ }[];
327
+ } | undefined;
328
+ }>;
329
+ export declare function validatePack(input: unknown): IdentityPack;
330
+ export declare function isTargetId(value: string): value is (typeof TARGETS)[number];
@@ -0,0 +1,72 @@
1
+ import { z } from "zod";
2
+ import { PACK_SCHEMA_VERSION, TARGETS } from "./types.js";
3
+ const secretRef = z.string().regex(/^secret:\/\/[a-zA-Z0-9_.-]+\/[a-zA-Z0-9_.-]+\/[a-zA-Z0-9_.-]+$/, {
4
+ message: "Invalid secret reference. Expected secret://pack/provider/key",
5
+ });
6
+ const emailAccount = z.object({
7
+ provider: z.literal("agentmail"),
8
+ inboxId: z.string().min(1),
9
+ address: z.string().email(),
10
+ apiKeyRef: secretRef,
11
+ webhookSecretRef: secretRef.optional(),
12
+ });
13
+ const telegramAccount = z.object({
14
+ provider: z.literal("telegram"),
15
+ identityId: z.string().min(1),
16
+ botUsername: z.string().min(1),
17
+ tokenRef: secretRef,
18
+ });
19
+ const slackAccount = z.object({
20
+ provider: z.literal("slack"),
21
+ identityId: z.string().min(1),
22
+ botTokenRef: secretRef,
23
+ appTokenRef: secretRef,
24
+ });
25
+ const bitwardenAccount = z.object({
26
+ provider: z.literal("bitwarden"),
27
+ accountEmail: z.string().email(),
28
+ vault: z.string().min(1),
29
+ itemRefs: z.array(z.string().min(1)).default([]),
30
+ sessionRef: secretRef.optional(),
31
+ masterPasswordRef: secretRef.optional(),
32
+ });
33
+ const provisioningStepSchema = z.object({
34
+ provider: z.string().min(1),
35
+ stepId: z.string().min(1),
36
+ kind: z.enum(["api_call", "browser_task", "manual_checkpoint", "verify", "persist_secret"]),
37
+ status: z.enum(["completed", "blocked"]),
38
+ detail: z.string().min(1),
39
+ updatedAt: z.string().datetime(),
40
+ });
41
+ const provisioningRunSchema = z.object({
42
+ runId: z.string().min(1),
43
+ startedAt: z.string().datetime(),
44
+ updatedAt: z.string().datetime(),
45
+ completed: z.boolean(),
46
+ steps: z.array(provisioningStepSchema),
47
+ });
48
+ export const identityPackSchema = z.object({
49
+ schema: z.literal(PACK_SCHEMA_VERSION),
50
+ packId: z.string().regex(/^[a-zA-Z0-9_.-]+$/),
51
+ createdAt: z.string().datetime(),
52
+ updatedAt: z.string().datetime(),
53
+ accounts: z.object({
54
+ email: emailAccount.optional(),
55
+ telegram: telegramAccount.optional(),
56
+ slack: slackAccount.optional(),
57
+ bitwarden: bitwardenAccount.optional(),
58
+ }),
59
+ targets: z.array(z.enum(TARGETS)).default([]),
60
+ provisioning: z
61
+ .object({
62
+ runs: z.array(provisioningRunSchema),
63
+ })
64
+ .optional(),
65
+ });
66
+ export function validatePack(input) {
67
+ return identityPackSchema.parse(input);
68
+ }
69
+ export function isTargetId(value) {
70
+ return TARGETS.includes(value);
71
+ }
72
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function buildSecretRef(packId: string, provider: string, key: string): string;
2
+ export declare function parseSecretRef(ref: string): {
3
+ packId: string;
4
+ provider: string;
5
+ key: string;
6
+ } | undefined;
7
+ export declare function setSecret(packId: string, provider: string, key: string, value: string): string;
8
+ export declare function resolveSecret(ref: string): string | undefined;
9
+ export declare function redactString(input: string): string;
@@ -0,0 +1,65 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { readJsonFile } from "./fs.js";
4
+ import { getPaths } from "./paths.js";
5
+ const BUNDLE_VERSION = 1;
6
+ function secretFilePath(packId) {
7
+ return path.join(getPaths().secretsDir, `${packId}.json`);
8
+ }
9
+ function bundleTemplate() {
10
+ return {
11
+ version: BUNDLE_VERSION,
12
+ updatedAt: new Date().toISOString(),
13
+ values: {},
14
+ };
15
+ }
16
+ function loadBundle(packId) {
17
+ const loaded = readJsonFile(secretFilePath(packId));
18
+ if (!loaded)
19
+ return bundleTemplate();
20
+ return {
21
+ version: BUNDLE_VERSION,
22
+ updatedAt: loaded.updatedAt || new Date().toISOString(),
23
+ values: loaded.values || {},
24
+ };
25
+ }
26
+ function saveBundle(packId, bundle) {
27
+ const filePath = secretFilePath(packId);
28
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
29
+ fs.writeFileSync(filePath, `${JSON.stringify(bundle, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
30
+ try {
31
+ fs.chmodSync(filePath, 0o600);
32
+ }
33
+ catch {
34
+ // best-effort permissions hardening
35
+ }
36
+ }
37
+ export function buildSecretRef(packId, provider, key) {
38
+ return `secret://${packId}/${provider}/${key}`;
39
+ }
40
+ export function parseSecretRef(ref) {
41
+ const m = /^secret:\/\/([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+)$/.exec(ref);
42
+ if (!m)
43
+ return undefined;
44
+ return { packId: m[1], provider: m[2], key: m[3] };
45
+ }
46
+ export function setSecret(packId, provider, key, value) {
47
+ const bundle = loadBundle(packId);
48
+ bundle.values[`${provider}.${key}`] = value;
49
+ bundle.updatedAt = new Date().toISOString();
50
+ saveBundle(packId, bundle);
51
+ return buildSecretRef(packId, provider, key);
52
+ }
53
+ export function resolveSecret(ref) {
54
+ const parsed = parseSecretRef(ref);
55
+ if (!parsed)
56
+ return undefined;
57
+ const bundle = loadBundle(parsed.packId);
58
+ return bundle.values[`${parsed.provider}.${parsed.key}`];
59
+ }
60
+ export function redactString(input) {
61
+ if (input.length <= 8)
62
+ return "********";
63
+ return `${input.slice(0, 4)}...${input.slice(-4)}`;
64
+ }
65
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/core/secrets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ export declare const PACK_SCHEMA_VERSION: "one-identity/v1";
2
+ export declare const TARGETS: readonly ["owpenbot", "openclaw", "nanoclaw"];
3
+ export type TargetId = (typeof TARGETS)[number];
4
+ export type AgentmailEmailAccount = {
5
+ provider: "agentmail";
6
+ inboxId: string;
7
+ address: string;
8
+ apiKeyRef: string;
9
+ webhookSecretRef?: string;
10
+ };
11
+ export type TelegramAccount = {
12
+ provider: "telegram";
13
+ identityId: string;
14
+ botUsername: string;
15
+ tokenRef: string;
16
+ };
17
+ export type SlackAccount = {
18
+ provider: "slack";
19
+ identityId: string;
20
+ botTokenRef: string;
21
+ appTokenRef: string;
22
+ };
23
+ export type BitwardenAccount = {
24
+ provider: "bitwarden";
25
+ accountEmail: string;
26
+ vault: string;
27
+ itemRefs: string[];
28
+ sessionRef?: string;
29
+ masterPasswordRef?: string;
30
+ };
31
+ export type ProvisioningStepLog = {
32
+ provider: string;
33
+ stepId: string;
34
+ kind: "api_call" | "browser_task" | "manual_checkpoint" | "verify" | "persist_secret";
35
+ status: "completed" | "blocked";
36
+ detail: string;
37
+ updatedAt: string;
38
+ };
39
+ export type ProvisioningRunLog = {
40
+ runId: string;
41
+ startedAt: string;
42
+ updatedAt: string;
43
+ completed: boolean;
44
+ steps: ProvisioningStepLog[];
45
+ };
46
+ export type IdentityPack = {
47
+ schema: typeof PACK_SCHEMA_VERSION;
48
+ packId: string;
49
+ createdAt: string;
50
+ updatedAt: string;
51
+ accounts: {
52
+ email?: AgentmailEmailAccount;
53
+ telegram?: TelegramAccount;
54
+ slack?: SlackAccount;
55
+ bitwarden?: BitwardenAccount;
56
+ };
57
+ targets: TargetId[];
58
+ provisioning?: {
59
+ runs: ProvisioningRunLog[];
60
+ };
61
+ };
62
+ export type SecretBundle = {
63
+ version: 1;
64
+ updatedAt: string;
65
+ values: Record<string, string>;
66
+ };
67
+ export type AdapterContext = {
68
+ resolveSecret: (ref: string) => string | undefined;
69
+ };
@@ -0,0 +1,3 @@
1
+ export const PACK_SCHEMA_VERSION = "one-identity/v1";
2
+ export const TARGETS = ["owpenbot", "openclaw", "nanoclaw"];
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAA0B,CAAC;AAE9D,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { IdentityPack } from "./types.js";
2
+ import type { ProvisionRunState, StepKind } from "./run-state.js";
3
+ export type WorkflowStepResult = {
4
+ status: "completed";
5
+ detail?: string;
6
+ } | {
7
+ status: "blocked";
8
+ detail: string;
9
+ };
10
+ export type WorkflowStepContext = {
11
+ pack: IdentityPack;
12
+ nonInteractive: boolean;
13
+ options: Record<string, string | boolean | undefined>;
14
+ state: Record<string, string>;
15
+ getOption: (key: string) => string | undefined;
16
+ getFlag: (key: string) => boolean;
17
+ ask: (prompt: string) => Promise<string | undefined>;
18
+ setData: (key: string, value: string) => void;
19
+ getData: (key: string) => string | undefined;
20
+ putSecret: (provider: string, key: string, value: string) => string;
21
+ resolveSecret: (ref: string) => string | undefined;
22
+ updatePack: (next: IdentityPack) => void;
23
+ log: (message: string) => void;
24
+ };
25
+ export type WorkflowStep = {
26
+ id: string;
27
+ kind: StepKind;
28
+ detail: string;
29
+ run: (ctx: WorkflowStepContext) => Promise<WorkflowStepResult>;
30
+ };
31
+ export type ProviderWorkflow = {
32
+ provider: string;
33
+ steps: WorkflowStep[];
34
+ };
35
+ export type WorkflowRunResult = {
36
+ status: "completed" | "blocked";
37
+ blockedStepId?: string;
38
+ blockedReason?: string;
39
+ };
40
+ export declare function runProviderWorkflow(input: {
41
+ workflow: ProviderWorkflow;
42
+ run: ProvisionRunState;
43
+ pack: IdentityPack;
44
+ options: Record<string, string | boolean | undefined>;
45
+ nonInteractive: boolean;
46
+ ask: (prompt: string) => Promise<string | undefined>;
47
+ log: (message: string) => void;
48
+ }): Promise<WorkflowRunResult>;