@elizaos/plugin-shell 1.2.0 → 2.0.0-alpha.10

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 (61) hide show
  1. package/dist/actions/clearHistory.d.ts +4 -0
  2. package/dist/actions/clearHistory.d.ts.map +1 -0
  3. package/dist/actions/index.d.ts +2 -0
  4. package/dist/actions/index.d.ts.map +1 -0
  5. package/dist/approvals/allowlist.d.ts +76 -0
  6. package/dist/approvals/allowlist.d.ts.map +1 -0
  7. package/dist/approvals/analysis.d.ts +76 -0
  8. package/dist/approvals/analysis.d.ts.map +1 -0
  9. package/dist/approvals/index.d.ts +12 -0
  10. package/dist/approvals/index.d.ts.map +1 -0
  11. package/dist/approvals/service.d.ts +121 -0
  12. package/dist/approvals/service.d.ts.map +1 -0
  13. package/dist/approvals/types.d.ts +219 -0
  14. package/dist/approvals/types.d.ts.map +1 -0
  15. package/dist/build.d.ts +2 -0
  16. package/dist/build.d.ts.map +1 -0
  17. package/dist/generated/prompts/typescript/prompts.d.ts +12 -0
  18. package/dist/generated/prompts/typescript/prompts.d.ts.map +1 -0
  19. package/dist/generated/specs/spec-helpers.d.ts +49 -0
  20. package/dist/generated/specs/spec-helpers.d.ts.map +1 -0
  21. package/dist/generated/specs/specs.d.ts +73 -0
  22. package/dist/generated/specs/specs.d.ts.map +1 -0
  23. package/dist/index.browser.d.ts +4 -0
  24. package/dist/index.browser.d.ts.map +1 -0
  25. package/dist/index.d.ts +14 -106
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +5161 -916
  28. package/dist/index.js.map +35 -1
  29. package/dist/providers/index.d.ts +2 -0
  30. package/dist/providers/index.d.ts.map +1 -0
  31. package/dist/providers/shellHistoryProvider.d.ts +4 -0
  32. package/dist/providers/shellHistoryProvider.d.ts.map +1 -0
  33. package/dist/providers/terminalUsage.d.ts +3 -0
  34. package/dist/providers/terminalUsage.d.ts.map +1 -0
  35. package/dist/services/index.d.ts +3 -0
  36. package/dist/services/index.d.ts.map +1 -0
  37. package/dist/services/processRegistry.d.ts +25 -0
  38. package/dist/services/processRegistry.d.ts.map +1 -0
  39. package/dist/services/shellService.d.ts +91 -0
  40. package/dist/services/shellService.d.ts.map +1 -0
  41. package/dist/types/index.d.ts +144 -0
  42. package/dist/types/index.d.ts.map +1 -0
  43. package/dist/utils/config.d.ts +4 -0
  44. package/dist/utils/config.d.ts.map +1 -0
  45. package/dist/utils/index.d.ts +7 -0
  46. package/dist/utils/index.d.ts.map +1 -0
  47. package/dist/utils/pathUtils.d.ts +5 -0
  48. package/dist/utils/pathUtils.d.ts.map +1 -0
  49. package/dist/utils/processQueue.d.ts +136 -0
  50. package/dist/utils/processQueue.d.ts.map +1 -0
  51. package/dist/utils/ptyKeys.d.ts +23 -0
  52. package/dist/utils/ptyKeys.d.ts.map +1 -0
  53. package/dist/utils/shellArgv.d.ts +37 -0
  54. package/dist/utils/shellArgv.d.ts.map +1 -0
  55. package/dist/utils/shellUtils.d.ts +103 -0
  56. package/dist/utils/shellUtils.d.ts.map +1 -0
  57. package/dist/vitest.config.d.ts +3 -0
  58. package/dist/vitest.config.d.ts.map +1 -0
  59. package/package.json +125 -38
  60. package/LICENSE +0 -21
  61. package/README.md +0 -352
