digital-workers 2.1.1 → 2.3.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.
- package/CHANGELOG.md +23 -0
- package/README.md +136 -180
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +34 -21
- package/dist/actions.js.map +1 -1
- package/dist/agent-comms.d.ts +438 -0
- package/dist/agent-comms.d.ts.map +1 -0
- package/dist/agent-comms.js +677 -0
- package/dist/agent-comms.js.map +1 -0
- package/dist/approve.d.ts +40 -8
- package/dist/approve.d.ts.map +1 -1
- package/dist/approve.js +86 -20
- package/dist/approve.js.map +1 -1
- package/dist/ask.d.ts +38 -7
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +85 -25
- package/dist/ask.js.map +1 -1
- package/dist/browse.d.ts +223 -0
- package/dist/browse.d.ts.map +1 -0
- package/dist/browse.js +392 -0
- package/dist/browse.js.map +1 -0
- package/dist/capability-tiers.d.ts +230 -0
- package/dist/capability-tiers.d.ts.map +1 -0
- package/dist/capability-tiers.js +388 -0
- package/dist/capability-tiers.js.map +1 -0
- package/dist/cascade-context.d.ts +523 -0
- package/dist/cascade-context.d.ts.map +1 -0
- package/dist/cascade-context.js +494 -0
- package/dist/cascade-context.js.map +1 -0
- package/dist/client.d.ts +162 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +64 -0
- package/dist/client.js.map +1 -0
- package/dist/decide.d.ts +42 -6
- package/dist/decide.d.ts.map +1 -1
- package/dist/decide.js +54 -11
- package/dist/decide.js.map +1 -1
- package/dist/do.d.ts +36 -7
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +82 -39
- package/dist/do.js.map +1 -1
- package/dist/error-escalation.d.ts +416 -0
- package/dist/error-escalation.d.ts.map +1 -0
- package/dist/error-escalation.js +656 -0
- package/dist/error-escalation.js.map +1 -0
- package/dist/generate.d.ts +48 -7
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +49 -8
- package/dist/generate.js.map +1 -1
- package/dist/goals.d.ts +10 -9
- package/dist/goals.d.ts.map +1 -1
- package/dist/goals.js +30 -24
- package/dist/goals.js.map +1 -1
- package/dist/image.d.ts +189 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +528 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +59 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +92 -2
- package/dist/index.js.map +1 -1
- package/dist/is.d.ts +45 -10
- package/dist/is.d.ts.map +1 -1
- package/dist/is.js +56 -21
- package/dist/is.js.map +1 -1
- package/dist/kpis.d.ts +24 -15
- package/dist/kpis.d.ts.map +1 -1
- package/dist/kpis.js +16 -14
- package/dist/kpis.js.map +1 -1
- package/dist/load-balancing.d.ts +395 -0
- package/dist/load-balancing.d.ts.map +1 -0
- package/dist/load-balancing.js +991 -0
- package/dist/load-balancing.js.map +1 -0
- package/dist/logger.d.ts +76 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +39 -0
- package/dist/logger.js.map +1 -0
- package/dist/notify.d.ts +38 -9
- package/dist/notify.d.ts.map +1 -1
- package/dist/notify.js +72 -17
- package/dist/notify.js.map +1 -1
- package/dist/role.d.ts +5 -4
- package/dist/role.d.ts.map +1 -1
- package/dist/role.js +13 -10
- package/dist/role.js.map +1 -1
- package/dist/runtime.d.ts +310 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +510 -0
- package/dist/runtime.js.map +1 -0
- package/dist/team.d.ts +11 -6
- package/dist/team.d.ts.map +1 -1
- package/dist/team.js +22 -15
- package/dist/team.js.map +1 -1
- package/dist/transports/email.d.ts +318 -0
- package/dist/transports/email.d.ts.map +1 -0
- package/dist/transports/email.js +779 -0
- package/dist/transports/email.js.map +1 -0
- package/dist/transports/slack.d.ts +515 -0
- package/dist/transports/slack.d.ts.map +1 -0
- package/dist/transports/slack.js +844 -0
- package/dist/transports/slack.js.map +1 -0
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +44 -25
- package/dist/transports.js.map +1 -1
- package/dist/types.d.ts +149 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/id.d.ts +19 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +21 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/video.d.ts +203 -0
- package/dist/video.d.ts.map +1 -0
- package/dist/video.js +528 -0
- package/dist/video.js.map +1 -0
- package/dist/worker.d.ts +343 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +698 -0
- package/dist/worker.js.map +1 -0
- package/package.json +24 -5
- package/src/actions.ts +48 -38
- package/src/agent-comms.ts +1200 -0
- package/src/approve.ts +91 -20
- package/src/ask.ts +99 -25
- package/src/browse.ts +627 -0
- package/src/capability-tiers.ts +545 -0
- package/src/cascade-context.ts +648 -0
- package/src/client.ts +221 -0
- package/src/decide.ts +81 -35
- package/src/do.ts +98 -52
- package/src/error-escalation.ts +1123 -0
- package/src/generate.ts +52 -18
- package/src/goals.ts +36 -27
- package/src/image.ts +816 -0
- package/src/index.ts +410 -2
- package/src/is.ts +59 -25
- package/src/kpis.ts +41 -36
- package/src/load-balancing.ts +1467 -0
- package/src/logger.ts +93 -0
- package/src/notify.ts +78 -17
- package/src/role.ts +30 -20
- package/src/runtime.ts +796 -0
- package/src/team.ts +24 -19
- package/src/transports/email.ts +1160 -0
- package/src/transports/slack.ts +1320 -0
- package/src/transports.ts +58 -43
- package/src/types.ts +182 -46
- package/src/utils/id.ts +21 -0
- package/src/video.ts +906 -0
- package/src/worker.ts +1007 -0
- package/test/agent-comms.test.ts +1397 -0
- package/test/approve.test.ts +305 -0
- package/test/ask.test.ts +274 -0
- package/test/browse.test.ts +361 -0
- package/test/capability-tiers.test.ts +631 -0
- package/test/cascade-context.test.ts +692 -0
- package/test/decide.test.ts +252 -0
- package/test/do.test.ts +144 -0
- package/test/error-escalation.test.ts +1205 -0
- package/test/error-logging.test.ts +357 -0
- package/test/generate.test.ts +319 -0
- package/test/image.test.ts +398 -0
- package/test/is.test.ts +287 -0
- package/test/load-balancing-safety.test.ts +404 -0
- package/test/load-balancing-thread-safety.test.ts +464 -0
- package/test/load-balancing.test.ts +1145 -0
- package/test/notify.test.ts +434 -0
- package/test/primitives.test.ts +320 -0
- package/test/runtime-integration.test.ts +892 -0
- package/test/transports/crypto.test.ts +230 -0
- package/test/transports/email.test.ts +866 -0
- package/test/transports/id-generation.test.ts +91 -0
- package/test/transports/slack.test.ts +760 -0
- package/test/type-safety.test.ts +834 -0
- package/test/types.test.ts +95 -2
- package/test/video.test.ts +530 -0
- package/test/worker.test.ts +1433 -0
- package/tsconfig.json +4 -1
- package/vitest.config.ts +42 -0
- package/wrangler.jsonc +36 -0
- package/.turbo/turbo-build.log +0 -5
- package/src/actions.js +0 -436
- package/src/approve.js +0 -234
- package/src/ask.js +0 -226
- package/src/decide.js +0 -244
- package/src/do.js +0 -227
- package/src/generate.js +0 -298
- package/src/goals.js +0 -205
- package/src/index.js +0 -68
- package/src/is.js +0 -317
- package/src/kpis.js +0 -270
- package/src/notify.js +0 -219
- package/src/role.js +0 -110
- package/src/team.js +0 -130
- package/src/transports.js +0 -357
- package/src/types.js +0 -71
package/dist/index.js
CHANGED
|
@@ -6,7 +6,29 @@
|
|
|
6
6
|
* defines a unified Worker interface that enables workflows to be designed
|
|
7
7
|
* once and executed by any combination of AI and human workers.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* ## Worker Routing vs ai-functions Primitives
|
|
10
|
+
*
|
|
11
|
+
* **IMPORTANT:** This package exports functions that overlap in name with
|
|
12
|
+
* `ai-functions` primitives (do, ask, decide, approve, generate, is) but
|
|
13
|
+
* serve fundamentally different purposes:
|
|
14
|
+
*
|
|
15
|
+
* | Function | digital-workers | ai-functions |
|
|
16
|
+
* |----------|----------------|--------------|
|
|
17
|
+
* | `do` | Routes tasks to Workers | Direct LLM task description |
|
|
18
|
+
* | `ask` | Routes questions via Slack/email | LLM content for human UI |
|
|
19
|
+
* | `decide` | Multi-criteria decision framework | LLM-as-judge comparison |
|
|
20
|
+
* | `approve` | Real approval workflow via channels | LLM-generated approval content |
|
|
21
|
+
* | `generate` | Content generation with metadata | Core LLM generation primitive |
|
|
22
|
+
* | `is` | Type/schema validation with errors | Boolean assertion via LLM |
|
|
23
|
+
* | `notify` | Real channel delivery | (no equivalent) |
|
|
24
|
+
*
|
|
25
|
+
* **digital-workers functions are worker coordination primitives** that route
|
|
26
|
+
* work to AI Agents or Humans via real communication channels.
|
|
27
|
+
*
|
|
28
|
+
* **ai-functions primitives are direct LLM operations** for text generation,
|
|
29
|
+
* decision-making, and content creation.
|
|
30
|
+
*
|
|
31
|
+
* ## Package relationships:
|
|
10
32
|
* - `autonomous-agents` - Implements Worker for AI agents
|
|
11
33
|
* - `human-in-the-loop` - Implements Worker for humans
|
|
12
34
|
* - `ai-workflows` - Uses digital-workers to orchestrate execution
|
|
@@ -32,12 +54,13 @@
|
|
|
32
54
|
* const worker$ = withWorkers($)
|
|
33
55
|
*
|
|
34
56
|
* $.on.Expense.submitted(async (expense) => {
|
|
57
|
+
* // These route to REAL workers via REAL channels
|
|
35
58
|
* await worker$.notify(finance, `New expense: ${expense.amount}`)
|
|
36
59
|
*
|
|
37
60
|
* const approval = await worker$.approve(
|
|
38
61
|
* `Expense: $${expense.amount}`,
|
|
39
62
|
* manager,
|
|
40
|
-
* { via: 'slack' }
|
|
63
|
+
* { via: 'slack' } // Actually sends to Slack!
|
|
41
64
|
* )
|
|
42
65
|
*
|
|
43
66
|
* if (approval.approved) {
|
|
@@ -55,15 +78,82 @@ export { registerWorkerActions, withWorkers, handleNotify, handleAsk, handleAppr
|
|
|
55
78
|
export { Role } from './role.js';
|
|
56
79
|
export { Team } from './team.js';
|
|
57
80
|
export { Goals } from './goals.js';
|
|
81
|
+
/**
|
|
82
|
+
* Worker Routing Functions
|
|
83
|
+
*
|
|
84
|
+
* These functions route work to Workers (AI Agents or Humans) via real
|
|
85
|
+
* communication channels. They are NOT direct LLM primitives.
|
|
86
|
+
*
|
|
87
|
+
* For direct LLM primitives, use the identically-named functions from
|
|
88
|
+
* `ai-functions` instead. See module documentation for comparison table.
|
|
89
|
+
*/
|
|
58
90
|
export { approve } from './approve.js';
|
|
59
91
|
export { ask } from './ask.js';
|
|
92
|
+
export { browse } from './browse.js';
|
|
60
93
|
export { do } from './do.js';
|
|
61
94
|
export { decide } from './decide.js';
|
|
62
95
|
export { generate } from './generate.js';
|
|
96
|
+
export { image } from './image.js';
|
|
63
97
|
export { is } from './is.js';
|
|
64
98
|
export { notify } from './notify.js';
|
|
99
|
+
export { video } from './video.js';
|
|
65
100
|
export { kpis, okrs } from './kpis.js';
|
|
66
101
|
// Export verb definitions
|
|
67
102
|
export { WorkerVerbs } from './types.js';
|
|
103
|
+
// Export capability tiers
|
|
104
|
+
export { CAPABILITY_TIERS, TIER_ORDER, compareTiers, isHigherTier, isLowerTier, getNextTier, getPreviousTier, getTierConfig, getToolsForTier, matchTierToComplexity, canExecuteAtTier, validateTierEscalation, createCapabilityProfile, TierRegistry, } from './capability-tiers.js';
|
|
68
105
|
export { channelToTransport, getWorkerTransports, getTeamTransports, resolveAddress, resolveWorkerAddresses, getPrimaryAddress, registerTransport, getTransportHandler, hasTransport, listTransports, sendViaTransport, sendToMultipleTransports, buildNotifyPayload, buildAskPayload, buildApprovePayload, toDigitalToolsMessage, fromDigitalToolsMessage, MessageTypeMapping, CallTypeMapping, } from './transports.js';
|
|
106
|
+
// Export cascade context for agent coordination
|
|
107
|
+
export {
|
|
108
|
+
// Functions
|
|
109
|
+
createCascadeContext, validateContext, enrichContext, serializeContext, deserializeContext, mergeContexts, diffContexts, createContextVersion,
|
|
110
|
+
// Schemas
|
|
111
|
+
AgentCascadeContextSchema, AgentTierSchema, ContextVersionSchema, AgentRefSchema, TaskPrioritySchema, TaskInfoSchema, ExecutionPhaseSchema, ExecutionStateSchema, TraceEntrySchema, } from './cascade-context.js';
|
|
112
|
+
// Export agent-to-agent communication layer
|
|
113
|
+
export {
|
|
114
|
+
// Message Bus
|
|
115
|
+
AgentMessageBus, createMessageBus,
|
|
116
|
+
// Core Functions
|
|
117
|
+
sendToAgent, broadcastToGroup, requestFromAgent, onMessage, acknowledge,
|
|
118
|
+
// Coordination Patterns
|
|
119
|
+
requestResponse, fanOut, fanIn, pipeline,
|
|
120
|
+
// Handoff Protocol
|
|
121
|
+
initiateHandoff, acceptHandoff, rejectHandoff, completeHandoff, } from './agent-comms.js';
|
|
122
|
+
// Export load balancing and routing for agent coordination
|
|
123
|
+
export {
|
|
124
|
+
// Balancer Factories
|
|
125
|
+
createRoundRobinBalancer, createLeastBusyBalancer, createCapabilityRouter, createPriorityQueueBalancer, createAgentAvailabilityTracker, createCompositeBalancer, createRoutingRuleEngine,
|
|
126
|
+
// Metrics
|
|
127
|
+
collectRoutingMetrics, resetRoutingMetrics, } from './load-balancing.js';
|
|
128
|
+
// Export Slack transport adapter
|
|
129
|
+
export { SlackTransport, createSlackTransport, registerSlackTransport,
|
|
130
|
+
// Block Kit helpers
|
|
131
|
+
slackSection, slackHeader, slackDivider, slackContext, slackButton, slackActions, } from './transports/slack.js';
|
|
132
|
+
// Export Email transport adapter
|
|
133
|
+
export { EmailTransport, createEmailTransport, createEmailTransportWithProvider, createResendProvider,
|
|
134
|
+
// Template generators
|
|
135
|
+
generateNotificationEmail, generateApprovalEmail,
|
|
136
|
+
// Reply parsing
|
|
137
|
+
parseApprovalReply,
|
|
138
|
+
// Type guards
|
|
139
|
+
isEmailTransportConfig, isApproved, isRejected, } from './transports/email.js';
|
|
140
|
+
// Export error escalation for multi-level error handling
|
|
141
|
+
export {
|
|
142
|
+
// Error Classification
|
|
143
|
+
getErrorSeverity, getErrorCategory, createClassifiedError, classifyError, isEscalatable, preserveContext, buildErrorChain,
|
|
144
|
+
// Escalation Routing
|
|
145
|
+
createEscalationPolicy, getNextEscalationTier, determineEscalationPath, shouldEscalate, detectCircularEscalation, validateEscalationPath,
|
|
146
|
+
// Recovery Patterns
|
|
147
|
+
calculateBackoff, createRetryState, shouldRetry, selectFallbackAgent, getDegradationLevel, createRecoveryState, updateRecoveryState, isRecoverable,
|
|
148
|
+
// Escalation Engine
|
|
149
|
+
createEscalationEngine, } from './error-escalation.js';
|
|
150
|
+
// Export runtime integration for human request processing
|
|
151
|
+
export {
|
|
152
|
+
// Classes
|
|
153
|
+
HumanRequestProcessor, InMemoryRequestStore,
|
|
154
|
+
// Factory functions
|
|
155
|
+
createHumanRequestProcessor, } from './runtime.js';
|
|
156
|
+
export { noopLogger, createConsoleLogger } from './logger.js';
|
|
157
|
+
// Export ID generation utilities
|
|
158
|
+
export { generateRequestId } from './utils/id.js';
|
|
69
159
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/is.d.ts
CHANGED
|
@@ -1,29 +1,62 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type validation and checking functionality for digital workers
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT: Schema Validation vs Boolean Assertion
|
|
5
|
+
* --------------------------------------------------
|
|
6
|
+
* This module provides comprehensive type/schema validation,
|
|
7
|
+
* NOT simple boolean assertions.
|
|
8
|
+
*
|
|
9
|
+
* - `digital-workers.is()` - Validates values against types or schemas,
|
|
10
|
+
* returns detailed validation results with errors and optional coercion.
|
|
11
|
+
*
|
|
12
|
+
* - `ai-functions.is()` - Boolean assertion via LLM (e.g., `is\`${x} is valid\``)
|
|
13
|
+
* returns true/false based on natural language checking.
|
|
14
|
+
*
|
|
15
|
+
* Use digital-workers when you need:
|
|
16
|
+
* - Type validation with error messages
|
|
17
|
+
* - Schema validation with field-level errors
|
|
18
|
+
* - Value coercion (string to number, etc.)
|
|
19
|
+
* - Structured validation results
|
|
20
|
+
*
|
|
21
|
+
* Use ai-functions when you need:
|
|
22
|
+
* - Natural language boolean checks
|
|
23
|
+
* - LLM-based semantic validation
|
|
24
|
+
* - Template literal assertions
|
|
25
|
+
*
|
|
26
|
+
* @module
|
|
3
27
|
*/
|
|
4
28
|
import { type SimpleSchema } from 'ai-functions';
|
|
5
29
|
import type { TypeCheckResult, IsOptions } from './types.js';
|
|
6
30
|
/**
|
|
7
|
-
*
|
|
31
|
+
* Validate a value against a type or schema with detailed results.
|
|
8
32
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
33
|
+
* **Key Difference from ai-functions.is():**
|
|
34
|
+
* Unlike `ai-functions.is()` which is a boolean assertion using natural
|
|
35
|
+
* language (e.g., `is\`${email} is valid\`` returns true/false), this
|
|
36
|
+
* function performs structured type/schema validation and returns a
|
|
37
|
+
* `TypeCheckResult` with:
|
|
38
|
+
* - Validation status
|
|
39
|
+
* - Error messages for invalid fields
|
|
40
|
+
* - Optionally coerced values
|
|
41
|
+
*
|
|
42
|
+
* This is a **validation primitive**, not a boolean assertion primitive.
|
|
11
43
|
*
|
|
12
44
|
* @param value - The value to check
|
|
13
|
-
* @param type - Type name or schema to validate against
|
|
14
|
-
* @param options - Validation options
|
|
15
|
-
* @returns Promise resolving to
|
|
45
|
+
* @param type - Type name ('email', 'url', 'number') or schema to validate against
|
|
46
|
+
* @param options - Validation options (coerce, strict)
|
|
47
|
+
* @returns Promise resolving to TypeCheckResult with valid, value, and errors
|
|
16
48
|
*
|
|
17
49
|
* @example
|
|
18
50
|
* ```ts
|
|
19
|
-
* // Simple type checking
|
|
51
|
+
* // Simple type checking with result object
|
|
20
52
|
* const result = await is('hello@example.com', 'email')
|
|
21
53
|
* console.log(result.valid) // true
|
|
54
|
+
* console.log(result.errors) // undefined when valid
|
|
22
55
|
* ```
|
|
23
56
|
*
|
|
24
57
|
* @example
|
|
25
58
|
* ```ts
|
|
26
|
-
* // Schema validation
|
|
59
|
+
* // Schema validation with detailed errors
|
|
27
60
|
* const result = await is(
|
|
28
61
|
* { name: 'John', age: 30 },
|
|
29
62
|
* {
|
|
@@ -38,11 +71,13 @@ import type { TypeCheckResult, IsOptions } from './types.js';
|
|
|
38
71
|
*
|
|
39
72
|
* @example
|
|
40
73
|
* ```ts
|
|
41
|
-
* // With coercion
|
|
74
|
+
* // With coercion - transforms value to target type
|
|
42
75
|
* const result = await is('123', 'number', { coerce: true })
|
|
43
76
|
* console.log(result.valid) // true
|
|
44
|
-
* console.log(result.value) // 123 (as number)
|
|
77
|
+
* console.log(result.value) // 123 (as number, not string)
|
|
45
78
|
* ```
|
|
79
|
+
*
|
|
80
|
+
* @see {@link ai-functions#is} for natural language boolean assertions
|
|
46
81
|
*/
|
|
47
82
|
export declare function is(value: unknown, type: string | SimpleSchema, options?: IsOptions): Promise<TypeCheckResult>;
|
|
48
83
|
export declare namespace is {
|
package/dist/is.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is.d.ts","sourceRoot":"","sources":["../src/is.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"is.d.ts","sourceRoot":"","sources":["../src/is.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAsB,EAAE,CACtB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,GAAG,YAAY,EAC3B,OAAO,GAAE,SAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAU1B;yBAdqB,EAAE;uBAqNC,OAAO,KAAG,OAAO,CAAC,eAAe,CAAC;qBAgBpC,OAAO,KAAG,OAAO,CAAC,eAAe,CAAC;sBA6BjC,OAAO,YAAW,SAAS,KAAQ,OAAO,CAAC,eAAe,CAAC;wBAgD1E,OAAO,aACH,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KACpD,OAAO,CAAC,eAAe,CAAC"}
|
package/dist/is.js
CHANGED
|
@@ -1,29 +1,62 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type validation and checking functionality for digital workers
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT: Schema Validation vs Boolean Assertion
|
|
5
|
+
* --------------------------------------------------
|
|
6
|
+
* This module provides comprehensive type/schema validation,
|
|
7
|
+
* NOT simple boolean assertions.
|
|
8
|
+
*
|
|
9
|
+
* - `digital-workers.is()` - Validates values against types or schemas,
|
|
10
|
+
* returns detailed validation results with errors and optional coercion.
|
|
11
|
+
*
|
|
12
|
+
* - `ai-functions.is()` - Boolean assertion via LLM (e.g., `is\`${x} is valid\``)
|
|
13
|
+
* returns true/false based on natural language checking.
|
|
14
|
+
*
|
|
15
|
+
* Use digital-workers when you need:
|
|
16
|
+
* - Type validation with error messages
|
|
17
|
+
* - Schema validation with field-level errors
|
|
18
|
+
* - Value coercion (string to number, etc.)
|
|
19
|
+
* - Structured validation results
|
|
20
|
+
*
|
|
21
|
+
* Use ai-functions when you need:
|
|
22
|
+
* - Natural language boolean checks
|
|
23
|
+
* - LLM-based semantic validation
|
|
24
|
+
* - Template literal assertions
|
|
25
|
+
*
|
|
26
|
+
* @module
|
|
3
27
|
*/
|
|
4
28
|
import { generateObject } from 'ai-functions';
|
|
5
29
|
import { schema as convertSchema } from 'ai-functions';
|
|
6
30
|
/**
|
|
7
|
-
*
|
|
31
|
+
* Validate a value against a type or schema with detailed results.
|
|
8
32
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
33
|
+
* **Key Difference from ai-functions.is():**
|
|
34
|
+
* Unlike `ai-functions.is()` which is a boolean assertion using natural
|
|
35
|
+
* language (e.g., `is\`${email} is valid\`` returns true/false), this
|
|
36
|
+
* function performs structured type/schema validation and returns a
|
|
37
|
+
* `TypeCheckResult` with:
|
|
38
|
+
* - Validation status
|
|
39
|
+
* - Error messages for invalid fields
|
|
40
|
+
* - Optionally coerced values
|
|
41
|
+
*
|
|
42
|
+
* This is a **validation primitive**, not a boolean assertion primitive.
|
|
11
43
|
*
|
|
12
44
|
* @param value - The value to check
|
|
13
|
-
* @param type - Type name or schema to validate against
|
|
14
|
-
* @param options - Validation options
|
|
15
|
-
* @returns Promise resolving to
|
|
45
|
+
* @param type - Type name ('email', 'url', 'number') or schema to validate against
|
|
46
|
+
* @param options - Validation options (coerce, strict)
|
|
47
|
+
* @returns Promise resolving to TypeCheckResult with valid, value, and errors
|
|
16
48
|
*
|
|
17
49
|
* @example
|
|
18
50
|
* ```ts
|
|
19
|
-
* // Simple type checking
|
|
51
|
+
* // Simple type checking with result object
|
|
20
52
|
* const result = await is('hello@example.com', 'email')
|
|
21
53
|
* console.log(result.valid) // true
|
|
54
|
+
* console.log(result.errors) // undefined when valid
|
|
22
55
|
* ```
|
|
23
56
|
*
|
|
24
57
|
* @example
|
|
25
58
|
* ```ts
|
|
26
|
-
* // Schema validation
|
|
59
|
+
* // Schema validation with detailed errors
|
|
27
60
|
* const result = await is(
|
|
28
61
|
* { name: 'John', age: 30 },
|
|
29
62
|
* {
|
|
@@ -38,11 +71,13 @@ import { schema as convertSchema } from 'ai-functions';
|
|
|
38
71
|
*
|
|
39
72
|
* @example
|
|
40
73
|
* ```ts
|
|
41
|
-
* // With coercion
|
|
74
|
+
* // With coercion - transforms value to target type
|
|
42
75
|
* const result = await is('123', 'number', { coerce: true })
|
|
43
76
|
* console.log(result.valid) // true
|
|
44
|
-
* console.log(result.value) // 123 (as number)
|
|
77
|
+
* console.log(result.value) // 123 (as number, not string)
|
|
45
78
|
* ```
|
|
79
|
+
*
|
|
80
|
+
* @see {@link ai-functions#is} for natural language boolean assertions
|
|
46
81
|
*/
|
|
47
82
|
export async function is(value, type, options = {}) {
|
|
48
83
|
const { coerce = false, strict = false } = options;
|
|
@@ -84,8 +119,7 @@ async function validateSimpleType(value, type, options) {
|
|
|
84
119
|
}
|
|
85
120
|
return {
|
|
86
121
|
valid: isValid,
|
|
87
|
-
|
|
88
|
-
errors: isValid ? undefined : [`Value is not a valid ${type}`],
|
|
122
|
+
...(isValid ? { value } : { errors: [`Value is not a valid ${type}`] }),
|
|
89
123
|
};
|
|
90
124
|
}
|
|
91
125
|
// Use AI for complex type validation
|
|
@@ -99,7 +133,9 @@ async function validateSimpleType(value, type, options) {
|
|
|
99
133
|
system: `You are a type validation expert. Determine if a value matches an expected type.
|
|
100
134
|
|
|
101
135
|
${coerce ? 'If the value can be coerced to the expected type, provide the coerced value.' : ''}
|
|
102
|
-
${strict
|
|
136
|
+
${strict
|
|
137
|
+
? 'Be strict in your validation - require exact type matches.'
|
|
138
|
+
: 'Be flexible - allow reasonable type conversions.'}`,
|
|
103
139
|
prompt: `Validate if this value matches the expected type:
|
|
104
140
|
|
|
105
141
|
Value: ${JSON.stringify(value)}
|
|
@@ -111,7 +147,7 @@ Determine if the value is valid for this type.`,
|
|
|
111
147
|
return {
|
|
112
148
|
valid: validation.valid,
|
|
113
149
|
value: coerce && validation.coercedValue !== undefined ? validation.coercedValue : value,
|
|
114
|
-
|
|
150
|
+
...(!validation.valid && { errors: validation.errors }),
|
|
115
151
|
};
|
|
116
152
|
}
|
|
117
153
|
/**
|
|
@@ -162,7 +198,7 @@ Check if the value matches the schema structure and types.`,
|
|
|
162
198
|
return {
|
|
163
199
|
valid: validation.valid,
|
|
164
200
|
value: coerce && validation.coercedValue !== undefined ? validation.coercedValue : value,
|
|
165
|
-
|
|
201
|
+
...(!validation.valid && { errors: validation.errors }),
|
|
166
202
|
};
|
|
167
203
|
}
|
|
168
204
|
}
|
|
@@ -218,8 +254,7 @@ is.email = async (value) => {
|
|
|
218
254
|
const valid = typeof value === 'string' && emailRegex.test(value);
|
|
219
255
|
return {
|
|
220
256
|
valid,
|
|
221
|
-
|
|
222
|
-
errors: valid ? undefined : ['Invalid email format'],
|
|
257
|
+
...(valid ? { value } : { errors: ['Invalid email format'] }),
|
|
223
258
|
};
|
|
224
259
|
};
|
|
225
260
|
/**
|
|
@@ -259,10 +294,11 @@ is.url = async (value) => {
|
|
|
259
294
|
is.date = async (value, options = {}) => {
|
|
260
295
|
const { coerce } = options;
|
|
261
296
|
if (value instanceof Date) {
|
|
297
|
+
const isValid = !isNaN(value.getTime());
|
|
262
298
|
return {
|
|
263
|
-
valid:
|
|
299
|
+
valid: isValid,
|
|
264
300
|
value,
|
|
265
|
-
errors:
|
|
301
|
+
...(!isValid && { errors: ['Invalid date'] }),
|
|
266
302
|
};
|
|
267
303
|
}
|
|
268
304
|
if (coerce) {
|
|
@@ -304,8 +340,7 @@ is.custom = async (value, validator) => {
|
|
|
304
340
|
const valid = await validator(value);
|
|
305
341
|
return {
|
|
306
342
|
valid,
|
|
307
|
-
|
|
308
|
-
errors: valid ? undefined : ['Custom validation failed'],
|
|
343
|
+
...(valid ? { value } : { errors: ['Custom validation failed'] }),
|
|
309
344
|
};
|
|
310
345
|
}
|
|
311
346
|
catch (error) {
|
package/dist/is.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is.js","sourceRoot":"","sources":["../src/is.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"is.js","sourceRoot":"","sources":["../src/is.ts"],"names":[],"mappings":"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"}
|
package/dist/kpis.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* KPI and OKR tracking functionality for digital workers
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { WorkerKPI, WorkerOKR } from './types.js';
|
|
5
|
+
export type { KPI, OKR, KeyResult } from 'org.ai';
|
|
5
6
|
/**
|
|
6
7
|
* Define and track Key Performance Indicators
|
|
7
8
|
*
|
|
9
|
+
* Uses WorkerKPI which has a simpler interface with `current` and `target`
|
|
10
|
+
* as required number fields. For the full org.ai KPI with `id`, `value`,
|
|
11
|
+
* `category`, and `history`, use the KPI type directly.
|
|
12
|
+
*
|
|
8
13
|
* @param definition - KPI definition or array of KPIs
|
|
9
14
|
* @returns The defined KPI(s)
|
|
10
15
|
*
|
|
@@ -44,15 +49,15 @@ import type { KPI, OKR } from './types.js';
|
|
|
44
49
|
* ])
|
|
45
50
|
* ```
|
|
46
51
|
*/
|
|
47
|
-
export declare function kpis(definition:
|
|
48
|
-
export declare function kpis(definition:
|
|
52
|
+
export declare function kpis(definition: WorkerKPI): WorkerKPI;
|
|
53
|
+
export declare function kpis(definition: WorkerKPI[]): WorkerKPI[];
|
|
49
54
|
export declare namespace kpis {
|
|
50
|
-
var update: (kpi:
|
|
51
|
-
var progress: (kpi: Pick<
|
|
52
|
-
var onTrack: (kpi: Pick<
|
|
53
|
-
var gap: (kpi: Pick<
|
|
54
|
-
var format: (kpi:
|
|
55
|
-
var compare: (previous: Pick<
|
|
55
|
+
var update: (kpi: WorkerKPI, current: number) => WorkerKPI;
|
|
56
|
+
var progress: (kpi: Pick<WorkerKPI, "current" | "target">) => number;
|
|
57
|
+
var onTrack: (kpi: Pick<WorkerKPI, "current" | "target">, threshold?: number) => boolean;
|
|
58
|
+
var gap: (kpi: Pick<WorkerKPI, "current" | "target">) => number;
|
|
59
|
+
var format: (kpi: WorkerKPI) => string;
|
|
60
|
+
var compare: (previous: Pick<WorkerKPI, "current" | "target">, current: Pick<WorkerKPI, "current" | "target">) => {
|
|
56
61
|
delta: number;
|
|
57
62
|
percentChange: number;
|
|
58
63
|
improved: boolean;
|
|
@@ -61,6 +66,10 @@ export declare namespace kpis {
|
|
|
61
66
|
/**
|
|
62
67
|
* Define OKRs (Objectives and Key Results)
|
|
63
68
|
*
|
|
69
|
+
* Uses WorkerOKR which has WorkerRef for owner.
|
|
70
|
+
* For the full org.ai OKR with `id`, `status`, `period`, etc.,
|
|
71
|
+
* use the OKR type directly.
|
|
72
|
+
*
|
|
64
73
|
* @param definition - OKR definition
|
|
65
74
|
* @returns The defined OKR
|
|
66
75
|
*
|
|
@@ -88,16 +97,16 @@ export declare namespace kpis {
|
|
|
88
97
|
* unit: '%',
|
|
89
98
|
* },
|
|
90
99
|
* ],
|
|
91
|
-
* owner: 'engineering-team',
|
|
100
|
+
* owner: { id: 'engineering-team', type: 'agent' },
|
|
92
101
|
* dueDate: new Date('2024-03-31'),
|
|
93
102
|
* })
|
|
94
103
|
* ```
|
|
95
104
|
*/
|
|
96
|
-
export declare function okrs(definition:
|
|
105
|
+
export declare function okrs(definition: WorkerOKR): WorkerOKR;
|
|
97
106
|
export declare namespace okrs {
|
|
98
|
-
var progress: (okr:
|
|
99
|
-
var updateKeyResult: (okr:
|
|
100
|
-
var onTrack: (okr:
|
|
101
|
-
var format: (okr:
|
|
107
|
+
var progress: (okr: WorkerOKR) => number;
|
|
108
|
+
var updateKeyResult: (okr: WorkerOKR, keyResultName: string, current: number) => WorkerOKR;
|
|
109
|
+
var onTrack: (okr: WorkerOKR, threshold?: number) => boolean;
|
|
110
|
+
var format: (okr: WorkerOKR) => string;
|
|
102
111
|
}
|
|
103
112
|
//# sourceMappingURL=kpis.d.ts.map
|
package/dist/kpis.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kpis.d.ts","sourceRoot":"","sources":["../src/kpis.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"kpis.d.ts","sourceRoot":"","sources":["../src/kpis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAGtD,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAAA;AACtD,wBAAgB,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAA;yBAA1C,IAAI;sBAmBA,SAAS,WAAW,MAAM,KAAG,SAAS;wBA4BpC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC,KAAG,MAAM;uBAiB/C,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC,yBAAoB,OAAO;mBAgBpE,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC,KAAG,MAAM;sBAuB3C,SAAS,KAAG,MAAM;4BAwB1B,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC,WACtC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC,KAC7C;QACD,KAAK,EAAE,MAAM,CAAA;QACb,aAAa,EAAE,MAAM,CAAA;QACrB,QAAQ,EAAE,OAAO,CAAA;KAClB;;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAErD;yBAFe,IAAI;wBAgBE,SAAS,KAAG,MAAM;+BA2BX,SAAS,iBAAiB,MAAM,WAAW,MAAM,KAAG,SAAS;uBAoBrE,SAAS,yBAAoB,OAAO;sBAoBrC,SAAS,KAAG,MAAM"}
|
package/dist/kpis.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* KPI and OKR tracking functionality for digital workers
|
|
3
3
|
*/
|
|
4
|
+
import { calculateProgress, isOnTrack, calculateGap } from 'org.ai';
|
|
4
5
|
export function kpis(definition) {
|
|
5
6
|
return definition;
|
|
6
7
|
}
|
|
@@ -46,9 +47,7 @@ kpis.update = (kpi, current) => {
|
|
|
46
47
|
* ```
|
|
47
48
|
*/
|
|
48
49
|
kpis.progress = (kpi) => {
|
|
49
|
-
|
|
50
|
-
return 0;
|
|
51
|
-
return Math.min(1, Math.max(0, kpi.current / kpi.target));
|
|
50
|
+
return calculateProgress(kpi);
|
|
52
51
|
};
|
|
53
52
|
/**
|
|
54
53
|
* Check if a KPI is on track
|
|
@@ -64,7 +63,7 @@ kpis.progress = (kpi) => {
|
|
|
64
63
|
* ```
|
|
65
64
|
*/
|
|
66
65
|
kpis.onTrack = (kpi, threshold = 0.8) => {
|
|
67
|
-
return
|
|
66
|
+
return isOnTrack(kpi, threshold);
|
|
68
67
|
};
|
|
69
68
|
/**
|
|
70
69
|
* Get the gap to target
|
|
@@ -79,7 +78,7 @@ kpis.onTrack = (kpi, threshold = 0.8) => {
|
|
|
79
78
|
* ```
|
|
80
79
|
*/
|
|
81
80
|
kpis.gap = (kpi) => {
|
|
82
|
-
return kpi
|
|
81
|
+
return calculateGap(kpi);
|
|
83
82
|
};
|
|
84
83
|
/**
|
|
85
84
|
* Format a KPI for display
|
|
@@ -123,9 +122,7 @@ kpis.format = (kpi) => {
|
|
|
123
122
|
*/
|
|
124
123
|
kpis.compare = (previous, current) => {
|
|
125
124
|
const delta = current.current - previous.current;
|
|
126
|
-
const percentChange = previous.current !== 0
|
|
127
|
-
? (delta / previous.current) * 100
|
|
128
|
-
: 0;
|
|
125
|
+
const percentChange = previous.current !== 0 ? (delta / previous.current) * 100 : 0;
|
|
129
126
|
// Improved if we got closer to the target
|
|
130
127
|
const previousGap = Math.abs(previous.target - previous.current);
|
|
131
128
|
const currentGap = Math.abs(current.target - current.current);
|
|
@@ -139,6 +136,10 @@ kpis.compare = (previous, current) => {
|
|
|
139
136
|
/**
|
|
140
137
|
* Define OKRs (Objectives and Key Results)
|
|
141
138
|
*
|
|
139
|
+
* Uses WorkerOKR which has WorkerRef for owner.
|
|
140
|
+
* For the full org.ai OKR with `id`, `status`, `period`, etc.,
|
|
141
|
+
* use the OKR type directly.
|
|
142
|
+
*
|
|
142
143
|
* @param definition - OKR definition
|
|
143
144
|
* @returns The defined OKR
|
|
144
145
|
*
|
|
@@ -166,7 +167,7 @@ kpis.compare = (previous, current) => {
|
|
|
166
167
|
* unit: '%',
|
|
167
168
|
* },
|
|
168
169
|
* ],
|
|
169
|
-
* owner: 'engineering-team',
|
|
170
|
+
* owner: { id: 'engineering-team', type: 'agent' },
|
|
170
171
|
* dueDate: new Date('2024-03-31'),
|
|
171
172
|
* })
|
|
172
173
|
* ```
|
|
@@ -212,10 +213,10 @@ okrs.progress = (okr) => {
|
|
|
212
213
|
* ```
|
|
213
214
|
*/
|
|
214
215
|
okrs.updateKeyResult = (okr, keyResultName, current) => {
|
|
216
|
+
const { progress: _progress, ...rest } = okr;
|
|
215
217
|
return {
|
|
216
|
-
...
|
|
217
|
-
keyResults: okr.keyResults.map((kr) => kr.name === keyResultName ? { ...kr, current } : kr),
|
|
218
|
-
progress: undefined, // Will be recalculated
|
|
218
|
+
...rest,
|
|
219
|
+
keyResults: okr.keyResults.map((kr) => (kr.name === keyResultName ? { ...kr, current } : kr)),
|
|
219
220
|
};
|
|
220
221
|
};
|
|
221
222
|
/**
|
|
@@ -257,11 +258,12 @@ okrs.format = (okr) => {
|
|
|
257
258
|
...okr.keyResults.map((kr) => {
|
|
258
259
|
const krProgress = kpis.progress(kr);
|
|
259
260
|
const krPercent = Math.round(krProgress * 100);
|
|
260
|
-
return `
|
|
261
|
+
return ` - ${kr.name}: ${kr.current}/${kr.target} ${kr.unit} (${krPercent}%)`;
|
|
261
262
|
}),
|
|
262
263
|
];
|
|
263
264
|
if (okr.owner) {
|
|
264
|
-
|
|
265
|
+
const ownerDisplay = typeof okr.owner === 'string' ? okr.owner : okr.owner.id;
|
|
266
|
+
lines.push(` Owner: ${ownerDisplay}`);
|
|
265
267
|
}
|
|
266
268
|
if (okr.dueDate) {
|
|
267
269
|
lines.push(` Due: ${okr.dueDate.toLocaleDateString()}`);
|
package/dist/kpis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kpis.js","sourceRoot":"","sources":["../src/kpis.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"kpis.js","sourceRoot":"","sources":["../src/kpis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAsDnE,MAAM,UAAU,IAAI,CAAC,UAAmC;IACtD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,IAAI,CAAC,MAAM,GAAG,CAAC,GAAc,EAAE,OAAe,EAAa,EAAE;IAC3D,kBAAkB;IAClB,IAAI,KAAK,GAAuB,QAAQ,CAAA;IACxC,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1B,KAAK,GAAG,IAAI,CAAA;IACd,CAAC;SAAM,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,GAAG,MAAM,CAAA;IAChB,CAAC;IAED,OAAO;QACL,GAAG,GAAG;QACN,OAAO;QACP,KAAK;KACN,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,IAAI,CAAC,QAAQ,GAAG,CAAC,GAA0C,EAAU,EAAE;IACrE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;AAC/B,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,IAAI,CAAC,OAAO,GAAG,CAAC,GAA0C,EAAE,SAAS,GAAG,GAAG,EAAW,EAAE;IACtF,OAAO,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;AAClC,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,IAAI,CAAC,GAAG,GAAG,CAAC,GAA0C,EAAU,EAAE;IAChE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,IAAI,CAAC,MAAM,GAAG,CAAC,GAAc,EAAU,EAAE;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACnC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IAE9E,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,eAAe,GAAG,CAAC,KAAK,IAAI,UAAU,GAAG,CAAA;AAC3H,CAAC,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,IAAI,CAAC,OAAO,GAAG,CACb,QAA+C,EAC/C,OAA8C,EAK9C,EAAE;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAA;IAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAEnF,0CAA0C;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7D,MAAM,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAA;IAEzC,OAAO;QACL,KAAK;QACL,aAAa;QACb,QAAQ;KACT,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,IAAI,CAAC,UAAqB;IACxC,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAc,EAAU,EAAE;IACzC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAEzC,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;QACtD,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC,EAAE,CAAC,CAAC,CAAA;IAEL,OAAO,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAA;AAC9C,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,IAAI,CAAC,eAAe,GAAG,CAAC,GAAc,EAAE,aAAqB,EAAE,OAAe,EAAa,EAAE;IAC3F,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAA;IAC5C,OAAO;QACL,GAAG,IAAI;QACP,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAC9F,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,IAAI,CAAC,OAAO,GAAG,CAAC,GAAc,EAAE,SAAS,GAAG,GAAG,EAAW,EAAE;IAC1D,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAA;AACxC,CAAC,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,IAAI,CAAC,MAAM,GAAG,CAAC,GAAc,EAAU,EAAE;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACnC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAA;IAElD,MAAM,KAAK,GAAG;QACZ,GAAG,GAAG,CAAC,SAAS,KAAK,eAAe,aAAa;QACjD,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAA;YAC9C,OAAO,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,CAAA;QAChF,CAAC,CAAC;KACH,CAAA;IAED,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,YAAY,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAA;QAC7E,KAAK,CAAC,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAA"}
|