@geoffai/geoff 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.
@@ -0,0 +1,777 @@
1
+ /**
2
+ * Task-related type definitions
3
+ */
4
+ type TaskType = 'video' | 'music' | 'image' | 'ai-prompt' | 'mcp-tool';
5
+ type TaskStatus = 'pending' | 'generating' | 'complete' | 'failed';
6
+ interface TaskState {
7
+ id: string;
8
+ chatId: string;
9
+ messageId: string;
10
+ type: TaskType;
11
+ status: TaskStatus;
12
+ progress: number;
13
+ message: string;
14
+ result?: string;
15
+ error?: string;
16
+ createdAt: number;
17
+ updatedAt: number;
18
+ }
19
+ interface TaskPayload {
20
+ type: string;
21
+ model?: string;
22
+ prompt?: string;
23
+ sessionId?: string;
24
+ temperature?: number;
25
+ maxTokens?: number;
26
+ stream?: boolean;
27
+ search?: boolean;
28
+ noTools?: boolean;
29
+ [key: string]: unknown;
30
+ }
31
+ interface TaskResponse {
32
+ taskId: string;
33
+ status: TaskStatus;
34
+ result?: unknown;
35
+ error?: string;
36
+ }
37
+
38
+ /**
39
+ * Chat and message type definitions
40
+ */
41
+ interface Message {
42
+ role: 'system' | 'user' | 'assistant';
43
+ content: string;
44
+ }
45
+ interface ChatCompletionRequest {
46
+ model: string;
47
+ messages: Message[];
48
+ stream?: boolean;
49
+ temperature?: number;
50
+ max_tokens?: number;
51
+ sessionId?: string;
52
+ search?: boolean;
53
+ }
54
+ interface ChatCompletionChunk {
55
+ id: string;
56
+ object: 'chat.completion.chunk';
57
+ created: number;
58
+ model: string;
59
+ choices: Array<{
60
+ index: number;
61
+ delta: {
62
+ role?: 'assistant';
63
+ content?: string;
64
+ };
65
+ finish_reason: string | null;
66
+ }>;
67
+ usage?: {
68
+ prompt_tokens: number;
69
+ completion_tokens: number;
70
+ total_tokens: number;
71
+ };
72
+ }
73
+ interface ChatCompletionResponse {
74
+ id: string;
75
+ object: 'chat.completion';
76
+ created: number;
77
+ model: string;
78
+ choices: Array<{
79
+ index: number;
80
+ message: {
81
+ role: 'assistant';
82
+ content: string;
83
+ };
84
+ finish_reason: string;
85
+ }>;
86
+ usage: {
87
+ prompt_tokens: number;
88
+ completion_tokens: number;
89
+ total_tokens: number;
90
+ };
91
+ }
92
+
93
+ /**
94
+ * Imagination and file type definitions
95
+ */
96
+ interface MagmaFile {
97
+ cid: string;
98
+ name: string;
99
+ size: number;
100
+ type: string;
101
+ url: string;
102
+ }
103
+ interface WorkflowData {
104
+ name: string;
105
+ coverImage?: string;
106
+ description: string;
107
+ examples: Array<{
108
+ id: string;
109
+ data: string;
110
+ }>;
111
+ workflowJson: string;
112
+ }
113
+ interface ImaginationSource {
114
+ cid: string;
115
+ type: 'document' | 'link' | 'voice' | 'image' | 'music' | 'text';
116
+ name: string;
117
+ size?: number;
118
+ content?: string;
119
+ }
120
+ interface ImaginationCharacter {
121
+ name: string;
122
+ gender: string;
123
+ age: string;
124
+ weight: string;
125
+ personality: string;
126
+ }
127
+ interface ImaginationMetadata {
128
+ id: string;
129
+ title: string;
130
+ createdAt: string;
131
+ createdBy: string;
132
+ sources: ImaginationSource[];
133
+ summary?: string;
134
+ character?: ImaginationCharacter;
135
+ workflow?: WorkflowData;
136
+ is_public?: boolean;
137
+ }
138
+
139
+ /**
140
+ * Agent type definitions
141
+ */
142
+ interface Agent {
143
+ id: string;
144
+ name: string;
145
+ description?: string;
146
+ system_prompt?: string;
147
+ model?: string;
148
+ tools?: string[];
149
+ triggers?: AgentTrigger[];
150
+ workflow?: AgentWorkflow;
151
+ visibility?: 'public' | 'private' | 'template';
152
+ creator_mid?: string;
153
+ created_at?: string;
154
+ updated_at?: string;
155
+ enabled?: boolean;
156
+ }
157
+ interface AgentTrigger {
158
+ type: 'webhook' | 'cron' | 'event';
159
+ config: Record<string, unknown>;
160
+ }
161
+ interface AgentWorkflow {
162
+ nodes: AgentWorkflowNode[];
163
+ edges: AgentWorkflowEdge[];
164
+ }
165
+ interface AgentWorkflowNode {
166
+ id: string;
167
+ type: string;
168
+ position: {
169
+ x: number;
170
+ y: number;
171
+ };
172
+ data: Record<string, unknown>;
173
+ }
174
+ interface AgentWorkflowEdge {
175
+ id: string;
176
+ source: string;
177
+ target: string;
178
+ sourceHandle?: string;
179
+ targetHandle?: string;
180
+ }
181
+ interface AgentExecuteRequest {
182
+ input?: string;
183
+ context?: Record<string, unknown>;
184
+ stream?: boolean;
185
+ }
186
+ interface AgentExecuteResponse {
187
+ id: string;
188
+ output: string;
189
+ status: 'success' | 'error';
190
+ metadata?: Record<string, unknown>;
191
+ }
192
+ interface AgentsListResponse {
193
+ agents: Agent[];
194
+ }
195
+ interface AgentResponse {
196
+ agent?: Agent;
197
+ id?: string;
198
+ name?: string;
199
+ error?: string;
200
+ }
201
+ interface AgentCreateInput {
202
+ name: string;
203
+ description?: string;
204
+ system_prompt?: string;
205
+ model?: string;
206
+ tools?: string[];
207
+ triggers?: AgentTrigger[];
208
+ workflow?: AgentWorkflow;
209
+ visibility?: 'public' | 'private' | 'template';
210
+ created_by?: string;
211
+ }
212
+ interface AgentUpdateInput {
213
+ name?: string;
214
+ description?: string;
215
+ system_prompt?: string;
216
+ model?: string;
217
+ tools?: string[];
218
+ triggers?: AgentTrigger[];
219
+ workflow?: AgentWorkflow;
220
+ visibility?: 'public' | 'private' | 'template';
221
+ enabled?: boolean;
222
+ }
223
+ interface AgentFromPromptInput {
224
+ prompt: string;
225
+ created_by?: string;
226
+ }
227
+ interface AgentsClientConfig {
228
+ baseUrl?: string;
229
+ /**
230
+ * Use the coprocessor API (/cpx/agent/agents) instead of legacy (/agents).
231
+ * Defaults to true. Set to false for backwards compatibility.
232
+ */
233
+ useCpxApi?: boolean;
234
+ }
235
+
236
+ /**
237
+ * MCP (Model Context Protocol) type definitions
238
+ */
239
+ interface MCPSessionConfig {
240
+ baseUrl?: string;
241
+ agentId?: string;
242
+ timeout?: number;
243
+ }
244
+ interface MCPSession {
245
+ id: string;
246
+ agentId: string;
247
+ status: 'active' | 'closed' | 'error';
248
+ createdAt: Date;
249
+ }
250
+ interface MCPMessage {
251
+ role: 'user' | 'assistant';
252
+ content: MCPContent;
253
+ }
254
+ interface MCPContent {
255
+ type: 'text' | 'image' | 'tool_use' | 'tool_result';
256
+ text?: string;
257
+ data?: string;
258
+ toolName?: string;
259
+ toolInput?: Record<string, unknown>;
260
+ }
261
+ interface MCPToolResult {
262
+ result: unknown;
263
+ data?: Record<string, unknown>;
264
+ error?: string;
265
+ }
266
+
267
+ /**
268
+ * Social Network Types
269
+ */
270
+ interface SocialAuthor {
271
+ mid: string;
272
+ username: string;
273
+ avatar_url: string | null;
274
+ bio?: string | null;
275
+ }
276
+ type MediaType = 'image' | 'video' | 'audio' | 'animation';
277
+ interface SocialPost {
278
+ id: string;
279
+ creator_mid: string;
280
+ content: string;
281
+ media_url: string;
282
+ media_type: MediaType;
283
+ created_at: number;
284
+ likes_count: number;
285
+ comments_count: number;
286
+ views_count: number;
287
+ plays_count?: number;
288
+ remix_of?: string;
289
+ author: SocialAuthor;
290
+ }
291
+ interface SocialComment {
292
+ id: string;
293
+ author_mid: string;
294
+ content: string;
295
+ created_at: number;
296
+ author: SocialAuthor;
297
+ }
298
+ interface SocialRemix {
299
+ id: string;
300
+ creator_mid: string;
301
+ content: string;
302
+ media_url: string;
303
+ created_at: number;
304
+ author: SocialAuthor;
305
+ }
306
+ interface FeedResponse {
307
+ posts: SocialPost[];
308
+ hasMore: boolean;
309
+ page: number;
310
+ total?: number;
311
+ }
312
+ interface PostResponse {
313
+ post: SocialPost;
314
+ }
315
+ interface CommentsResponse {
316
+ comments: SocialComment[];
317
+ }
318
+ interface RemixesResponse {
319
+ remixes: SocialRemix[];
320
+ }
321
+ interface LikeCheckResponse {
322
+ liked: boolean;
323
+ }
324
+ interface LikeResponse {
325
+ success: boolean;
326
+ likes_count?: number;
327
+ }
328
+ interface CommentResponse {
329
+ success: boolean;
330
+ comment?: SocialComment;
331
+ }
332
+ interface CreatePostInput {
333
+ creatorMid: string;
334
+ content: string;
335
+ mediaUrl: string;
336
+ mediaType: MediaType;
337
+ remixOf?: string;
338
+ }
339
+ interface CreatePostResponse {
340
+ success: boolean;
341
+ post?: SocialPost;
342
+ id?: string;
343
+ }
344
+ interface ProfileResponse {
345
+ mid: string;
346
+ username: string;
347
+ avatar_url: string | null;
348
+ bio?: string | null;
349
+ }
350
+ interface SocialClientConfig {
351
+ baseUrl?: string;
352
+ }
353
+
354
+ /**
355
+ * Widget type definitions
356
+ */
357
+ interface Widget {
358
+ id: string;
359
+ name: string;
360
+ description?: string;
361
+ component_code: string;
362
+ styles?: string;
363
+ props_schema?: Record<string, unknown>;
364
+ default_props?: Record<string, unknown>;
365
+ scope?: 'public' | 'private';
366
+ creator_mid?: string;
367
+ created_at?: string;
368
+ updated_at?: string;
369
+ usage_count?: number;
370
+ }
371
+ interface WidgetsListResponse {
372
+ widgets: Widget[];
373
+ }
374
+ interface WidgetResponse {
375
+ widget?: Widget;
376
+ id?: string;
377
+ error?: string;
378
+ }
379
+ interface WidgetCreateInput {
380
+ name: string;
381
+ description?: string;
382
+ component_code: string;
383
+ styles?: string;
384
+ props_schema?: Record<string, unknown>;
385
+ default_props?: Record<string, unknown>;
386
+ scope?: 'public' | 'private';
387
+ creator_mid?: string;
388
+ }
389
+ interface WidgetUpdateInput {
390
+ name?: string;
391
+ description?: string;
392
+ component_code?: string;
393
+ styles?: string;
394
+ props_schema?: Record<string, unknown>;
395
+ default_props?: Record<string, unknown>;
396
+ scope?: 'public' | 'private';
397
+ }
398
+ interface WidgetSystemPromptResponse {
399
+ prompt: string;
400
+ }
401
+ interface WidgetsClientConfig {
402
+ baseUrl?: string;
403
+ }
404
+
405
+ /**
406
+ * User type definitions
407
+ */
408
+ interface UserProfile {
409
+ mid: string;
410
+ username: string;
411
+ avatar_url: string | null;
412
+ bio?: string | null;
413
+ created_at?: string;
414
+ updated_at?: string;
415
+ }
416
+ interface UserProfileUpdateInput {
417
+ username?: string;
418
+ avatar_url?: string | null;
419
+ bio?: string | null;
420
+ }
421
+ interface UserProfileResponse {
422
+ profile?: UserProfile;
423
+ error?: string;
424
+ }
425
+ interface UserClientConfig {
426
+ baseUrl?: string;
427
+ }
428
+
429
+ /**
430
+ * File type definitions
431
+ */
432
+ interface FileUploadResponse {
433
+ cid: string;
434
+ url: string;
435
+ filePath?: string;
436
+ size?: number;
437
+ mimeType?: string;
438
+ }
439
+ interface FilesClientConfig {
440
+ baseUrl?: string;
441
+ }
442
+
443
+ /**
444
+ * Skill Types
445
+ */
446
+ interface Skill {
447
+ id: string;
448
+ name: string;
449
+ description: string;
450
+ creator_mid: string;
451
+ skill_md: string;
452
+ skill_hash: string | null;
453
+ scripts: {
454
+ name: string;
455
+ content: string;
456
+ }[] | null;
457
+ references: {
458
+ name: string;
459
+ content: string;
460
+ }[] | null;
461
+ assets: {
462
+ name: string;
463
+ url: string;
464
+ }[] | null;
465
+ tags: string[];
466
+ version: string;
467
+ is_public: boolean;
468
+ usage_count: number;
469
+ created_at: number;
470
+ updated_at: number;
471
+ }
472
+ interface SkillsListResponse {
473
+ skills: Skill[];
474
+ }
475
+ interface SkillResponse {
476
+ skill?: Skill;
477
+ skill_id?: string;
478
+ success?: boolean;
479
+ error?: string;
480
+ }
481
+ interface SkillCreateInput {
482
+ name: string;
483
+ description?: string;
484
+ skill_md: string;
485
+ scripts?: {
486
+ name: string;
487
+ content: string;
488
+ }[] | null;
489
+ references?: {
490
+ name: string;
491
+ content: string;
492
+ }[] | null;
493
+ assets?: {
494
+ name: string;
495
+ url: string;
496
+ }[] | null;
497
+ tags?: string[];
498
+ version?: string;
499
+ is_public?: boolean;
500
+ creator_mid?: string;
501
+ }
502
+ interface SkillUpdateInput {
503
+ name?: string;
504
+ description?: string;
505
+ skill_md?: string;
506
+ scripts?: {
507
+ name: string;
508
+ content: string;
509
+ }[] | null;
510
+ references?: {
511
+ name: string;
512
+ content: string;
513
+ }[] | null;
514
+ assets?: {
515
+ name: string;
516
+ url: string;
517
+ }[] | null;
518
+ tags?: string[];
519
+ version?: string;
520
+ is_public?: boolean;
521
+ }
522
+ interface SkillsClientConfig {
523
+ baseUrl?: string;
524
+ /**
525
+ * Use the coprocessor API (/cpx/agent/skills) instead of legacy (/skills).
526
+ * Defaults to true. Set to false for backwards compatibility.
527
+ */
528
+ useCpxApi?: boolean;
529
+ }
530
+ interface SkillVerifyResponse {
531
+ valid: boolean;
532
+ expected?: string;
533
+ actual?: string;
534
+ }
535
+ interface SkillVerifyResponse {
536
+ valid: boolean;
537
+ expected?: string;
538
+ actual?: string;
539
+ }
540
+ interface SkillMapResponse {
541
+ version: number;
542
+ generated_at: number;
543
+ skills: Array<{
544
+ id: string;
545
+ name: string;
546
+ description: string;
547
+ content_type: string;
548
+ category: string | null;
549
+ usage_count: number;
550
+ is_precompiled: boolean;
551
+ skill_hash: string | null;
552
+ }>;
553
+ }
554
+ interface SkillMapPromptResponse {
555
+ prompt: string;
556
+ }
557
+ interface SkillSummaryResponse {
558
+ summary: string;
559
+ skills: Array<{
560
+ id: string;
561
+ name: string;
562
+ description: string;
563
+ keywords: string[];
564
+ }>;
565
+ }
566
+
567
+ /**
568
+ * Points Types
569
+ *
570
+ * Types for the Points Coprocessor SDK client.
571
+ */
572
+ /**
573
+ * Context Domain - namespace for points with authority control
574
+ */
575
+ interface ContextDomain {
576
+ id: string;
577
+ name: string;
578
+ description?: string;
579
+ authorityAgent: string;
580
+ seal: string;
581
+ createdAt: number;
582
+ metadata?: Record<string, unknown>;
583
+ }
584
+ /**
585
+ * Point Context - defines what actions/achievements points represent
586
+ */
587
+ interface PointContext {
588
+ id: string;
589
+ domainId: string;
590
+ name: string;
591
+ description?: string;
592
+ unit?: string;
593
+ allowNegative: boolean;
594
+ createdAt: number;
595
+ metadata?: Record<string, unknown>;
596
+ }
597
+ /**
598
+ * Delegation - authority delegation to sub-agents
599
+ */
600
+ interface Delegation {
601
+ id: string;
602
+ domainId: string;
603
+ delegator: string;
604
+ delegate: string;
605
+ scope: DelegationScope;
606
+ validFrom: number;
607
+ validUntil: number | null;
608
+ revoked: boolean;
609
+ revokedAt?: number;
610
+ signature: string;
611
+ createdAt: number;
612
+ }
613
+ interface DelegationScope {
614
+ pointContexts: string[];
615
+ maxAmount?: number | null;
616
+ canDelegate: boolean;
617
+ }
618
+ /**
619
+ * Point Record - individual point addition/deduction
620
+ */
621
+ interface PointRecord {
622
+ id: string;
623
+ mid: string;
624
+ domainId: string;
625
+ contextId: string;
626
+ amount: number;
627
+ reason?: string;
628
+ actionProof: ActionProof;
629
+ issuer: string;
630
+ delegationChain?: DelegationChainLink[];
631
+ signature: string;
632
+ createdAt: number;
633
+ }
634
+ interface ActionProof {
635
+ taskId?: string;
636
+ resultHash?: string;
637
+ consensusProof?: string;
638
+ failureType?: string;
639
+ evidenceHash?: string;
640
+ metadata?: Record<string, unknown>;
641
+ }
642
+ interface DelegationChainLink {
643
+ delegationId: string;
644
+ delegator: string;
645
+ delegate: string;
646
+ signature: string;
647
+ }
648
+ /**
649
+ * Point Spend Record
650
+ */
651
+ interface PointSpend {
652
+ id: string;
653
+ mid: string;
654
+ domainId: string;
655
+ contextId: string;
656
+ amount: number;
657
+ destination: SpendDestination;
658
+ metaproof?: string;
659
+ signature: string;
660
+ createdAt: number;
661
+ }
662
+ interface SpendDestination {
663
+ type: 'settlement' | 'burn';
664
+ target?: string;
665
+ }
666
+ /**
667
+ * Balance response
668
+ */
669
+ interface PointBalance {
670
+ mid: string;
671
+ domain?: string;
672
+ total: number;
673
+ byContext: Record<string, number>;
674
+ }
675
+ interface CreateDomainInput {
676
+ name: string;
677
+ description?: string;
678
+ authorityAgent: string;
679
+ metadata?: Record<string, unknown>;
680
+ }
681
+ interface CreateContextInput {
682
+ domainId: string;
683
+ name: string;
684
+ description?: string;
685
+ unit?: string;
686
+ allowNegative?: boolean;
687
+ metadata?: Record<string, unknown>;
688
+ }
689
+ interface CreateDelegationInput {
690
+ domainId: string;
691
+ delegate: string;
692
+ scope: DelegationScope;
693
+ validFrom?: number;
694
+ validUntil?: number | null;
695
+ }
696
+ interface AddPointsInput {
697
+ mid: string;
698
+ domainId: string;
699
+ contextId: string;
700
+ amount: number;
701
+ reason?: string;
702
+ actionProof: ActionProof;
703
+ delegationChain?: DelegationChainLink[];
704
+ }
705
+ interface SpendPointsInput {
706
+ mid: string;
707
+ domainId: string;
708
+ contextId: string;
709
+ amount: number;
710
+ destination: SpendDestination;
711
+ }
712
+ interface HistoryFilters {
713
+ mid?: string;
714
+ domainId?: string;
715
+ contextId?: string;
716
+ periodStart?: number;
717
+ periodEnd?: number;
718
+ taskId?: string;
719
+ limit?: number;
720
+ offset?: number;
721
+ }
722
+ interface DelegationFilters {
723
+ domainId?: string;
724
+ delegator?: string;
725
+ delegate?: string;
726
+ activeOnly?: boolean;
727
+ }
728
+ interface DomainsListResponse {
729
+ domains: ContextDomain[];
730
+ }
731
+ interface DomainResponse {
732
+ domain: ContextDomain;
733
+ paymentRequired?: boolean;
734
+ }
735
+ interface ContextsListResponse {
736
+ contexts: PointContext[];
737
+ }
738
+ interface ContextResponse {
739
+ context: PointContext;
740
+ paymentRequired?: boolean;
741
+ }
742
+ interface DelegationsListResponse {
743
+ delegations: Delegation[];
744
+ }
745
+ interface DelegationResponse {
746
+ delegation: Delegation;
747
+ }
748
+ interface PointRecordResponse {
749
+ record: PointRecord;
750
+ }
751
+ interface PointSpendResponse {
752
+ spend: PointSpend;
753
+ metaproof?: string;
754
+ }
755
+ interface HistoryResponse {
756
+ records: PointRecord[];
757
+ total: number;
758
+ }
759
+ interface InitNetworkResponse {
760
+ domain: ContextDomain;
761
+ contexts: PointContext[];
762
+ }
763
+ interface PaymentRequiredResponse {
764
+ error: string;
765
+ paymentRequired: true;
766
+ paymentDetails: {
767
+ type: string;
768
+ amount: number;
769
+ currency: string;
770
+ recipient: string;
771
+ };
772
+ }
773
+ interface PointsClientConfig {
774
+ baseUrl?: string;
775
+ }
776
+
777
+ export type { WidgetSystemPromptResponse as $, Agent as A, MediaType as B, ChatCompletionRequest as C, SocialPost as D, SocialComment as E, SocialRemix as F, FeedResponse as G, CommentsResponse as H, ImaginationSource as I, LikeResponse as J, CommentResponse as K, LikeCheckResponse as L, Message as M, CreatePostInput as N, CreatePostResponse as O, PostResponse as P, ProfileResponse as Q, RemixesResponse as R, SocialAuthor as S, TaskType as T, SocialClientConfig as U, Widget as V, WorkflowData as W, WidgetsListResponse as X, WidgetResponse as Y, WidgetCreateInput as Z, WidgetUpdateInput as _, TaskStatus as a, WidgetsClientConfig as a0, UserProfile as a1, UserProfileUpdateInput as a2, UserProfileResponse as a3, UserClientConfig as a4, FileUploadResponse as a5, FilesClientConfig as a6, Skill as a7, SkillVerifyResponse as a8, SkillsListResponse as a9, ContextsListResponse as aA, ContextResponse as aB, DelegationsListResponse as aC, DelegationResponse as aD, PointRecordResponse as aE, PointSpendResponse as aF, HistoryResponse as aG, InitNetworkResponse as aH, PaymentRequiredResponse as aI, PointsClientConfig as aJ, SkillResponse as aa, SkillCreateInput as ab, SkillUpdateInput as ac, SkillsClientConfig as ad, SkillMapResponse as ae, SkillMapPromptResponse as af, SkillSummaryResponse as ag, ContextDomain as ah, PointContext as ai, Delegation as aj, DelegationScope as ak, PointRecord as al, ActionProof as am, DelegationChainLink as an, PointSpend as ao, SpendDestination as ap, PointBalance as aq, CreateDomainInput as ar, CreateContextInput as as, CreateDelegationInput as at, AddPointsInput as au, SpendPointsInput as av, HistoryFilters as aw, DelegationFilters as ax, DomainsListResponse as ay, DomainResponse as az, TaskState as b, TaskPayload as c, TaskResponse as d, ChatCompletionChunk as e, ChatCompletionResponse as f, MagmaFile as g, ImaginationCharacter as h, ImaginationMetadata as i, AgentTrigger as j, AgentWorkflow as k, AgentWorkflowNode as l, AgentWorkflowEdge as m, AgentExecuteRequest as n, AgentExecuteResponse as o, AgentsListResponse as p, AgentResponse as q, AgentCreateInput as r, AgentUpdateInput as s, AgentFromPromptInput as t, AgentsClientConfig as u, MCPSessionConfig as v, MCPSession as w, MCPMessage as x, MCPContent as y, MCPToolResult as z };