@@ -0,0 +1,2 @@
1
+ export { default, shellHistoryProvider } from "./shellHistoryProvider";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type Provider } from "@elizaos/core";
2
+ export declare const shellHistoryProvider: Provider;
3
+ export default shellHistoryProvider;
4
+ //# sourceMappingURL=shellHistoryProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellHistoryProvider.d.ts","sourceRoot":"","sources":["../../providers/shellHistoryProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,KAAK,QAAQ,EAEb,MAAM,eAAe,CAAC;AAUvB,eAAO,MAAM,oBAAoB,EAAE,QAuHlC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Provider } from "@elizaos/core";
2
+ export declare const terminalUsageProvider: Provider;
3
+ //# sourceMappingURL=terminalUsage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminalUsage.d.ts","sourceRoot":"","sources":["../../providers/terminalUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,QAAQ,EAGhB,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,qBAAqB,EAAE,QAqDnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { addSession, appendOutput, clearFinished, createSessionSlug, deleteSession, drainSession, getFinishedSession, getSession, listFinishedSessions, listRunningSessions, markBackgrounded, markExited, resetProcessRegistryForTests, setJobTtlMs, tail, trimWithCap, } from "./processRegistry";
2
+ export { ShellService } from "./shellService";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,4BAA4B,EAC5B,WAAW,EACX,IAAI,EACJ,WAAW,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Process Registry - Manages running and finished shell sessions
3
+ * Ported from otto bash-process-registry.ts
4
+ */
5
+ import type { FinishedSession, ProcessSession, ProcessStatus } from "../types";
6
+ export declare function createSessionSlug(isTaken?: (id: string) => boolean): string;
7
+ export declare function addSession(session: ProcessSession): void;
8
+ export declare function getSession(id: string): ProcessSession | undefined;
9
+ export declare function getFinishedSession(id: string): FinishedSession | undefined;
10
+ export declare function deleteSession(id: string): void;
11
+ export declare function tail(text: string, max?: number): string;
12
+ export declare function trimWithCap(text: string, max: number): string;
13
+ export declare function appendOutput(session: ProcessSession, stream: "stdout" | "stderr", chunk: string): void;
14
+ export declare function drainSession(session: ProcessSession): {
15
+ stdout: string;
16
+ stderr: string;
17
+ };
18
+ export declare function markExited(session: ProcessSession, exitCode: number | null, exitSignal: NodeJS.Signals | number | null, status: ProcessStatus): void;
19
+ export declare function markBackgrounded(session: ProcessSession): void;
20
+ export declare function listRunningSessions(): ProcessSession[];
21
+ export declare function listFinishedSessions(): FinishedSession[];
22
+ export declare function clearFinished(): void;
23
+ export declare function resetProcessRegistryForTests(): void;
24
+ export declare function setJobTtlMs(value?: number): void;
25
+ //# sourceMappingURL=processRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processRegistry.d.ts","sourceRoot":"","sources":["../../services/processRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA4I/E,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CA8B3E;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAGxD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEjE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE1E;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG9C;AAoCD,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAO,GAAG,MAAM,CAKrD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED,wBAAgB,YAAY,CAC3B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAC3B,KAAK,EAAE,MAAM,GACX,IAAI,CAoCN;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CACf,CAQA;AAwBD,wBAAgB,UAAU,CACzB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,EAC1C,MAAM,EAAE,aAAa,GACnB,IAAI,CAMN;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE9D;AAED,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAEtD;AAED,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CAExD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAInD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAOhD"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Enhanced Shell Service with PTY, background execution, and session management
3
+ * Migrated from otto bash-tools.exec.ts, bash-tools.process.ts
4
+ */
5
+ import { type IAgentRuntime, Service } from "@elizaos/core";
6
+ import type { CommandHistoryEntry, CommandResult, ExecResult, ExecuteOptions, FinishedSession, ProcessActionParams, ProcessSession, ShellConfig } from "../types";
7
+ export declare class ShellService extends Service {
8
+ static serviceType: string;
9
+ private shellConfig;
10
+ private currentDirectory;
11
+ private commandHistory;
12
+ private maxHistoryPerConversation;
13
+ private scopeKey?;
14
+ constructor(runtime: IAgentRuntime);
15
+ static start(runtime: IAgentRuntime): Promise<ShellService>;
16
+ stop(): Promise<void>;
17
+ get capabilityDescription(): string;
18
+ /**
19
+ * Set scope key for session isolation
20
+ */
21
+ setScopeKey(scopeKey: string): void;
22
+ /**
23
+ * Simple command execution (original API for backward compatibility)
24
+ */
25
+ executeCommand(command: string, conversationId?: string): Promise<CommandResult>;
26
+ /**
27
+ * Enhanced command execution with PTY, background support, and session management
28
+ * This is the main execution method that supports all advanced features
29
+ */
30
+ exec(command: string, options?: ExecuteOptions): Promise<ExecResult>;
31
+ /**
32
+ * Process management action handler
33
+ * Supports: list, poll, log, write, send-keys, submit, paste, kill, clear, remove
34
+ */
35
+ processAction(params: ProcessActionParams): Promise<{
36
+ success: boolean;
37
+ message: string;
38
+ data?: Record<string, unknown>;
39
+ }>;
40
+ /**
41
+ * List all running sessions
42
+ */
43
+ listRunningSessions(): ProcessSession[];
44
+ /**
45
+ * List all finished sessions
46
+ */
47
+ listFinishedSessions(): FinishedSession[];
48
+ /**
49
+ * Get a specific session by ID
50
+ */
51
+ getSession(id: string): ProcessSession | undefined;
52
+ /**
53
+ * Get a specific finished session by ID
54
+ */
55
+ getFinishedSession(id: string): FinishedSession | undefined;
56
+ /**
57
+ * Kill a session by ID
58
+ */
59
+ killSessionById(id: string): boolean;
60
+ /**
61
+ * Get command history for a conversation
62
+ */
63
+ getCommandHistory(conversationId: string, limit?: number): CommandHistoryEntry[];
64
+ /**
65
+ * Clear command history for a conversation
66
+ */
67
+ clearCommandHistory(conversationId: string): void;
68
+ /**
69
+ * Get current working directory
70
+ */
71
+ getCurrentDirectory(_conversationId?: string): string;
72
+ /**
73
+ * Set current working directory
74
+ */
75
+ setCurrentDirectory(directory: string): boolean;
76
+ /**
77
+ * Get allowed directory
78
+ */
79
+ getAllowedDirectory(): string;
80
+ /**
81
+ * Get shell configuration
82
+ */
83
+ getShellConfig(): ShellConfig;
84
+ private handleCdCommand;
85
+ private runCommandSimple;
86
+ private runExecProcess;
87
+ private addToHistory;
88
+ private detectFileOperations;
89
+ private resolvePath;
90
+ }
91
+ //# sourceMappingURL=shellService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellService.d.ts","sourceRoot":"","sources":["../../services/shellService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,aAAa,EAAU,OAAO,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,KAAK,EACX,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,cAAc,EAGd,eAAe,EACf,mBAAmB,EACnB,cAAc,EAGd,WAAW,EACX,MAAM,UAAU,CAAC;AA8DlB,qBAAa,YAAa,SAAQ,OAAO;IACxC,OAAc,WAAW,SAAW;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,yBAAyB,CAAO;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,OAAO,EAAE,aAAa;WAOrB,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ3D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,IAAI,qBAAqB,IAAI,MAAM,CAElC;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;IACG,cAAc,CACnB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,aAAa,CAAC;IAoHzB;;;OAGG;IACG,IAAI,CACT,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,cAAmB,GAC1B,OAAO,CAAC,UAAU,CAAC;IAoLtB;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC;QACzD,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,CAAC;IAqbF;;OAEG;IACH,mBAAmB,IAAI,cAAc,EAAE;IAOvC;;OAEG;IACH,oBAAoB,IAAI,eAAe,EAAE;IAOzC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAOlD;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAO3D;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQpC;;OAEG;IACH,iBAAiB,CAChB,cAAc,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,MAAM,GACZ,mBAAmB,EAAE;IAQxB;;OAEG;IACH,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAKjD;;OAEG;IACH,mBAAmB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrD;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAa/C;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,cAAc,IAAI,WAAW;YAMf,eAAe;YAyCf,gBAAgB;YA6FhB,cAAc;IAoV5B,OAAO,CAAC,YAAY;IAiCpB,OAAO,CAAC,oBAAoB;IAgD5B,OAAO,CAAC,WAAW;CAMnB"}
@@ -0,0 +1,144 @@
1
+ import type { ChildProcessWithoutNullStreams } from "node:child_process";
2
+ export interface CommandResult {
3
+ success: boolean;
4
+ stdout: string;
5
+ stderr: string;
6
+ exitCode: number | null;
7
+ error?: string;
8
+ executedIn: string;
9
+ }
10
+ export interface CommandHistoryEntry {
11
+ command: string;
12
+ stdout: string;
13
+ stderr: string;
14
+ exitCode: number | null;
15
+ timestamp: number;
16
+ workingDirectory: string;
17
+ fileOperations?: FileOperation[];
18
+ }
19
+ export type FileOperationType = "create" | "write" | "read" | "delete" | "mkdir" | "move" | "copy";
20
+ export interface FileOperation {
21
+ type: FileOperationType;
22
+ target: string;
23
+ secondaryTarget?: string;
24
+ }
25
+ export interface ShellConfig {
26
+ enabled: boolean;
27
+ allowedDirectory: string;
28
+ timeout: number;
29
+ forbiddenCommands: string[];
30
+ maxOutputChars: number;
31
+ pendingMaxOutputChars: number;
32
+ defaultBackgroundMs: number;
33
+ allowBackground: boolean;
34
+ }
35
+ export type ProcessStatus = "running" | "completed" | "failed" | "killed";
36
+ export type SessionStdin = {
37
+ write: (data: string, cb?: (err?: Error | null) => void) => void;
38
+ end: () => void;
39
+ destroyed?: boolean;
40
+ };
41
+ export interface ProcessSession {
42
+ id: string;
43
+ command: string;
44
+ scopeKey?: string;
45
+ sessionKey?: string;
46
+ notifyOnExit?: boolean;
47
+ exitNotified?: boolean;
48
+ child?: ChildProcessWithoutNullStreams;
49
+ stdin?: SessionStdin;
50
+ pid?: number;
51
+ startedAt: number;
52
+ cwd?: string;
53
+ maxOutputChars: number;
54
+ pendingMaxOutputChars?: number;
55
+ totalOutputChars: number;
56
+ pendingStdout: string[];
57
+ pendingStderr: string[];
58
+ pendingStdoutChars: number;
59
+ pendingStderrChars: number;
60
+ aggregated: string;
61
+ tail: string;
62
+ exitCode?: number | null;
63
+ exitSignal?: NodeJS.Signals | number | null;
64
+ exited: boolean;
65
+ truncated: boolean;
66
+ backgrounded: boolean;
67
+ }
68
+ export interface FinishedSession {
69
+ id: string;
70
+ command: string;
71
+ scopeKey?: string;
72
+ startedAt: number;
73
+ endedAt: number;
74
+ cwd?: string;
75
+ status: ProcessStatus;
76
+ exitCode?: number | null;
77
+ exitSignal?: NodeJS.Signals | number | null;
78
+ aggregated: string;
79
+ tail: string;
80
+ truncated: boolean;
81
+ totalOutputChars: number;
82
+ }
83
+ export interface ExecuteOptions {
84
+ workdir?: string;
85
+ env?: Record<string, string>;
86
+ yieldMs?: number;
87
+ background?: boolean;
88
+ timeout?: number;
89
+ pty?: boolean;
90
+ conversationId?: string;
91
+ scopeKey?: string;
92
+ sessionKey?: string;
93
+ notifyOnExit?: boolean;
94
+ onUpdate?: (session: ProcessSession) => void;
95
+ }
96
+ export type ExecResult = {
97
+ status: "running";
98
+ sessionId: string;
99
+ pid?: number;
100
+ startedAt: number;
101
+ cwd?: string;
102
+ tail?: string;
103
+ } | {
104
+ status: "completed" | "failed";
105
+ exitCode: number | null;
106
+ durationMs: number;
107
+ aggregated: string;
108
+ cwd?: string;
109
+ timedOut?: boolean;
110
+ reason?: string;
111
+ };
112
+ export type ProcessAction = "list" | "poll" | "log" | "write" | "send-keys" | "submit" | "paste" | "kill" | "clear" | "remove";
113
+ export interface ProcessActionParams {
114
+ action: ProcessAction;
115
+ sessionId?: string;
116
+ data?: string;
117
+ keys?: string[];
118
+ hex?: string[];
119
+ literal?: string;
120
+ text?: string;
121
+ bracketed?: boolean;
122
+ eof?: boolean;
123
+ offset?: number;
124
+ limit?: number;
125
+ }
126
+ export type PtyExitEvent = {
127
+ exitCode: number;
128
+ signal?: number;
129
+ };
130
+ export type PtyListener<T> = (event: T) => void;
131
+ export type PtyHandle = {
132
+ pid: number;
133
+ write: (data: string | Buffer) => void;
134
+ onData: (listener: PtyListener<string>) => void;
135
+ onExit: (listener: PtyListener<PtyExitEvent>) => void;
136
+ };
137
+ export type PtySpawn = (file: string, args: string[] | string, options: {
138
+ name?: string;
139
+ cols?: number;
140
+ rows?: number;
141
+ cwd?: string;
142
+ env?: Record<string, string>;
143
+ }) => PtyHandle;
144
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ShellConfig } from "../types";
2
+ export declare const DEFAULT_FORBIDDEN_COMMANDS: readonly string[];
3
+ export declare function loadShellConfig(): ShellConfig;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../utils/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAa5C,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EA0B9C,CAAC;AAEX,wBAAgB,eAAe,IAAI,WAAW,CAqE7C"}
@@ -0,0 +1,7 @@
1
+ export { DEFAULT_FORBIDDEN_COMMANDS, loadShellConfig } from "./config";
2
+ export { extractBaseCommand, isForbiddenCommand, isSafeCommand, validatePath, } from "./pathUtils";
3
+ export { attachChildProcessBridge, type ChildProcessBridgeOptions, CommandLane, type CommandLane as CommandLaneType, type CommandOptions, clearCommandLane, enqueueCommand, enqueueCommandInLane, getQueueSize, getTotalQueueSize, runCommandWithTimeout, runExec, type SpawnResult, setCommandLaneConcurrency, } from "./processQueue";
4
+ export { BRACKETED_PASTE_END, BRACKETED_PASTE_START, buildCursorPositionResponse, encodeKeySequence, encodePaste, type KeyEncodingRequest, type KeyEncodingResult, stripDsrRequests, } from "./ptyKeys";
5
+ export { splitShellArgs } from "./shellArgv";
6
+ export { chunkString, clampNumber, coerceEnv, deriveSessionName, formatDuration, getShellConfig, killProcessTree, killSession, pad, readEnvInt, resolveWorkdir, sanitizeBinaryOutput, sliceLogLines, sliceUtf16Safe, truncateMiddle, } from "./shellUtils";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EACN,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,YAAY,GACZ,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,WAAW,EACX,KAAK,WAAW,IAAI,eAAe,EACnC,KAAK,cAAc,EACnB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,OAAO,EACP,KAAK,WAAW,EAChB,yBAAyB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,iBAAiB,EACjB,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,gBAAgB,GAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACN,WAAW,EACX,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,eAAe,EACf,WAAW,EACX,GAAG,EACH,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,cAAc,GACd,MAAM,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function validatePath(commandPath: string, allowedDir: string, currentDir: string): string | null;
2
+ export declare function isSafeCommand(command: string): boolean;
3
+ export declare function extractBaseCommand(fullCommand: string): string;
4
+ export declare function isForbiddenCommand(command: string, forbiddenCommands: string[]): boolean;
5
+ //# sourceMappingURL=pathUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathUtils.d.ts","sourceRoot":"","sources":["../../utils/pathUtils.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAC3B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAaf;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiCtD;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EAAE,GACzB,OAAO,CAmBT"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Process execution utilities with command queuing.
3
+ *
4
+ * Provides cross-platform child process execution with:
5
+ * - Windows command resolution (.cmd extension handling)
6
+ * - Timeout support
7
+ * - Lane-based command queuing for serialization
8
+ * - Signal forwarding between parent and child processes
9
+ *
10
+ * @module utils/processQueue
11
+ */
12
+ import { type ChildProcess } from "node:child_process";
13
+ /**
14
+ * Command execution lanes for organizing concurrent command execution.
15
+ * Lanes allow serialization within a lane while permitting parallelism across lanes.
16
+ */
17
+ export declare const CommandLane: {
18
+ readonly Main: "main";
19
+ readonly Cron: "cron";
20
+ readonly Subagent: "subagent";
21
+ readonly Nested: "nested";
22
+ };
23
+ export type CommandLane = (typeof CommandLane)[keyof typeof CommandLane];
24
+ /**
25
+ * Simple promise-wrapped execFile with timeout support.
26
+ *
27
+ * @param command - The command to execute
28
+ * @param args - Command arguments
29
+ * @param opts - Timeout in ms or options object
30
+ * @returns Promise resolving to stdout and stderr
31
+ */
32
+ export declare function runExec(command: string, args: string[], opts?: number | {
33
+ timeoutMs?: number;
34
+ maxBuffer?: number;
35
+ }): Promise<{
36
+ stdout: string;
37
+ stderr: string;
38
+ }>;
39
+ /**
40
+ * Result from a spawned command execution.
41
+ */
42
+ export type SpawnResult = {
43
+ stdout: string;
44
+ stderr: string;
45
+ code: number | null;
46
+ signal: NodeJS.Signals | null;
47
+ killed: boolean;
48
+ };
49
+ /**
50
+ * Options for running a command with timeout.
51
+ */
52
+ export type CommandOptions = {
53
+ timeoutMs: number;
54
+ cwd?: string;
55
+ input?: string;
56
+ env?: NodeJS.ProcessEnv;
57
+ windowsVerbatimArguments?: boolean;
58
+ };
59
+ /**
60
+ * Run a command with timeout, input, and environment control.
61
+ *
62
+ * @param argv - Command and arguments as array
63
+ * @param optionsOrTimeout - Options object or timeout in ms
64
+ * @returns Promise resolving to spawn result
65
+ */
66
+ export declare function runCommandWithTimeout(argv: string[], optionsOrTimeout: number | CommandOptions): Promise<SpawnResult>;
67
+ /**
68
+ * Set the maximum concurrency for a command lane.
69
+ *
70
+ * @param lane - The lane name
71
+ * @param maxConcurrent - Maximum concurrent tasks
72
+ */
73
+ export declare function setCommandLaneConcurrency(lane: string, maxConcurrent: number): void;
74
+ /**
75
+ * Enqueue a task to execute in a specific lane.
76
+ *
77
+ * @param lane - The lane name
78
+ * @param task - Async task function
79
+ * @param opts - Options including warning threshold and callbacks
80
+ * @returns Promise resolving when task completes
81
+ */
82
+ export declare function enqueueCommandInLane<T>(lane: string, task: () => Promise<T>, opts?: {
83
+ warnAfterMs?: number;
84
+ onWait?: (waitMs: number, queuedAhead: number) => void;
85
+ }): Promise<T>;
86
+ /**
87
+ * Enqueue a task to execute in the main lane.
88
+ *
89
+ * @param task - Async task function
90
+ * @param opts - Options including warning threshold and callbacks
91
+ * @returns Promise resolving when task completes
92
+ */
93
+ export declare function enqueueCommand<T>(task: () => Promise<T>, opts?: {
94
+ warnAfterMs?: number;
95
+ onWait?: (waitMs: number, queuedAhead: number) => void;
96
+ }): Promise<T>;
97
+ /**
98
+ * Get the current queue size for a lane (queued + active).
99
+ *
100
+ * @param lane - The lane name (defaults to main)
101
+ * @returns Queue size
102
+ */
103
+ export declare function getQueueSize(lane?: string): number;
104
+ /**
105
+ * Get total queue size across all lanes.
106
+ *
107
+ * @returns Total queue size
108
+ */
109
+ export declare function getTotalQueueSize(): number;
110
+ /**
111
+ * Clear all pending tasks in a lane.
112
+ *
113
+ * @param lane - The lane name (defaults to main)
114
+ * @returns Number of tasks cleared
115
+ */
116
+ export declare function clearCommandLane(lane?: string): number;
117
+ /**
118
+ * Options for attaching a child process signal bridge.
119
+ */
120
+ export type ChildProcessBridgeOptions = {
121
+ signals?: NodeJS.Signals[];
122
+ onSignal?: (signal: NodeJS.Signals) => void;
123
+ };
124
+ /**
125
+ * Attach signal forwarding from parent to child process.
126
+ * Signals sent to the parent will be forwarded to the child.
127
+ * Automatically detaches when child exits.
128
+ *
129
+ * @param child - The child process
130
+ * @param options - Bridge options
131
+ * @returns Object with detach function
132
+ */
133
+ export declare function attachChildProcessBridge(child: ChildProcess, { signals, onSignal }?: ChildProcessBridgeOptions): {
134
+ detach: () => void;
135
+ };
136
+ //# sourceMappingURL=processQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processQueue.d.ts","sourceRoot":"","sources":["../../utils/processQueue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * PTY Key Encoding - Terminal key sequence encoding utilities
3
+ * Ported from otto pty-keys.ts and pty-dsr.ts
4
+ */
5
+ export declare const BRACKETED_PASTE_START = "\u001B[200~";
6
+ export declare const BRACKETED_PASTE_END = "\u001B[201~";
7
+ export type KeyEncodingRequest = {
8
+ keys?: string[];
9
+ hex?: string[];
10
+ literal?: string;
11
+ };
12
+ export type KeyEncodingResult = {
13
+ data: string;
14
+ warnings: string[];
15
+ };
16
+ export declare function encodeKeySequence(request: KeyEncodingRequest): KeyEncodingResult;
17
+ export declare function encodePaste(text: string, bracketed?: boolean): string;
18
+ export declare function stripDsrRequests(input: string): {
19
+ cleaned: string;
20
+ requests: number;
21
+ };
22
+ export declare function buildCursorPositionResponse(row?: number, col?: number): string;
23
+ //# sourceMappingURL=ptyKeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ptyKeys.d.ts","sourceRoot":"","sources":["../../utils/ptyKeys.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,eAAO,MAAM,qBAAqB,gBAAgB,CAAC;AACnD,eAAO,MAAM,mBAAmB,gBAAgB,CAAC;AAyFjD,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,kBAAkB,GACzB,iBAAiB,CA0BnB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,MAAM,CAKlE;AAkKD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAOA;AAED,wBAAgB,2BAA2B,CAAC,GAAG,SAAI,EAAE,GAAG,SAAI,GAAG,MAAM,CAEpE"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shell argument parsing utilities.
3
+ *
4
+ * Provides functions to split shell command strings into argument arrays,
5
+ * handling quotes and escape sequences.
6
+ *
7
+ * @module utils/shellArgv
8
+ */
9
+ /**
10
+ * Split a shell command string into an array of arguments.
11
+ *
12
+ * Handles:
13
+ * - Single quotes (literal strings)
14
+ * - Double quotes (literal strings)
15
+ * - Backslash escapes (outside quotes)
16
+ * - Whitespace as argument separator
17
+ *
18
+ * @param raw - The raw command string
19
+ * @returns Array of arguments, or null if string has unclosed quotes/escapes
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * splitShellArgs('git commit -m "fix bug"')
24
+ * // => ['git', 'commit', '-m', 'fix bug']
25
+ *
26
+ * splitShellArgs("echo 'hello world'")
27
+ * // => ['echo', 'hello world']
28
+ *
29
+ * splitShellArgs('path\\ with\\ spaces')
30
+ * // => ['path with spaces']
31
+ *
32
+ * splitShellArgs('"unclosed')
33
+ * // => null (unclosed quote)
34
+ * ```
35
+ */
36
+ export declare function splitShellArgs(raw: string): string[] | null;
37
+ //# sourceMappingURL=shellArgv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellArgv.d.ts","sourceRoot":"","sources":["../../utils/shellArgv.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CA6D3D"}