426e9eeabd
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Waiting to run
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Waiting to run
Build Agent Image / build-and-push (push) Waiting to run
Chat shell gestures / Chat shell gesture + parity e2e (push) Waiting to run
Cloud Gateway Discord / Test (push) Waiting to run
Cloud Gateway Webhook / Test (push) Waiting to run
Cloud Tests / lint-and-types (push) Waiting to run
Cloud Tests / unit-tests (push) Waiting to run
Cloud Tests / integration-tests (push) Waiting to run
Cloud Tests / e2e-tests (push) Blocked by required conditions
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Apps Worker (Product 2) / Determine environment (push) Waiting to run
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Blocked by required conditions
Deploy Eliza Provisioning Worker / Determine environment (push) Waiting to run
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Blocked by required conditions
Dev Smoke / Classify changed paths (push) Waiting to run
Dev Smoke / bun run dev onboarding chat (push) Blocked by required conditions
Dev Smoke / Vite HMR dependency-level smoke (push) Blocked by required conditions
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Waiting to run
Publish @elizaos/example-code / check_npm (push) Waiting to run
Publish @elizaos/example-code / publish_npm (push) Blocked by required conditions
Publish @elizaos/plugin-elizacloud / verify_version (push) Waiting to run
Publish @elizaos/plugin-elizacloud / publish_npm (push) Blocked by required conditions
Sandbox Live Smoke / Sandbox live smoke (push) Waiting to run
Snap Build & Test / Build Snap (amd64) (push) Waiting to run
Snap Build & Test / Build Snap (arm64) (push) Waiting to run
supply-chain / sbom (push) Waiting to run
supply-chain / vulnerability-scan (push) Waiting to run
Build, Push & Deploy to Phala Cloud / build-and-push (push) Waiting to run
Test Packaging / Validate Packaging Configs (push) Waiting to run
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Waiting to run
Test Packaging / Pack & Test JS Tarballs (push) Waiting to run
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Waiting to run
UI Fixture E2E / ui-fixture-e2e (push) Waiting to run
UI Fixture E2E / fixture-e2e (push) Waiting to run
UI Story Gate / story-gate (push) Waiting to run
vault-ci / test (macos-latest) (push) Waiting to run
vault-ci / test (ubuntu-latest) (push) Waiting to run
vault-ci / test (windows-latest) (push) Waiting to run
vault-ci / app-core wiring tests (push) Waiting to run
verify-patches / verify patches/CHECKSUMS.sha256 (push) Waiting to run
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Waiting to run
Voice Benchmark Smoke / voice bench smoke summary (push) Blocked by required conditions
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Waiting to run
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Waiting to run
Test Packaging / Build & Test PyPI Package (push) Waiting to run
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
196 lines
5.0 KiB
TypeScript
196 lines
5.0 KiB
TypeScript
/**
|
|
* Plugin object export for @elizaos/plugin-shell: registers ShellService and
|
|
* ExecApprovalService plus the SHELL_HISTORY provider, and gates auto-enable by
|
|
* platform (never on iOS or store builds; Android only under local-yolo mode).
|
|
* Registers no actions — the agent-facing SHELL action lives in
|
|
* @elizaos/plugin-coding-tools and consumes ShellService.
|
|
*/
|
|
import type { Plugin } from "@elizaos/core";
|
|
import { ExecApprovalService } from "./approvals";
|
|
import { shellHistoryProvider } from "./providers";
|
|
import { ShellService } from "./services/shellService";
|
|
|
|
function terminalSupportedByEnv(env: Record<string, string | undefined>): boolean {
|
|
const variant = (env.ELIZA_BUILD_VARIANT ?? "").trim().toLowerCase();
|
|
if (variant === "store") return false;
|
|
const platform = env.ELIZA_PLATFORM?.trim().toLowerCase();
|
|
const mobile =
|
|
platform === "android" || platform === "ios" || Boolean(env.ANDROID_ROOT || env.ANDROID_DATA);
|
|
if (!mobile) return true;
|
|
const mode = (env.ELIZA_RUNTIME_MODE ?? env.RUNTIME_MODE ?? env.LOCAL_RUNTIME_MODE ?? "")
|
|
.trim()
|
|
.toLowerCase();
|
|
return platform === "android" && mode === "local-yolo";
|
|
}
|
|
|
|
export const shellPlugin: Plugin = {
|
|
name: "shell",
|
|
description: "Shell observability and history management providers",
|
|
services: [ShellService, ExecApprovalService],
|
|
actions: [],
|
|
providers: [shellHistoryProvider],
|
|
async dispose(runtime) {
|
|
await runtime.getService<ShellService>(ShellService.serviceType)?.stop();
|
|
await runtime.getService<ExecApprovalService>(ExecApprovalService.serviceType)?.stop();
|
|
},
|
|
// Self-declared auto-enable: activate when features.shell is enabled.
|
|
autoEnable: {
|
|
shouldEnable: (env, config) => {
|
|
const f = (config.features as Record<string, unknown> | undefined)?.shell;
|
|
return (
|
|
(f === true ||
|
|
(typeof f === "object" &&
|
|
f !== null &&
|
|
(f as { enabled?: unknown }).enabled !== false)) &&
|
|
terminalSupportedByEnv(env as Record<string, string | undefined>)
|
|
);
|
|
},
|
|
},
|
|
};
|
|
|
|
export default shellPlugin;
|
|
|
|
// Approvals
|
|
export {
|
|
addAllowlistEntry,
|
|
analyzeShellCommand,
|
|
type CommandCheckResult,
|
|
type CommandResolution,
|
|
DEFAULT_SAFE_BINS,
|
|
EXEC_APPROVAL_DEFAULTS,
|
|
type ExecAllowlistAnalysis,
|
|
type ExecAllowlistEntry,
|
|
type ExecAllowlistEvaluation,
|
|
type ExecApprovalDecision,
|
|
type ExecApprovalRequest,
|
|
type ExecApprovalResult,
|
|
ExecApprovalService,
|
|
type ExecApprovalsAgent,
|
|
type ExecApprovalsDefaults,
|
|
type ExecApprovalsFile,
|
|
type ExecApprovalsResolved,
|
|
type ExecApprovalsSnapshot,
|
|
type ExecAsk,
|
|
type ExecCommandAnalysis,
|
|
type ExecCommandSegment,
|
|
type ExecHost,
|
|
type ExecSecurity,
|
|
ensureApprovals,
|
|
evaluateExecAllowlist,
|
|
evaluateShellAllowlist,
|
|
getApprovalFilePath,
|
|
getApprovalSocketPath,
|
|
isSafeBinUsage,
|
|
loadApprovals,
|
|
matchAllowlist,
|
|
maxAsk,
|
|
minSecurity,
|
|
normalizeApprovals,
|
|
normalizeSafeBins,
|
|
readApprovalsSnapshot,
|
|
recordAllowlistUse,
|
|
requiresExecApproval,
|
|
resolveApprovals,
|
|
resolveApprovalsFromFile,
|
|
resolveCommandFromArgv,
|
|
resolveCommandResolution,
|
|
resolveSafeBins,
|
|
saveApprovals,
|
|
} from "./approvals";
|
|
export { shellHistoryProvider } from "./providers/shellHistoryProvider";
|
|
export {
|
|
addSession,
|
|
appendOutput,
|
|
clearFinished,
|
|
createSessionSlug,
|
|
deleteSession,
|
|
drainSession,
|
|
getFinishedSession,
|
|
getSession,
|
|
listFinishedSessions,
|
|
listRunningSessions,
|
|
markBackgrounded,
|
|
markExited,
|
|
resetProcessRegistryForTests,
|
|
setJobTtlMs,
|
|
tail,
|
|
trimWithCap,
|
|
} from "./services/processRegistry";
|
|
// Services
|
|
export { ShellService } from "./services/shellService";
|
|
|
|
// Types
|
|
export type {
|
|
CommandHistoryEntry,
|
|
CommandResult,
|
|
ExecResult,
|
|
ExecuteOptions,
|
|
FileOperation,
|
|
FileOperationType,
|
|
FinishedSession,
|
|
ProcessAction,
|
|
ProcessActionParams,
|
|
ProcessSession,
|
|
ProcessStatus,
|
|
PtyExitEvent,
|
|
PtyHandle,
|
|
PtyListener,
|
|
PtySpawn,
|
|
SessionStdin,
|
|
ShellConfig,
|
|
} from "./types";
|
|
|
|
// Utilities
|
|
export {
|
|
DEFAULT_FORBIDDEN_COMMANDS,
|
|
extractBaseCommand,
|
|
isForbiddenCommand,
|
|
isSafeCommand,
|
|
loadShellConfig,
|
|
validatePath,
|
|
} from "./utils";
|
|
export {
|
|
BRACKETED_PASTE_END,
|
|
BRACKETED_PASTE_START,
|
|
buildCursorPositionResponse,
|
|
encodeKeySequence,
|
|
encodePaste,
|
|
type KeyEncodingRequest,
|
|
type KeyEncodingResult,
|
|
stripDsrRequests,
|
|
} from "./utils/ptyKeys";
|
|
export {
|
|
chunkString,
|
|
clampNumber,
|
|
coerceEnv,
|
|
deriveSessionName,
|
|
formatDuration,
|
|
formatSpawnError,
|
|
getShellConfig,
|
|
killProcessTree,
|
|
killSession,
|
|
pad,
|
|
readEnvInt,
|
|
resolveWorkdir,
|
|
type SpawnFallback,
|
|
type SpawnWithFallbackResult,
|
|
sanitizeBinaryOutput,
|
|
sliceLogLines,
|
|
sliceUtf16Safe,
|
|
spawnWithFallback,
|
|
truncateMiddle,
|
|
} from "./utils/shellUtils";
|
|
export {
|
|
detectTerminalCapabilities,
|
|
formatTerminalCapabilities,
|
|
isAndroidRuntime,
|
|
missingTerminalToolForCommand,
|
|
missingToolMessage,
|
|
resolveExecutable,
|
|
resolveTerminalShell,
|
|
type ShellResolution,
|
|
TERMINAL_TOOL_NAMES,
|
|
type TerminalToolName,
|
|
type ToolCapability,
|
|
} from "./utils/terminalCapabilities";
|