claude-code-controller 0.2.0 → 0.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.
@@ -106,6 +106,7 @@ interface TaskFile {
106
106
  }
107
107
  type TaskStatus = "pending" | "in_progress" | "completed";
108
108
  type AgentType = "general-purpose" | "Bash" | "Explore" | "Plan" | string;
109
+ type PermissionMode = "default" | "acceptEdits" | "bypassPermissions" | "plan" | "dontAsk" | "delegate";
109
110
  interface SpawnAgentOptions {
110
111
  name: string;
111
112
  type?: AgentType;
@@ -113,6 +114,7 @@ interface SpawnAgentOptions {
113
114
  cwd?: string;
114
115
  prompt?: string;
115
116
  permissions?: string[];
117
+ permissionMode?: PermissionMode;
116
118
  /** Environment variables to inject into the agent's process */
117
119
  env?: Record<string, string>;
118
120
  }
@@ -394,4 +396,240 @@ declare class ClaudeCodeController extends EventEmitter<ControllerEvents> implem
394
396
  private ensureInitialized;
395
397
  }
396
398
 
397
- export { AgentHandle as A, ClaudeCodeController as C, type InboxMessage as I, type Logger as L, type PermissionRequestMessage as P, type ReceiveOptions as R, type StructuredMessage as S, type TaskAssignmentMessage as T, type LogLevel as a, type AgentType as b, type ControllerEvents as c, type ControllerOptions as d, type IdleNotificationMessage as e, type PermissionResponseMessage as f, type PlainTextMessage as g, type PlanApprovalRequestMessage as h, type PlanApprovalResponseMessage as i, type ShutdownApprovedMessage as j, type ShutdownRequestMessage as k, type SpawnAgentOptions as l, type TaskFile as m, TaskManager as n, type TaskStatus as o, type TeamConfig as p, TeamManager as q, type TeamMember as r };
399
+ type PermissionPreset = "full" | "edit" | "plan" | "ask";
400
+ interface ClaudeOptions {
401
+ /** Model to use: "sonnet" | "opus" | "haiku" | full model ID */
402
+ model?: "sonnet" | "opus" | "haiku" | (string & {});
403
+ /** Anthropic API key. Maps to ANTHROPIC_AUTH_TOKEN env var. */
404
+ apiKey?: string;
405
+ /** API base URL. Maps to ANTHROPIC_BASE_URL env var. */
406
+ baseUrl?: string;
407
+ /** Request timeout in ms. Maps to API_TIMEOUT_MS env var. */
408
+ timeout?: number;
409
+ /** Working directory for the agent. Defaults to process.cwd(). */
410
+ cwd?: string;
411
+ /**
412
+ * Permission level:
413
+ * - "full" (default) — all tools, no approval needed
414
+ * - "edit" — auto-approve read/write/bash
415
+ * - "plan" — read-only exploration
416
+ * - "ask" — fires permission events for each tool use
417
+ */
418
+ permissions?: PermissionPreset;
419
+ /**
420
+ * Auto-approve permission and plan requests.
421
+ * - `true` — approve everything automatically
422
+ * - `string[]` — only auto-approve these tool names, reject the rest
423
+ *
424
+ * Only meaningful with `permissions: "ask"`. Ignored when "full" or "edit".
425
+ *
426
+ * @example
427
+ * ```ts
428
+ * // Approve everything
429
+ * await claude.agent({ permissions: "ask", autoApprove: true });
430
+ *
431
+ * // Only approve safe tools
432
+ * await claude.agent({ permissions: "ask", autoApprove: ["Read", "Glob", "Grep"] });
433
+ * ```
434
+ */
435
+ autoApprove?: boolean | string[];
436
+ /**
437
+ * Inline callback for permission requests.
438
+ * Called when the agent wants to use a tool.
439
+ * Provides `req.approve()` / `req.reject()` methods.
440
+ *
441
+ * @example
442
+ * ```ts
443
+ * await claude.agent({
444
+ * permissions: "ask",
445
+ * onPermission: (req) => {
446
+ * req.toolName === "Bash" ? req.reject() : req.approve();
447
+ * },
448
+ * });
449
+ * ```
450
+ */
451
+ onPermission?: (request: PermissionRequestInfo) => void;
452
+ /**
453
+ * Inline callback for plan approval requests.
454
+ * Called when the agent submits a plan for review.
455
+ *
456
+ * @example
457
+ * ```ts
458
+ * await claude.agent({
459
+ * onPlan: (req) => {
460
+ * console.log(req.planContent);
461
+ * req.approve();
462
+ * },
463
+ * });
464
+ * ```
465
+ */
466
+ onPlan?: (request: PlanRequestInfo) => void;
467
+ /** Additional environment variables (escape hatch). */
468
+ env?: Record<string, string>;
469
+ /** Log level. Defaults to "warn" for the simplified API. */
470
+ logLevel?: LogLevel;
471
+ /** Custom logger instance. */
472
+ logger?: Logger;
473
+ /** Agent name. Auto-generated if omitted. */
474
+ name?: string;
475
+ /** Agent type. Defaults to "general-purpose". */
476
+ type?: AgentType;
477
+ /** Path to the claude binary. */
478
+ claudeBinary?: string;
479
+ /** Max time in ms to wait for agent to become ready. Default: 60_000. */
480
+ readyTimeout?: number;
481
+ }
482
+ interface AskOptions {
483
+ /** Response timeout in ms. Default: 120_000. */
484
+ timeout?: number;
485
+ /** Poll interval in ms. Default: 500. */
486
+ pollInterval?: number;
487
+ }
488
+ interface SessionOptions extends ClaudeOptions {
489
+ /** Team name. Auto-generated if omitted. */
490
+ teamName?: string;
491
+ }
492
+ interface SessionAgentOptions {
493
+ /** Model override for this agent. */
494
+ model?: string;
495
+ /** Working directory override. */
496
+ cwd?: string;
497
+ /** Agent type override. */
498
+ type?: AgentType;
499
+ /** Permission preset override. */
500
+ permissions?: PermissionPreset;
501
+ /** Auto-approve permission/plan requests. See ClaudeOptions.autoApprove. */
502
+ autoApprove?: boolean | string[];
503
+ /** Inline permission callback. See ClaudeOptions.onPermission. */
504
+ onPermission?: (request: PermissionRequestInfo) => void;
505
+ /** Inline plan callback. See ClaudeOptions.onPlan. */
506
+ onPlan?: (request: PlanRequestInfo) => void;
507
+ /** Per-agent env overrides. */
508
+ env?: Record<string, string>;
509
+ /** Max time in ms to wait for agent to become ready. Default: 60_000. */
510
+ readyTimeout?: number;
511
+ }
512
+ interface PermissionRequestInfo {
513
+ requestId: string;
514
+ toolName: string;
515
+ description: string;
516
+ input?: unknown;
517
+ approve(): Promise<void>;
518
+ reject(): Promise<void>;
519
+ }
520
+ interface PlanRequestInfo {
521
+ requestId: string;
522
+ planContent?: string;
523
+ approve(feedback?: string): Promise<void>;
524
+ reject(feedback: string): Promise<void>;
525
+ }
526
+ interface AgentEvents {
527
+ message: [text: string];
528
+ idle: [];
529
+ permission: [request: PermissionRequestInfo];
530
+ plan: [request: PlanRequestInfo];
531
+ exit: [code: number | null];
532
+ error: [error: Error];
533
+ }
534
+ declare class Agent extends EventEmitter<AgentEvents> {
535
+ private controller;
536
+ private handle;
537
+ private ownsController;
538
+ private disposed;
539
+ private boundListeners;
540
+ private constructor();
541
+ /** Create a standalone agent (owns its own controller). */
542
+ static create(opts?: ClaudeOptions): Promise<Agent>;
543
+ /** Create an agent within an existing session (session owns the controller). */
544
+ static createInSession(controller: ClaudeCodeController, name: string, opts?: SessionAgentOptions): Promise<Agent>;
545
+ /** The agent's name. */
546
+ get name(): string;
547
+ /** The agent process PID. */
548
+ get pid(): number | undefined;
549
+ /** Whether the agent process is still running. */
550
+ get isRunning(): boolean;
551
+ /**
552
+ * Send a message and wait for the response.
553
+ *
554
+ * Uses event-based waiting (via the controller's InboxPoller) instead of
555
+ * polling `readUnread()` directly, which avoids a race condition where the
556
+ * poller marks inbox messages as read before `receive()` can see them.
557
+ */
558
+ ask(question: string, opts?: AskOptions): Promise<string>;
559
+ /** Send a message without waiting for a response. */
560
+ send(message: string): Promise<void>;
561
+ /** Wait for the next response from this agent. */
562
+ receive(opts?: AskOptions): Promise<string>;
563
+ /**
564
+ * Close this agent. If standalone, shuts down the entire controller.
565
+ * If session-owned, kills only this agent's process.
566
+ */
567
+ close(): Promise<void>;
568
+ /** Mark as disposed (used by Session when it closes). */
569
+ markDisposed(): void;
570
+ [Symbol.asyncDispose](): Promise<void>;
571
+ private wireEvents;
572
+ private unwireEvents;
573
+ private wireBehavior;
574
+ private ensureNotDisposed;
575
+ }
576
+ declare class Session {
577
+ readonly controller: ClaudeCodeController;
578
+ private defaults;
579
+ private agents;
580
+ private disposed;
581
+ private constructor();
582
+ static create(opts?: SessionOptions): Promise<Session>;
583
+ /** Spawn a named agent in this session. Inherits session defaults. */
584
+ agent(name: string, opts?: SessionAgentOptions): Promise<Agent>;
585
+ /** Get an existing agent by name. */
586
+ get(name: string): Agent | undefined;
587
+ /** Close all agents and shut down the session. */
588
+ close(): Promise<void>;
589
+ [Symbol.asyncDispose](): Promise<void>;
590
+ private ensureNotDisposed;
591
+ }
592
+ /**
593
+ * One-liner: send a prompt, get a response.
594
+ * Creates an ephemeral agent, sends the message, returns the answer, cleans up.
595
+ *
596
+ * @example
597
+ * ```ts
598
+ * const answer = await claude("What does this project do?", { model: "sonnet" });
599
+ * ```
600
+ */
601
+ declare function claudeCall(prompt: string, opts?: ClaudeOptions): Promise<string>;
602
+ /**
603
+ * The simplified Claude Code API.
604
+ *
605
+ * - `claude(prompt, opts?)` — one-liner: ask a question, get an answer
606
+ * - `claude.agent(opts?)` — create a persistent agent for multi-turn conversations
607
+ * - `claude.session(opts?)` — create a multi-agent session
608
+ */
609
+ declare const claude: typeof claudeCall & {
610
+ /**
611
+ * Create a persistent agent for multi-turn conversations.
612
+ *
613
+ * @example
614
+ * ```ts
615
+ * const agent = await claude.agent({ model: "sonnet" });
616
+ * const answer = await agent.ask("What is 2+2?");
617
+ * await agent.close();
618
+ * ```
619
+ */
620
+ agent: (opts?: ClaudeOptions) => Promise<Agent>;
621
+ /**
622
+ * Create a multi-agent session.
623
+ *
624
+ * @example
625
+ * ```ts
626
+ * const session = await claude.session({ model: "sonnet" });
627
+ * const reviewer = await session.agent("reviewer", { model: "opus" });
628
+ * const coder = await session.agent("coder");
629
+ * await session.close();
630
+ * ```
631
+ */
632
+ session: (opts?: SessionOptions) => Promise<Session>;
633
+ };
634
+
635
+ export { Agent as A, type TeamConfig as B, ClaudeCodeController as C, TeamManager as D, type TeamMember as E, claude as F, type InboxMessage as I, type Logger as L, type PermissionMode as P, type ReceiveOptions as R, type StructuredMessage as S, type TaskAssignmentMessage as T, type LogLevel as a, type AgentEvents as b, AgentHandle as c, type AgentType as d, type AskOptions as e, type ClaudeOptions as f, type ControllerEvents as g, type ControllerOptions as h, type IdleNotificationMessage as i, type PermissionPreset as j, type PermissionRequestInfo as k, type PermissionRequestMessage as l, type PermissionResponseMessage as m, type PlainTextMessage as n, type PlanApprovalRequestMessage as o, type PlanApprovalResponseMessage as p, type PlanRequestInfo as q, Session as r, type SessionAgentOptions as s, type SessionOptions as t, type ShutdownApprovedMessage as u, type ShutdownRequestMessage as v, type SpawnAgentOptions as w, type TaskFile as x, TaskManager as y, type TaskStatus as z };
@@ -106,6 +106,7 @@ interface TaskFile {
106
106
  }
