business-as-code 2.3.0 → 2.4.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 (213) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +43 -0
  3. package/dist/business.d.ts +62 -0
  4. package/dist/business.d.ts.map +1 -0
  5. package/dist/business.js +109 -0
  6. package/dist/business.js.map +1 -0
  7. package/dist/dollar.d.ts +60 -0
  8. package/dist/dollar.d.ts.map +1 -0
  9. package/dist/dollar.js +107 -0
  10. package/dist/dollar.js.map +1 -0
  11. package/dist/entities/assets.d.ts +21 -0
  12. package/dist/entities/assets.d.ts.map +1 -0
  13. package/dist/entities/assets.js +323 -0
  14. package/dist/entities/assets.js.map +1 -0
  15. package/dist/entities/business.d.ts +36 -0
  16. package/dist/entities/business.d.ts.map +1 -0
  17. package/dist/entities/business.js +370 -0
  18. package/dist/entities/business.js.map +1 -0
  19. package/dist/entities/communication.d.ts +21 -0
  20. package/dist/entities/communication.d.ts.map +1 -0
  21. package/dist/entities/communication.js +255 -0
  22. package/dist/entities/communication.js.map +1 -0
  23. package/dist/entities/customers.d.ts +58 -0
  24. package/dist/entities/customers.d.ts.map +1 -0
  25. package/dist/entities/customers.js +989 -0
  26. package/dist/entities/customers.js.map +1 -0
  27. package/dist/entities/financials.d.ts +59 -0
  28. package/dist/entities/financials.d.ts.map +1 -0
  29. package/dist/entities/financials.js +932 -0
  30. package/dist/entities/financials.js.map +1 -0
  31. package/dist/entities/goals.d.ts +58 -0
  32. package/dist/entities/goals.d.ts.map +1 -0
  33. package/dist/entities/goals.js +800 -0
  34. package/dist/entities/goals.js.map +1 -0
  35. package/dist/entities/index.d.ts +299 -0
  36. package/dist/entities/index.d.ts.map +1 -0
  37. package/dist/entities/index.js +198 -0
  38. package/dist/entities/index.js.map +1 -0
  39. package/dist/entities/legal.d.ts +21 -0
  40. package/dist/entities/legal.d.ts.map +1 -0
  41. package/dist/entities/legal.js +301 -0
  42. package/dist/entities/legal.js.map +1 -0
  43. package/dist/entities/market.d.ts +21 -0
  44. package/dist/entities/market.d.ts.map +1 -0
  45. package/dist/entities/market.js +301 -0
  46. package/dist/entities/market.js.map +1 -0
  47. package/dist/entities/marketing.d.ts +67 -0
  48. package/dist/entities/marketing.d.ts.map +1 -0
  49. package/dist/entities/marketing.js +1157 -0
  50. package/dist/entities/marketing.js.map +1 -0
  51. package/dist/entities/offerings.d.ts +51 -0
  52. package/dist/entities/offerings.d.ts.map +1 -0
  53. package/dist/entities/offerings.js +727 -0
  54. package/dist/entities/offerings.js.map +1 -0
  55. package/dist/entities/operations.d.ts +58 -0
  56. package/dist/entities/operations.d.ts.map +1 -0
  57. package/dist/entities/operations.js +787 -0
  58. package/dist/entities/operations.js.map +1 -0
  59. package/dist/entities/organization.d.ts +61 -0
  60. package/dist/entities/organization.d.ts.map +1 -0
  61. package/dist/entities/organization.js +816 -0
  62. package/dist/entities/organization.js.map +1 -0
  63. package/dist/entities/partnerships.d.ts +21 -0
  64. package/dist/entities/partnerships.d.ts.map +1 -0
  65. package/dist/entities/partnerships.js +300 -0
  66. package/dist/entities/partnerships.js.map +1 -0
  67. package/dist/entities/planning.d.ts +87 -0
  68. package/dist/entities/planning.d.ts.map +1 -0
  69. package/dist/entities/planning.js +271 -0
  70. package/dist/entities/planning.js.map +1 -0
  71. package/dist/entities/projects.d.ts +25 -0
  72. package/dist/entities/projects.d.ts.map +1 -0
  73. package/dist/entities/projects.js +349 -0
  74. package/dist/entities/projects.js.map +1 -0
  75. package/dist/entities/risk.d.ts +21 -0
  76. package/dist/entities/risk.d.ts.map +1 -0
  77. package/dist/entities/risk.js +293 -0
  78. package/dist/entities/risk.js.map +1 -0
  79. package/dist/entities/sales.d.ts +72 -0
  80. package/dist/entities/sales.d.ts.map +1 -0
  81. package/dist/entities/sales.js +1248 -0
  82. package/dist/entities/sales.js.map +1 -0
  83. package/dist/finance/account.d.ts +44 -0
  84. package/dist/finance/account.d.ts.map +1 -0
  85. package/dist/finance/account.js +6 -0
  86. package/dist/finance/account.js.map +1 -0
  87. package/dist/finance/authority.d.ts +78 -0
  88. package/dist/finance/authority.d.ts.map +1 -0
  89. package/dist/finance/authority.js +27 -0
  90. package/dist/finance/authority.js.map +1 -0
  91. package/dist/finance/card.d.ts +36 -0
  92. package/dist/finance/card.d.ts.map +1 -0
  93. package/dist/finance/card.js +6 -0
  94. package/dist/finance/card.js.map +1 -0
  95. package/dist/finance/identity.d.ts +30 -0
  96. package/dist/finance/identity.d.ts.map +1 -0
  97. package/dist/finance/identity.js +8 -0
  98. package/dist/finance/identity.js.map +1 -0
  99. package/dist/finance/index.d.ts +36 -0
  100. package/dist/finance/index.d.ts.map +1 -0
  101. package/dist/finance/index.js +22 -0
  102. package/dist/finance/index.js.map +1 -0
  103. package/dist/finance/ledger.d.ts +24 -0
  104. package/dist/finance/ledger.d.ts.map +1 -0
  105. package/dist/finance/ledger.js +8 -0
  106. package/dist/finance/ledger.js.map +1 -0
  107. package/dist/finance/merchant.d.ts +129 -0
  108. package/dist/finance/merchant.d.ts.map +1 -0
  109. package/dist/finance/merchant.js +21 -0
  110. package/dist/finance/merchant.js.map +1 -0
  111. package/dist/finance/outcome-contract.d.ts +139 -0
  112. package/dist/finance/outcome-contract.d.ts.map +1 -0
  113. package/dist/finance/outcome-contract.js +27 -0
  114. package/dist/finance/outcome-contract.js.map +1 -0
  115. package/dist/finance/port.d.ts +121 -0
  116. package/dist/finance/port.d.ts.map +1 -0
  117. package/dist/finance/port.js +10 -0
  118. package/dist/finance/port.js.map +1 -0
  119. package/dist/finance/pricing.d.ts +154 -0
  120. package/dist/finance/pricing.d.ts.map +1 -0
  121. package/dist/finance/pricing.js +79 -0
  122. package/dist/finance/pricing.js.map +1 -0
  123. package/dist/finance/proof-predicate.d.ts +92 -0
  124. package/dist/finance/proof-predicate.d.ts.map +1 -0
  125. package/dist/finance/proof-predicate.js +80 -0
  126. package/dist/finance/proof-predicate.js.map +1 -0
  127. package/dist/finance/refund.d.ts +44 -0
  128. package/dist/finance/refund.d.ts.map +1 -0
  129. package/dist/finance/refund.js +41 -0
  130. package/dist/finance/refund.js.map +1 -0
  131. package/dist/finance/sla.d.ts +25 -0
  132. package/dist/finance/sla.d.ts.map +1 -0
  133. package/dist/finance/sla.js +7 -0
  134. package/dist/finance/sla.js.map +1 -0
  135. package/dist/finance/types.d.ts +79 -0
  136. package/dist/finance/types.d.ts.map +1 -0
  137. package/dist/finance/types.js +8 -0
  138. package/dist/finance/types.js.map +1 -0
  139. package/dist/financials.d.ts +130 -0
  140. package/dist/financials.d.ts.map +1 -0
  141. package/dist/financials.js +297 -0
  142. package/dist/financials.js.map +1 -0
  143. package/dist/goals.d.ts +106 -0
  144. package/dist/goals.d.ts.map +1 -0
  145. package/dist/goals.js +284 -0
  146. package/dist/goals.js.map +1 -0
  147. package/dist/index.d.ts +101 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +144 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/kpis.d.ts +137 -0
  152. package/dist/kpis.d.ts.map +1 -0
  153. package/dist/kpis.js +297 -0
  154. package/dist/kpis.js.map +1 -0
  155. package/dist/metrics.d.ts +448 -0
  156. package/dist/metrics.d.ts.map +1 -0
  157. package/dist/metrics.js +330 -0
  158. package/dist/metrics.js.map +1 -0
  159. package/dist/okrs.d.ts +157 -0
  160. package/dist/okrs.d.ts.map +1 -0
  161. package/dist/okrs.js +391 -0
  162. package/dist/okrs.js.map +1 -0
  163. package/dist/organization.d.ts +585 -0
  164. package/dist/organization.d.ts.map +1 -0
  165. package/dist/organization.js +173 -0
  166. package/dist/organization.js.map +1 -0
  167. package/dist/process.d.ts +112 -0
  168. package/dist/process.d.ts.map +1 -0
  169. package/dist/process.js +242 -0
  170. package/dist/process.js.map +1 -0
  171. package/dist/product.d.ts +85 -0
  172. package/dist/product.d.ts.map +1 -0
  173. package/dist/product.js +145 -0
  174. package/dist/product.js.map +1 -0
  175. package/dist/queries.d.ts +304 -0
  176. package/dist/queries.d.ts.map +1 -0
  177. package/dist/queries.js +577 -0
  178. package/dist/queries.js.map +1 -0
  179. package/dist/roles.d.ts +334 -0
  180. package/dist/roles.d.ts.map +1 -0
  181. package/dist/roles.js +282 -0
  182. package/dist/roles.js.map +1 -0
  183. package/dist/service.d.ts +61 -0
  184. package/dist/service.d.ts.map +1 -0
  185. package/dist/service.js +140 -0
  186. package/dist/service.js.map +1 -0
  187. package/dist/types.d.ts +459 -0
  188. package/dist/types.d.ts.map +1 -0
  189. package/dist/types.js +5 -0
  190. package/dist/types.js.map +1 -0
  191. package/dist/vision.d.ts +38 -0
  192. package/dist/vision.d.ts.map +1 -0
  193. package/dist/vision.js +68 -0
  194. package/dist/vision.js.map +1 -0
  195. package/dist/workflow.d.ts +115 -0
  196. package/dist/workflow.d.ts.map +1 -0
  197. package/dist/workflow.js +248 -0
  198. package/dist/workflow.js.map +1 -0
  199. package/package.json +8 -4
  200. package/src/finance/account.ts +48 -0
  201. package/src/finance/authority.ts +42 -0
  202. package/src/finance/card.ts +38 -0
  203. package/src/finance/identity.ts +31 -0
  204. package/src/finance/index.ts +117 -0
  205. package/src/finance/ledger.ts +26 -0
  206. package/src/finance/merchant.ts +127 -0
  207. package/src/finance/outcome-contract.ts +157 -0
  208. package/src/finance/port.ts +144 -0
  209. package/src/finance/pricing.ts +197 -0
  210. package/src/finance/proof-predicate.ts +106 -0
  211. package/src/finance/refund.ts +52 -0
  212. package/src/finance/sla.ts +33 -0
  213. package/src/finance/types.ts +75 -0