107
107
  type TaskStatus = "pending" | "in_progress" | "completed";
108
108
  type AgentType = "general-purpose" | "Bash" | "Explore" | "Plan" | string;
109
+ type PermissionMode = "default" | "acceptEdits" | "bypassPermissions" | "plan" | "dontAsk" | "delegate";
109
110
  interface SpawnAgentOptions {
110
111
  name: string;
111
112
  type?: AgentType;
@@ -113,6 +114,7 @@ interface SpawnAgentOptions {
113
114
  cwd?: string;
114
115
  prompt?: string;
115
116
  permissions?: string[];
117
+ permissionMode?: PermissionMode;
116
118
  /** Environment variables to inject into the agent's process */
117
119
  env?: Record<string, string>;
118
120
  }
@@ -394,4 +396,240 @@ declare class ClaudeCodeController extends EventEmitter<ControllerEvents> implem
394
396
  private ensureInitialized;
395
397
  }
396
398
 
397
- export { AgentHandle as A, ClaudeCodeController as C, type InboxMessage as I, type Logger as L, type PermissionRequestMessage as P, type ReceiveOptions as R, type StructuredMessage as S, type TaskAssignmentMessage as T, type LogLevel as a, type AgentType as b, type ControllerEvents as c, type ControllerOptions as d, type IdleNotificationMessage as e, type PermissionResponseMessage as f, type PlainTextMessage as g, type PlanApprovalRequestMessage as h, type PlanApprovalResponseMessage as i, type ShutdownApprovedMessage as j, type ShutdownRequestMessage as k, type SpawnAgentOptions as l, type TaskFile as m, TaskManager as n, type TaskStatus as o, type TeamConfig as p, TeamManager as q, type TeamMember as r };
399
+ type PermissionPreset = "full" | "edit" | "plan" | "ask";
400
+ interface ClaudeOptions {
401
+ /** Model to use: "sonnet" | "opus" | "haiku" | full model ID */
402
+ model?: "sonnet" | "opus" | "haiku" | (string & {});
403
+ /** Anthropic API key. Maps to ANTHROPIC_AUTH_TOKEN env var. */
404
+ apiKey?: string;
405
+ /** API base URL. Maps to ANTHROPIC_BASE_URL env var. */
406
+ baseUrl?: string;
407
+ /** Request timeout in ms. Maps to API_TIMEOUT_MS env var. */
408
+ timeout?: number;
409
+ /** Working directory for the agent. Defaults to process.cwd(). */
410
+ cwd?: string;
411
+ /**
412
+ * Permission level:
413
+ * - "full" (default) — all tools, no approval needed
414
+ * - "edit" — auto-approve read/write/bash
415
+ * - "plan" — read-only exploration
416
+ * - "ask" — fires permission events for each tool use
417
+ */
418
+ permissions?: PermissionPreset;
419
+ /**
420
+ * Auto-approve permission and plan requests.
421
+ * - `true` — approve everything automatically
422
+ * - `string[]` — only auto-approve these tool names, reject the rest
423
+ *
424
+ * Only meaningful with `permissions: "ask"`. Ignored when "full" or "edit".
425
+ *
426
+ * @example
427
+ * ```ts
428
+ * // Approve everything
429
+ * await claude.agent({ permissions: "ask", autoApprove: true });
430
+ *
431
+ * // Only approve safe tools
432
+ * await claude.agent({ permissions: "ask", autoApprove: ["Read", "Glob", "Grep"] });
433
+ * ```
434
+ */
435
+ autoApprove?: boolean | string[];
436
+ /**
437
+ * Inline callback for permission requests.
438
+ * Called when the agent wants to use a tool.
439
+ * Provides `req.approve()` / `req.reject()` methods.
440
+ *
441
+ * @example
442
+ * ```ts
443
+ * await claude.agent({
444
+ * permissions: "ask",
445
+ * onPermission: (req) => {
446
+ * req.toolName === "Bash" ? req.reject() : req.approve();
447
+ * },
448
+ * });
449
+ * ```
450
+ */
451
+ onPermission?: (request: PermissionRequestInfo) => void;
452
+ /**
453
+ * Inline callback for plan approval requests.
454
+ * Called when the agent submits a plan for review.
455
+ *
456
+ * @example
457
+ * ```ts
458
+ * await claude.agent({
459
+ * onPlan: (req) => {
460
+ * console.log(req.planContent);
461
+ * req.approve();
462
+ * },
463
+ * });
464
+ * ```
465
+ */
466
+ onPlan?: (request: PlanRequestInfo) => void;
467
+ /** Additional environment variables (escape hatch). */
468
+ env?: Record<string, string>;
469
+ /** Log level. Defaults to "warn" for the simplified API. */
470
+ logLevel?: LogLevel;
471
+ /** Custom logger instance. */
472
+ logger?: Logger;
473
+ /** Agent name. Auto-generated if omitted. */
474
+ name?: string;
475
+ /** Agent type. Defaults to "general-purpose". */
476
+ type?: AgentType;
477
+ /** Path to the claude binary. */
478
+ claudeBinary?: string;
479
+ /** Max time in ms to wait for agent to become ready. Default: 60_000. */
480
+ readyTimeout?: number;
481
+ }
482
+ interface AskOptions {
483
+ /** Response timeout in ms. Default: 120_000. */
484
+ timeout?: number;
485
+ /** Poll interval in ms. Default: 500. */
486
+ pollInterval?: number;
487
+ }
488
+ interface SessionOptions extends ClaudeOptions {
489
+ /** Team name. Auto-generated if omitted. */
490
+ teamName?: string;
491
+ }
492
+ interface SessionAgentOptions {
493
+ /** Model override for this agent. */
494
+ model?: string;
495
+ /** Working directory override. */
496
+ cwd?: string;
497
+ /** Agent type override. */
498
+ type?: AgentType;
499
+ /** Permission preset override. */
500
+ permissions?: PermissionPreset;
501
+ /** Auto-approve permission/plan requests. See ClaudeOptions.autoApprove. */
502
+ autoApprove?: boolean | string[];
503
+ /** Inline permission callback. See ClaudeOptions.onPermission. */
504
+ onPermission?: (request: PermissionRequestInfo) => void;
505
+ /** Inline plan callback. See ClaudeOptions.onPlan. */
506
+ onPlan?: (request: PlanRequestInfo) => void;
507
+ /** Per-agent env overrides. */
508
+ env?: Record<string, string>;
509
+ /** Max time in ms to wait for agent to become ready. Default: 60_000. */
510
+ readyTimeout?: number;
511
+ }
512
+ interface PermissionRequestInfo {
513
+ requestId: string;
514
+ toolName: string;
515
+ description: string;
516
+ input?: unknown;
517
+ approve(): Promise<void>;
518
+ reject(): Promise<void>;
519
+ }
520
+ interface PlanRequestInfo {
521
+ requestId: string;
522
+ planContent?: string;
523
+ approve(feedback?: string): Promise<void>;
524
+ reject(feedback: string): Promise<void>;
525
+ }
526
+ interface AgentEvents {
527
+ message: [text: string];
528
+ idle: [];
529
+ permission: [request: PermissionRequestInfo];
530
+ plan: [request: PlanRequestInfo];
531
+ exit: [code: number | null];
532
+ error: [error: Error];
533
+ }
534
+ declare class Agent extends EventEmitter<AgentEvents> {
535
+ private controller;
536
+ private handle;
537
+ private ownsController;
538
+ private disposed;
539
+ private boundListeners;
540
+ private constructor();
541
+ /** Create a standalone agent (owns its own controller). */
542
+ static create(opts?: ClaudeOptions): Promise<Agent>;
543
+ /** Create an agent within an existing session (session owns the controller). */
544
+ static createInSession(controller: ClaudeCodeController, name: string, opts?: SessionAgentOptions): Promise<Agent>;
545
+ /** The agent's name. */
546
+ get name(): string;
547
+ /** The agent process PID. */
548
+ get pid(): number | undefined;
549
+ /** Whether the agent process is still running. */
550
+ get isRunning(): boolean;
551
+ /**
552
+ * Send a message and wait for the response.
553
+ *
554
+ * Uses event-based waiting (via the controller's InboxPoller) instead of
555
+ * polling `readUnread()` directly, which avoids a race condition where the
556
+ * poller marks inbox messages as read before `receive()` can see them.
557
+ */
558
+ ask(question: string, opts?: AskOptions): Promise<string>;
559
+ /** Send a message without waiting for a response. */
560
+ send(message: string): Promise<void>;
561
+ /** Wait for the next response from this agent. */
562
+ receive(opts?: AskOptions): Promise<string>;
563
+ /**
564
+ * Close this agent. If standalone, shuts down the entire controller.
565
+ * If session-owned, kills only this agent's process.
566
+ */
567
+ close(): Promise<void>;
568
+ /** Mark as disposed (used by Session when it closes). */
569
+ markDisposed(): void;
570
+ [Symbol.asyncDispose](): Promise<void>;
571
+ private wireEvents;
572
+ private unwireEvents;
573
+ private wireBehavior;
574
+ private ensureNotDisposed;
575
+ }
576
+ declare class Session {
577
+ readonly controller: ClaudeCodeController;
578
+ private defaults;
579
+ private agents;
580
+ private disposed;
581
+ private constructor();
582
+ static create(opts?: SessionOptions): Promise<Session>;
583
+ /** Spawn a named agent in this session. Inherits session defaults. */
584
+ agent(name: string, opts?: SessionAgentOptions): Promise<Agent>;
585
+ /** Get an existing agent by name. */
586
+ get(name: string): Agent | undefined;
587
+ /** Close all agents and shut down the session. */
588
+ close(): Promise<void>;
589
+ [Symbol.asyncDispose](): Promise<void>;
590
+ private ensureNotDisposed;
591
+ }
592
+ /**
593
+ * One-liner: send a prompt, get a response.
594
+ * Creates an ephemeral agent, sends the message, returns the answer, cleans up.
595
+ *
596
+ * @example
597
+ * ```ts
598
+ * const answer = await claude("What does this project do?", { model: "sonnet" });
599
+ * ```
600
+ */
601
+ declare function claudeCall(prompt: string, opts?: ClaudeOptions): Promise<string>;
602
+ /**
603
+ * The simplified Claude Code API.
604
+ *
605
+ * - `claude(prompt, opts?)` — one-liner: ask a question, get an answer
606
+ * - `claude.agent(opts?)` — create a persistent agent for multi-turn conversations
607
+ * - `claude.session(opts?)` — create a multi-agent session
608
+ */
609
+ declare const claude: typeof claudeCall & {
610
+ /**
611
+ * Create a persistent agent for multi-turn conversations.
612
+ *
613
+ * @example
614
+ * ```ts
615
+ * const agent = await claude.agent({ model: "sonnet" });
616
+ * const answer = await agent.ask("What is 2+2?");
617
+ * await agent.close();
618
+ * ```
619
+ */
620
+ agent: (opts?: ClaudeOptions) => Promise<Agent>;
621
+ /**
622
+ * Create a multi-agent session.
623
+ *
624
+ * @example
625
+ * ```ts
626
+ * const session = await claude.session({ model: "sonnet" });
627
+ * const reviewer = await session.agent("reviewer", { model: "opus" });
628
+ * const coder = await session.agent("coder");
629
+ * await session.close();
630
+ * ```
631
+ */
632
+ session: (opts?: SessionOptions) => Promise<Session>;
633
+ };
634
+
635
+ export { Agent as A, type TeamConfig as B, ClaudeCodeController as C, TeamManager as D, type TeamMember as E, claude as F, type InboxMessage as I, type Logger as L, type PermissionMode as P, type ReceiveOptions as R, type StructuredMessage as S, type TaskAssignmentMessage as T, type LogLevel as a, type AgentEvents as b, AgentHandle as c, type AgentType as d, type AskOptions as e, type ClaudeOptions as f, type ControllerEvents as g, type ControllerOptions as h, type IdleNotificationMessage as i, type PermissionPreset as j, type PermissionRequestInfo as k, type PermissionRequestMessage as l, type PermissionResponseMessage as m, type PlainTextMessage as n, type PlanApprovalRequestMessage as o, type PlanApprovalResponseMessage as p, type PlanRequestInfo as q, Session as r, type SessionAgentOptions as s, type SessionOptions as t, type ShutdownApprovedMessage as u, type ShutdownRequestMessage as v, type SpawnAgentOptions as w, type TaskFile as x, TaskManager as y, type TaskStatus as z };