@@ -0,0 +1,334 @@
1
+ /**
2
+ * Business Roles - Bridges digital-workers and ai-database authorization
3
+ *
4
+ * Connects:
5
+ * - WorkerRole (business role: CEO, Engineer, Manager)
6
+ * - Authorization Role (FGA/RBAC: permissions, access control)
7
+ * - Task Assignment (who handles what in workflows/processes)
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ import type { Role as OrgRole, RoleType as OrgRoleType, RoleWorkerType } from 'org.ai';
12
+ import type { WorkerRef } from 'digital-workers';
13
+ export type { Worker, WorkerRef } from 'digital-workers';
14
+ export type { OrgRole, OrgRoleType, RoleWorkerType };
15
+ /**
16
+ * Business role type - the function of a worker in the organization
17
+ */
18
+ export type BusinessRoleType = 'ceo' | 'cto' | 'cfo' | 'coo' | 'cmo' | 'cpo' | 'director' | 'manager' | 'lead' | 'supervisor' | 'engineer' | 'designer' | 'analyst' | 'specialist' | 'coordinator' | 'operator' | 'agent' | 'assistant' | string;
19
+ /**
20
+ * Business Role - extends org.ai Role with authorization and task capabilities
21
+ *
22
+ * Composes with org.ai Role to provide additional business-specific properties
23
+ * like authorization permissions, task capabilities, and compensation.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const engineeringManager: BusinessRole = {
28
+ * id: 'role_eng_manager',
29
+ * name: 'Engineering Manager',
30
+ * type: 'manager',
31
+ * department: 'Engineering',
32
+ * description: 'Leads engineering team and makes technical decisions',
33
+ *
34
+ * // From org.ai Role
35
+ * skills: ['TypeScript', 'Architecture', 'Team Leadership'],
36
+ *
37
+ * // Business responsibilities
38
+ * responsibilities: [
39
+ * 'Lead engineering team',
40
+ * 'Make architecture decisions',
41
+ * 'Conduct code reviews',
42
+ * ],
43
+ *
44
+ * // Authorization permissions (from FGA)
45
+ * permissions: {
46
+ * repository: ['read', 'edit', 'act:merge', 'act:deploy'],
47
+ * project: ['read', 'edit', 'manage'],
48
+ * team: ['read', 'edit'],
49
+ * },
50
+ *
51
+ * // Task capabilities
52
+ * canHandle: ['code-review', 'architecture-decision', 'deployment-approval'],
53
+ * canDelegate: ['code-review', 'testing'],
54
+ * canApprove: ['pull-request', 'deployment', 'budget-under-5k'],
55
+ *
56
+ * // Worker type preference
57
+ * workerType: 'human',
58
+ * }
59
+ * ```
60
+ */
61
+ export interface BusinessRole extends Omit<OrgRole, 'permissions'> {
62
+ /** Role type classification (overrides OrgRole.type with business-specific types) */
63
+ type: BusinessRoleType;
64
+ /**
65
+ * Authorization permissions by resource type
66
+ *
67
+ * Maps resource types to allowed actions:
68
+ * - 'read', 'edit', 'delete', 'manage' (standard)
69
+ * - 'act:*' or 'act:verb' (domain-specific verbs)
70
+ *
71
+ * Note: This differs from OrgRole.permissions which is string[]
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * permissions: {
76
+ * document: ['read', 'edit'],
77
+ * invoice: ['read', 'act:send', 'act:void'],
78
+ * project: ['read', 'edit', 'manage'],
79
+ * }
80
+ * ```
81
+ */
82
+ permissions?: Record<string, string[]>;
83
+ /** Compensation band */
84
+ compensationBand?: string;
85
+ }
86
+ /**
87
+ * Task status
88
+ */
89
+ export type TaskStatus = 'pending' | 'assigned' | 'in_progress' | 'blocked' | 'completed' | 'failed' | 'cancelled';
90
+ /**
91
+ * Task priority
92
+ */
93
+ export type TaskPriority = 'low' | 'normal' | 'high' | 'urgent' | 'critical';
94
+ /**
95
+ * Task assignment - links a worker to a task
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * const assignment: TaskAssignment = {
100
+ * id: 'assign_123',
101
+ * taskId: 'task_review_pr_456',
102
+ * taskType: 'code-review',
103
+ *
104
+ * // Who is assigned
105
+ * assignee: { type: 'worker', id: 'worker_alice' },
106
+ * role: 'role_eng_manager',
107
+ *
108
+ * // From what process/workflow
109
+ * processId: 'process_code_review',
110
+ * stepId: 'step_1_review',
111
+ *
112
+ * // Status and timing
113
+ * status: 'in_progress',
114
+ * priority: 'high',
115
+ * assignedAt: new Date(),
116
+ * dueAt: new Date(Date.now() + 24 * 60 * 60 * 1000),
117
+ *
118
+ * // Context
119
+ * context: {
120
+ * pullRequestId: 'pr_789',
121
+ * repository: 'acme/webapp',
122
+ * },
123
+ * }
124
+ * ```
125
+ */
126
+ export interface TaskAssignment {
127
+ /** Unique assignment ID */
128
+ id: string;
129
+ /** Task identifier */
130
+ taskId: string;
131
+ /** Task type (for routing) */
132
+ taskType: string;
133
+ /** Task description */
134
+ description?: string;
135
+ /** Who is assigned */
136
+ assignee: AssigneeRef;
137
+ /** Required role for this task */
138
+ role?: string;
139
+ /** Source process ID */
140
+ processId?: string;
141
+ /** Source workflow ID */
142
+ workflowId?: string;
143
+ /** Step ID within process/workflow */
144
+ stepId?: string;
145
+ /** Current status */
146
+ status: TaskStatus;
147
+ /** Priority */
148
+ priority?: TaskPriority;
149
+ /** When assigned */
150
+ assignedAt: Date;
151
+ /** Who assigned it */
152
+ assignedBy?: AssigneeRef;
153
+ /** Due date */
154
+ dueAt?: Date;
155
+ /** Started at */
156
+ startedAt?: Date;
157
+ /** Completed at */
158
+ completedAt?: Date;
159
+ /** Task context/data */
160
+ context?: Record<string, unknown>;
161
+ /** Task result */
162
+ result?: unknown;
163
+ /** Notes */
164
+ notes?: string;
165
+ /** Metadata */
166
+ metadata?: Record<string, unknown>;
167
+ }
168
+ /**
169
+ * Reference to an assignee (worker, team, or role)
170
+ *
171
+ * Compatible with digital-workers WorkerRef for worker assignments.
172
+ */
173
+ export interface AssigneeRef {
174
+ /** Type of assignee */
175
+ type: 'worker' | 'team' | 'role';
176
+ /** Assignee ID */
177
+ id: string;
178
+ /** Display name */
179
+ name?: string;
180
+ }
181
+ /**
182
+ * Convert a digital-workers WorkerRef to an AssigneeRef
183
+ */
184
+ export declare function workerRefToAssignee(workerRef: WorkerRef): AssigneeRef;
185
+ /**
186
+ * Convert an AssigneeRef to a digital-workers WorkerRef (if type is 'worker')
187
+ */
188
+ export declare function assigneeToWorkerRef(assignee: AssigneeRef): WorkerRef | null;
189
+ /**
190
+ * Task routing rule - determines who handles what tasks
191
+ *
192
+ * @example
193
+ * ```ts
194
+ * const routingRules: TaskRoutingRule[] = [
195
+ * {
196
+ * taskType: 'code-review',
197
+ * requiredRole: 'engineer',
198
+ * requiredLevel: 2,
199
+ * requiredSkills: ['TypeScript'],
200
+ * preferWorkerType: 'human',
201
+ * },
202
+ * {
203
+ * taskType: 'expense-approval',
204
+ * requiredRole: 'manager',
205
+ * amountThreshold: 1000,
206
+ * escalateAbove: 5000, // Escalate to director above $5k
207
+ * escalateTo: 'director',
208
+ * },
209
+ * {
210
+ * taskType: 'customer-inquiry',
211
+ * requiredRole: 'agent',
212
+ * preferWorkerType: 'ai',
213
+ * fallbackTo: 'human', // Escalate to human if AI can't handle
214
+ * },
215
+ * ]
216
+ * ```
217
+ */
218
+ export interface TaskRoutingRule {
219
+ /** Task type this rule applies to */
220
+ taskType: string;
221
+ /** Required role type */
222
+ requiredRole?: BusinessRoleType;
223
+ /** Minimum level required */
224
+ requiredLevel?: number;
225
+ /** Required skills */
226
+ requiredSkills?: string[];
227
+ /** Required permissions */
228
+ requiredPermissions?: string[];
229
+ /** Preferred worker type */
230
+ preferWorkerType?: 'ai' | 'human' | 'hybrid';
231
+ /** Amount threshold (for approval tasks) */
232
+ amountThreshold?: number;
233
+ /** Amount above which to escalate */
234
+ escalateAbove?: number;
235
+ /** Role to escalate to */
236
+ escalateTo?: BusinessRoleType | string;
237
+ /** Fallback worker type if preferred unavailable */
238
+ fallbackTo?: 'ai' | 'human';
239
+ /** Priority for this task type */
240
+ defaultPriority?: TaskPriority;
241
+ /** SLA in minutes */
242
+ slaMinutes?: number;
243
+ /** Additional conditions */
244
+ conditions?: Record<string, unknown>;
245
+ }
246
+ /**
247
+ * Workflow role - defines a role within the context of a workflow
248
+ *
249
+ * @example
250
+ * ```ts
251
+ * const workflowRoles: WorkflowRole[] = [
252
+ * {
253
+ * name: 'Requester',
254
+ * description: 'Person who initiates the request',
255
+ * canInitiate: true,
256
+ * canView: ['all'],
257
+ * },
258
+ * {
259
+ * name: 'Approver',
260
+ * description: 'Person who approves or rejects',
261
+ * tasks: ['review', 'approve', 'reject'],
262
+ * canView: ['details', 'history'],
263
+ * requiredBusinessRole: 'manager',
264
+ * },
265
+ * {
266
+ * name: 'Processor',
267
+ * description: 'Person who processes after approval',
268
+ * tasks: ['process', 'complete'],
269
+ * requiredBusinessRole: 'operator',
270
+ * },
271
+ * ]
272
+ * ```
273
+ */
274
+ export interface WorkflowRole {
275
+ /** Role name within workflow */
276
+ name: string;
277
+ /** Description */
278
+ description?: string;
279
+ /** Can initiate this workflow */
280
+ canInitiate?: boolean;
281
+ /** Tasks this role handles */
282
+ tasks?: string[];
283
+ /** What this role can view */
284
+ canView?: string[];
285
+ /** Required business role */
286
+ requiredBusinessRole?: BusinessRoleType | string;
287
+ /** Required permissions */
288
+ requiredPermissions?: string[];
289
+ /** Minimum level */
290
+ minLevel?: number;
291
+ }
292
+ /**
293
+ * Standard business roles with typical permissions
294
+ */
295
+ export declare const StandardBusinessRoles: Record<string, Partial<BusinessRole>>;
296
+ /**
297
+ * Create a business role from a standard template
298
+ */
299
+ export declare function createBusinessRole(id: string, template: keyof typeof StandardBusinessRoles, overrides?: Partial<BusinessRole>): BusinessRole;
300
+ /**
301
+ * Check if a role has permission for an action on a resource type
302
+ */
303
+ export declare function hasPermission(role: BusinessRole, resourceType: string, action: string): boolean;
304
+ /**
305
+ * Check if a role can handle a task type
306
+ */
307
+ export declare function canHandleTask(role: BusinessRole, taskType: string): boolean;
308
+ /**
309
+ * Check if a role can approve a request type
310
+ */
311
+ export declare function canApproveRequest(role: BusinessRole, requestType: string): boolean;
312
+ /**
313
+ * Check if a role can delegate a task type
314
+ */
315
+ export declare function canDelegateTask(role: BusinessRole, taskType: string): boolean;
316
+ /**
317
+ * Find the best role for a task based on routing rules
318
+ */
319
+ export declare function findRoleForTask(taskType: string, rules: TaskRoutingRule[], context?: {
320
+ amount?: number;
321
+ skills?: string[];
322
+ }): TaskRoutingRule | undefined;
323
+ /**
324
+ * Create a task assignment
325
+ */
326
+ export declare function createTaskAssignment(taskId: string, taskType: string, assignee: AssigneeRef, options?: Partial<Omit<TaskAssignment, 'id' | 'taskId' | 'taskType' | 'assignee' | 'status' | 'assignedAt'>>): TaskAssignment;
327
+ /**
328
+ * Transition task assignment status
329
+ */
330
+ export declare function transitionTaskStatus(assignment: TaskAssignment, newStatus: TaskStatus, options?: {
331
+ result?: unknown;
332
+ notes?: string;
333
+ }): TaskAssignment;
334
+ //# sourceMappingURL=roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../src/roles.ts"],"names":[],"mappings":"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"}
package/dist/roles.js ADDED
@@ -0,0 +1,282 @@
1
+ /**
2
+ * Business Roles - Bridges digital-workers and ai-database authorization
3
+ *
4
+ * Connects:
5
+ * - WorkerRole (business role: CEO, Engineer, Manager)
6
+ * - Authorization Role (FGA/RBAC: permissions, access control)
7
+ * - Task Assignment (who handles what in workflows/processes)
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ /**
12
+ * Convert a digital-workers WorkerRef to an AssigneeRef
13
+ */
14
+ export function workerRefToAssignee(workerRef) {
15
+ const result = {
16
+ type: 'worker',
17
+ id: workerRef.id,
18
+ };
19
+ if (workerRef.name !== undefined) {
20
+ result.name = workerRef.name;
21
+ }
22
+ return result;
23
+ }
24
+ /**
25
+ * Convert an AssigneeRef to a digital-workers WorkerRef (if type is 'worker')
26
+ */
27
+ export function assigneeToWorkerRef(assignee) {
28
+ if (assignee.type !== 'worker')
29
+ return null;
30
+ const result = {
31
+ id: assignee.id,
32
+ };
33
+ if (assignee.name !== undefined) {
34
+ result.name = assignee.name;
35
+ }
36
+ return result;
37
+ }
38
+ // =============================================================================
39
+ // Standard Business Roles
40
+ // =============================================================================
41
+ /**
42
+ * Standard business roles with typical permissions
43
+ */
44
+ export const StandardBusinessRoles = {
45
+ // Executive
46
+ ceo: {
47
+ type: 'ceo',
48
+ name: 'Chief Executive Officer',
49
+ level: 10,
50
+ permissions: { '*': ['manage'] },
51
+ canApprove: ['*'],
52
+ workerType: 'human',
53
+ },
54
+ cto: {
55
+ type: 'cto',
56
+ name: 'Chief Technology Officer',
57
+ level: 10,
58
+ department: 'Technology',
59
+ permissions: {
60
+ technology: ['manage'],
61
+ repository: ['manage'],
62
+ infrastructure: ['manage'],
63
+ },
64
+ canApprove: ['technical-decision', 'architecture', 'technology-budget'],
65
+ workerType: 'human',
66
+ },
67
+ cfo: {
68
+ type: 'cfo',
69
+ name: 'Chief Financial Officer',
70
+ level: 10,
71
+ department: 'Finance',
72
+ permissions: {
73
+ finance: ['manage'],
74
+ budget: ['manage'],
75
+ expense: ['manage'],
76
+ },
77
+ canApprove: ['expense', 'budget', 'financial-decision'],
78
+ workerType: 'human',
79
+ },
80
+ // Management
81
+ director: {
82
+ type: 'director',
83
+ level: 8,
84
+ permissions: {
85
+ team: ['manage'],
86
+ project: ['manage'],
87
+ budget: ['read', 'edit'],
88
+ },
89
+ canApprove: ['hiring', 'budget-under-50k', 'project'],
90
+ workerType: 'human',
91
+ },
92
+ manager: {
93
+ type: 'manager',
94
+ level: 6,
95
+ permissions: {
96
+ team: ['read', 'edit'],
97
+ project: ['read', 'edit', 'manage'],
98
+ },
99
+ canApprove: ['expense-under-5k', 'time-off', 'code-review'],
100
+ workerType: 'human',
101
+ },
102
+ lead: {
103
+ type: 'lead',
104
+ level: 5,
105
+ permissions: {
106
+ team: ['read'],
107
+ project: ['read', 'edit'],
108
+ repository: ['read', 'edit', 'act:merge'],
109
+ },
110
+ canDelegate: ['code-review', 'testing'],
111
+ workerType: 'hybrid',
112
+ },
113
+ // Individual Contributors
114
+ engineer: {
115
+ type: 'engineer',
116
+ level: 3,
117
+ department: 'Engineering',
118
+ permissions: {
119
+ repository: ['read', 'edit'],
120
+ project: ['read'],
121
+ },
122
+ canHandle: ['coding', 'code-review', 'bug-fix', 'testing'],
123
+ workerType: 'hybrid',
124
+ },
125
+ analyst: {
126
+ type: 'analyst',
127
+ level: 3,
128
+ permissions: {
129
+ data: ['read'],
130
+ report: ['read', 'edit'],
131
+ },
132
+ canHandle: ['data-analysis', 'reporting', 'research'],
133
+ workerType: 'hybrid',
134
+ },
135
+ // Operations
136
+ agent: {
137
+ type: 'agent',
138
+ level: 2,
139
+ permissions: {
140
+ ticket: ['read', 'edit', 'act:respond', 'act:escalate'],
141
+ customer: ['read'],
142
+ },
143
+ canHandle: ['customer-inquiry', 'support-ticket', 'basic-troubleshooting'],
144
+ workerType: 'ai', // AI-first
145
+ },
146
+ assistant: {
147
+ type: 'assistant',
148
+ level: 1,
149
+ permissions: {
150
+ calendar: ['read', 'edit'],
151
+ email: ['read', 'act:draft'],
152
+ task: ['read', 'edit'],
153
+ },
154
+ canHandle: ['scheduling', 'email-draft', 'task-management', 'research'],
155
+ workerType: 'ai', // AI-first
156
+ },
157
+ };
158
+ // =============================================================================
159
+ // Helper Functions
160
+ // =============================================================================
161
+ /**
162
+ * Create a business role from a standard template
163
+ */
164
+ export function createBusinessRole(id, template, overrides) {
165
+ const standard = StandardBusinessRoles[template];
166
+ if (!standard) {
167
+ throw new Error(`Unknown role template: ${template}`);
168
+ }
169
+ return {
170
+ id,
171
+ name: standard['name'] || template,
172
+ type: standard['type'] || template,
173
+ ...standard,
174
+ ...overrides,
175
+ };
176
+ }
177
+ /**
178
+ * Check if a role has permission for an action on a resource type
179
+ */
180
+ export function hasPermission(role, resourceType, action) {
181
+ if (!role.permissions)
182
+ return false;
183
+ // Check wildcard permissions
184
+ const wildcardPerms = role.permissions['*'];
185
+ if (wildcardPerms) {
186
+ if (wildcardPerms.includes('manage') || wildcardPerms.includes('*'))
187
+ return true;
188
+ if (wildcardPerms.includes(action))
189
+ return true;
190
+ }
191
+ // Check resource-specific permissions
192
+ const resourcePerms = role.permissions[resourceType];
193
+ if (!resourcePerms)
194
+ return false;
195
+ // Check for exact match
196
+ if (resourcePerms.includes(action))
197
+ return true;
198
+ // Check for 'manage' which includes all actions
199
+ if (resourcePerms.includes('manage') || resourcePerms.includes('*'))
200
+ return true;
201
+ // Check for act:* pattern
202
+ if (action.startsWith('act:')) {
203
+ if (resourcePerms.includes('act:*'))
204
+ return true;
205
+ }
206
+ return false;
207
+ }
208
+ /**
209
+ * Check if a role can handle a task type
210
+ */
211
+ export function canHandleTask(role, taskType) {
212
+ if (!role['canHandle'])
213
+ return false;
214
+ return role['canHandle'].includes(taskType) || role['canHandle'].includes('*');
215
+ }
216
+ /**
217
+ * Check if a role can approve a request type
218
+ */
219
+ export function canApproveRequest(role, requestType) {
220
+ if (!role['canApprove'])
221
+ return false;
222
+ return role['canApprove'].includes(requestType) || role['canApprove'].includes('*');
223
+ }
224
+ /**
225
+ * Check if a role can delegate a task type
226
+ */
227
+ export function canDelegateTask(role, taskType) {
228
+ if (!role['canDelegate'])
229
+ return false;
230
+ return role['canDelegate'].includes(taskType) || role['canDelegate'].includes('*');
231
+ }
232
+ /**
233
+ * Find the best role for a task based on routing rules
234
+ */
235
+ export function findRoleForTask(taskType, rules, context) {
236
+ const matchingRules = rules.filter((rule) => rule.taskType === taskType);
237
+ if (matchingRules.length === 0)
238
+ return undefined;
239
+ // If there's an amount and escalation rules, check those
240
+ if (context?.amount) {
241
+ for (const rule of matchingRules) {
242
+ if (rule.escalateAbove && context.amount > rule.escalateAbove) {
243
+ // Find the escalated rule
244
+ const escalatedRule = rules.find((r) => r.taskType === taskType && r.requiredRole === rule.escalateTo);
245
+ if (escalatedRule)
246
+ return escalatedRule;
247
+ }
248
+ }
249
+ }
250
+ // Return the first matching rule
251
+ return matchingRules[0];
252
+ }
253
+ /**
254
+ * Create a task assignment
255
+ */
256
+ export function createTaskAssignment(taskId, taskType, assignee, options) {
257
+ return {
258
+ id: `assign_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`,
259
+ taskId,
260
+ taskType,
261
+ assignee,
262
+ status: 'assigned',
263
+ assignedAt: new Date(),
264
+ priority: 'normal',
265
+ ...options,
266
+ };
267
+ }
268
+ /**
269
+ * Transition task assignment status
270
+ */
271
+ export function transitionTaskStatus(assignment, newStatus, options) {
272
+ const now = new Date();
273
+ return {
274
+ ...assignment,
275
+ status: newStatus,
276
+ ...(newStatus === 'in_progress' && !assignment.startedAt ? { startedAt: now } : {}),
277
+ ...(newStatus === 'completed' || newStatus === 'failed' ? { completedAt: now } : {}),
278
+ ...(options?.result ? { result: options.result } : {}),
279
+ ...(options?.notes ? { notes: options.notes } : {}),
280
+ };
281
+ }
282
+ //# sourceMappingURL=roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../src/roles.ts"],"names":[],"mappings":"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"}