@slopus/happy-terminal 0.3.0-beta.13
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/LICENSE +21 -0
- package/LICENSE-CODEX +203 -0
- package/LICENSE-GROK-BUILD +204 -0
- package/LICENSE-HAPPY +21 -0
- package/README.md +60 -0
- package/THIRD-PARTY-NOTICES.md +34 -0
- package/dist/HappyTerminalUserError.d.ts +12 -0
- package/dist/app/AppTranscriptEntry.d.ts +33 -0
- package/dist/app/AppendOnlyStreamingRender.d.ts +12 -0
- package/dist/app/CodexFileDiff.d.ts +20 -0
- package/dist/app/CodexMcpToolCall.d.ts +25 -0
- package/dist/app/CodingAssistantAgentBackend.d.ts +81 -0
- package/dist/app/CodingAssistantApp.d.ts +128 -0
- package/dist/app/CompletedTurn.d.ts +11 -0
- package/dist/app/FileMentionAutocomplete.d.ts +30 -0
- package/dist/app/HappyTerminalProcessTerminal.d.ts +7 -0
- package/dist/app/NoticeChild.d.ts +4 -0
- package/dist/app/SecretMenuController.d.ts +31 -0
- package/dist/app/SelectionList.d.ts +24 -0
- package/dist/app/SessionDraftSync.d.ts +51 -0
- package/dist/app/StartupStatusApp.d.ts +34 -0
- package/dist/app/StartupStatusCardModel.d.ts +22 -0
- package/dist/app/TemporaryFullscreenController.d.ts +9 -0
- package/dist/app/TerminalColorLevel.d.ts +1 -0
- package/dist/app/TerminalOutputTrace.d.ts +12 -0
- package/dist/app/TerminalTheme.d.ts +11 -0
- package/dist/app/TranscriptEntryRenderCache.d.ts +10 -0
- package/dist/app/applyWorkflowRunUpdate.d.ts +2 -0
- package/dist/app/blendComposerBackground.d.ts +2 -0
- package/dist/app/boundedJsonStringify.d.ts +1 -0
- package/dist/app/calculateCacheHitPercent.d.ts +2 -0
- package/dist/app/codexDiffAnsi.d.ts +17 -0
- package/dist/app/compactCompletedTurnEntries.d.ts +2 -0
- package/dist/app/containsMarkdownTable.d.ts +1 -0
- package/dist/app/createAgentMarkdownTheme.d.ts +3 -0
- package/dist/app/createBackgroundTerminalViewer.d.ts +16 -0
- package/dist/app/createCompletedTurn.d.ts +6 -0
- package/dist/app/createEditorTheme.d.ts +3 -0
- package/dist/app/createFileMentionAutocompleteItems.d.ts +3 -0
- package/dist/app/createSecretInputPanel.d.ts +12 -0
- package/dist/app/createSelectionPanel.d.ts +14 -0
- package/dist/app/createSerialTaskQueue.d.ts +1 -0
- package/dist/app/createSessionPicker.d.ts +17 -0
- package/dist/app/createSlashCommands.d.ts +7 -0
- package/dist/app/createStopOnceHandler.d.ts +1 -0
- package/dist/app/createSubagentMonitor.d.ts +17 -0
- package/dist/app/createTerminalInputBurstHandler.d.ts +5 -0
- package/dist/app/createWorkflowMonitor.d.ts +15 -0
- package/dist/app/defaultTerminalTheme.d.ts +1 -0
- package/dist/app/describeModelChoice.d.ts +4 -0
- package/dist/app/describeProviderSignIn.d.ts +2 -0
- package/dist/app/describeReasoningLevel.d.ts +4 -0
- package/dist/app/detectCodexDiffLanguage.d.ts +1 -0
- package/dist/app/encodeModelChoice.d.ts +1 -0
- package/dist/app/endsAfterOpeningCodeFence.d.ts +1 -0
- package/dist/app/findFileMentionContext.d.ts +9 -0
- package/dist/app/findFileMentionPrefix.d.ts +5 -0
- package/dist/app/formatActivityElapsedTime.d.ts +1 -0
- package/dist/app/formatCodexMcpToolResult.d.ts +3 -0
- package/dist/app/formatCompactTokens.d.ts +1 -0
- package/dist/app/formatFileMention.d.ts +1 -0
- package/dist/app/formatProviderError.d.ts +6 -0
- package/dist/app/formatRelativeTime.d.ts +2 -0
- package/dist/app/formatResetDuration.d.ts +1 -0
- package/dist/app/formatSessionPickerEntry.d.ts +14 -0
- package/dist/app/formatSessionTokenStatus.d.ts +6 -0
- package/dist/app/formatSessionUsageSummary.d.ts +3 -0
- package/dist/app/formatStartupStatusUsageRemaining.d.ts +2 -0
- package/dist/app/formatStartupStatusUsageRows.d.ts +2 -0
- package/dist/app/formatSubagentToolCall.d.ts +10 -0
- package/dist/app/formatToolPermissionNotice.d.ts +3 -0
- package/dist/app/formatToolResultForDisplay.d.ts +2 -0
- package/dist/app/formatTurnUsageSummary.d.ts +2 -0
- package/dist/app/formatWorkUsageSummary.d.ts +14 -0
- package/dist/app/highlightAgentCode.d.ts +1 -0
- package/dist/app/highlightCodexDiffLine.d.ts +2 -0
- package/dist/app/highlightShellCommand.d.ts +1 -0
- package/dist/app/humanizeGoalStatus.d.ts +2 -0
- package/dist/app/humanizeMcpName.d.ts +1 -0
- package/dist/app/humanizePermissionMode.d.ts +2 -0
- package/dist/app/humanizePermissionReviewLevel.d.ts +2 -0
- package/dist/app/humanizeProviderId.d.ts +1 -0
- package/dist/app/humanizeReasoningLevel.d.ts +1 -0
- package/dist/app/humanizeSubagentStatus.d.ts +2 -0
- package/dist/app/humanizeToolName.d.ts +1 -0
- package/dist/app/humanizeWorkflowStatus.d.ts +2 -0
- package/dist/app/installResumeInstructions.d.ts +26 -0
- package/dist/app/installTerminalCrashCleanup.d.ts +26 -0
- package/dist/app/isLightTerminalBackground.d.ts +2 -0
- package/dist/app/layoutCodexFileDiff.d.ts +13 -0
- package/dist/app/looksLikeAuthenticationFailure.d.ts +5 -0
- package/dist/app/nearestXtermColorIndex.d.ts +2 -0
- package/dist/app/parseCodexMcpToolInvocation.d.ts +2 -0
- package/dist/app/parseSessionCommand.d.ts +6 -0
- package/dist/app/providerErrorResetAt.d.ts +2 -0
- package/dist/app/providerQuotaToStartupStatusUsage.d.ts +3 -0
- package/dist/app/readClipboardImage.d.ts +9 -0
- package/dist/app/renderActivityWave.d.ts +3 -0
- package/dist/app/renderAgentMarkdown.d.ts +8 -0
- package/dist/app/renderBackgroundTerminalCompletion.d.ts +1 -0
- package/dist/app/renderBackgroundTerminalInteraction.d.ts +2 -0
- package/dist/app/renderBackgroundTerminalSummary.d.ts +1 -0
- package/dist/app/renderChildRows.d.ts +13 -0
- package/dist/app/renderCodexDiffLine.d.ts +3 -0
- package/dist/app/renderCodexFileDiff.d.ts +7 -0
- package/dist/app/renderCodexMcpToolCall.d.ts +2 -0
- package/dist/app/renderCompletedTurnStats.d.ts +2 -0
- package/dist/app/renderExecCommand.d.ts +11 -0
- package/dist/app/renderExploration.d.ts +9 -0
- package/dist/app/renderFullscreenComponent.d.ts +8 -0
- package/dist/app/renderHappyTerminalBanner.d.ts +6 -0
- package/dist/app/renderHappyTerminalVersion.d.ts +1 -0
- package/dist/app/renderNoticeWithChildren.d.ts +7 -0
- package/dist/app/renderPendingSteeringMessages.d.ts +1 -0
- package/dist/app/renderStartupStatusCard.d.ts +7 -0
- package/dist/app/renderSubagentSummary.d.ts +6 -0
- package/dist/app/renderTurnCompletionSeparator.d.ts +1 -0
- package/dist/app/renderWorkflowSummary.d.ts +1 -0
- package/dist/app/resolveInputBackground.d.ts +3 -0
- package/dist/app/resolveStartupProviderQuota.d.ts +3 -0
- package/dist/app/resolveStartupSessionId.d.ts +18 -0
- package/dist/app/resolveTerminalColorLevel.d.ts +2 -0
- package/dist/app/resolveTerminalStyle.d.ts +1 -0
- package/dist/app/resolveTerminalTheme.d.ts +5 -0
- package/dist/app/runApp.d.ts +27 -0
- package/dist/app/runClipboardCommand.d.ts +8 -0
- package/dist/app/sanitizeTerminalText.d.ts +1 -0
- package/dist/app/shortenHomePath.d.ts +2 -0
- package/dist/app/sortSubagentsForDisplay.d.ts +2 -0
- package/dist/app/subagentElapsedMs.d.ts +2 -0
- package/dist/app/subagentLogMessageText.d.ts +2 -0
- package/dist/app/surfaceThemedLine.d.ts +3 -0
- package/dist/app/truncatePathToWidth.d.ts +1 -0
- package/dist/app/truncateTextForDisplay.d.ts +5 -0
- package/dist/app/truncateUtf8BytesForDisplay.d.ts +1 -0
- package/dist/app/upsertSubagentSummary.d.ts +2 -0
- package/dist/app/workflowDisplay.d.ts +2 -0
- package/dist/client/HappyAgentEventHub.d.ts +25 -0
- package/dist/client/RemoteAgent.d.ts +74 -0
- package/dist/client/RemoteAgentRunError.d.ts +4 -0
- package/dist/client/RemoteTerminalAttachment.d.ts +19 -0
- package/dist/client/RemoteTerminalClientReplica.d.ts +14 -0
- package/dist/client/ensureLocalProtocolServer.d.ts +10 -0
- package/dist/client/fetchProviderQuotas.d.ts +10 -0
- package/dist/client/index.d.ts +8 -0
- package/dist/client/loadAgentCatalog.d.ts +32 -0
- package/dist/config/createProjectConfigSecurityNotice.d.ts +10 -0
- package/dist/config/defaultConfig.d.ts +2 -0
- package/dist/config/getDefaultGlobalConfigPath.d.ts +1 -0
- package/dist/config/getDefaultLocalConfigPath.d.ts +1 -0
- package/dist/config/getDefaultRuntimeConfigPath.d.ts +1 -0
- package/dist/config/getHappyConfigDirectory.d.ts +1 -0
- package/dist/config/getHappyTerminalHome.d.ts +1 -0
- package/dist/config/index.d.ts +15 -0
- package/dist/config/loadConfig.d.ts +2 -0
- package/dist/config/mergeConfigValues.d.ts +2 -0
- package/dist/config/parseConfigToml.d.ts +7 -0
- package/dist/config/readConfigFile.d.ts +2 -0
- package/dist/config/readProjectConfigFile.d.ts +2 -0
- package/dist/config/resolveConfigPaths.d.ts +2 -0
- package/dist/config/runtimeConfigLock.d.ts +1 -0
- package/dist/config/types.d.ts +74 -0
- package/dist/config/updateRuntimeConfig.d.ts +2 -0
- package/dist/config/updateRuntimePreferences.d.ts +2 -0
- package/dist/config/withoutProjectMachineSettings.d.ts +7 -0
- package/dist/config/writeRuntimeConfig.d.ts +3 -0
- package/dist/config/writeRuntimeConfigDefaults.d.ts +2 -0
- package/dist/daemon/createUnixSocketFetch.d.ts +2 -0
- package/dist/daemon/daemonPid.d.ts +11 -0
- package/dist/daemon/ensureHappyAgentBinary.d.ts +15 -0
- package/dist/daemon/ensureLocalProtocolServer.d.ts +24 -0
- package/dist/daemon/getHappyDaemonPaths.d.ts +16 -0
- package/dist/daemon/happyAgentBinaryConfig.d.ts +15 -0
- package/dist/daemon/index.d.ts +5 -0
- package/dist/daemon/runDaemonCommand.d.ts +4 -0
- package/dist/debug/DebugLog.d.ts +11 -0
- package/dist/debug/closeNodeInspector.d.ts +1 -0
- package/dist/debug/createDebugJsonReplacer.d.ts +1 -0
- package/dist/debug/createRequestDebugDirectory.d.ts +1 -0
- package/dist/debug/getDebugRootDirectory.d.ts +1 -0
- package/dist/debug/getNodeInspectorUrl.d.ts +1 -0
- package/dist/debug/index.d.ts +8 -0
- package/dist/debug/openNodeInspector.d.ts +1 -0
- package/dist/debug/registerHappyTerminalDebugRoot.d.ts +5 -0
- package/dist/docs/DESIGN.md +2191 -0
- package/dist/docs/README.md +93 -0
- package/dist/docs/agents-and-collaboration.md +365 -0
- package/dist/docs/architecture.md +468 -0
- package/dist/docs/extending.md +561 -0
- package/dist/docs/happy.md +386 -0
- package/dist/docs/permissions-and-sandbox.md +342 -0
- package/dist/docs/workspaces.md +281 -0
- package/dist/errorToMessage.d.ts +1 -0
- package/dist/formatCliFailure.d.ts +10 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +17151 -0
- package/dist/main.js +18946 -0
- package/dist/observability/daemonContext.d.ts +16 -0
- package/dist/observability/index.d.ts +1 -0
- package/dist/processes/BoundedOutputBuffer.d.ts +20 -0
- package/dist/processes/NativeProcessManager.d.ts +66 -0
- package/dist/processes/ProcessGroupReaper.d.ts +32 -0
- package/dist/processes/index.d.ts +7 -0
- package/dist/processes/isProcessRunning.d.ts +1 -0
- package/dist/processes/isTargetProcessAlive.d.ts +1 -0
- package/dist/processes/killProcessTree.d.ts +2 -0
- package/dist/processes/resolveSystemShell.d.ts +1 -0
- package/dist/processes/startProcessTransport.d.ts +33 -0
- package/dist/processes/types.d.ts +41 -0
- package/dist/processes/waitForProcessExit.d.ts +2 -0
- package/dist/protocol/AppletProtocol.d.ts +101 -0
- package/dist/protocol/Attachment.d.ts +96 -0
- package/dist/protocol/ClientProtocolTypes.d.ts +481 -0
- package/dist/protocol/DocumentProtocol.d.ts +109 -0
- package/dist/protocol/EventId.d.ts +1 -0
- package/dist/protocol/FolderProtocol.d.ts +236 -0
- package/dist/protocol/FolderSharingProtocol.d.ts +97 -0
- package/dist/protocol/GitHubPluginProtocol.d.ts +43 -0
- package/dist/protocol/GlobalSecurityProtocol.d.ts +7 -0
- package/dist/protocol/HappyCloudProtocol.d.ts +178 -0
- package/dist/protocol/InstallationProtocol.d.ts +80 -0
- package/dist/protocol/OnboardingProtocol.d.ts +47 -0
- package/dist/protocol/P2pCredentialProtocol.d.ts +273 -0
- package/dist/protocol/P2pIdentityProtocol.d.ts +8 -0
- package/dist/protocol/P2pPairingProtocol.d.ts +68 -0
- package/dist/protocol/P2pProtocol.d.ts +185 -0
- package/dist/protocol/PluginWireTypes.d.ts +81 -0
- package/dist/protocol/ProfileProtocol.d.ts +127 -0
- package/dist/protocol/ProjectFileProtocol.d.ts +63 -0
- package/dist/protocol/ProjectProtocol.d.ts +646 -0
- package/dist/protocol/ProtocolVersion.d.ts +8 -0
- package/dist/protocol/ServiceNotice.d.ts +175 -0
- package/dist/protocol/SessionProtocol.d.ts +1156 -0
- package/dist/protocol/SharingProtocol.d.ts +159 -0
- package/dist/protocol/SlotProtocol.d.ts +270 -0
- package/dist/protocol/TimelineProtocol.d.ts +88 -0
- package/dist/protocol/WorkletProtocol.d.ts +159 -0
- package/dist/protocol/createEventIdFactory.d.ts +7 -0
- package/dist/protocol/index.d.ts +34 -0
- package/dist/readPackageVersion.d.ts +1 -0
- package/dist/readPackageVersion.js +16 -0
- package/dist/reportCliFailure.d.ts +2 -0
- package/dist/runHappyTerminal.d.ts +6 -0
- package/dist/terminal/index.d.ts +2 -0
- package/dist/terminal/types.d.ts +39 -0
- package/dist/types.d.ts +6 -0
- package/dist/writeStderrSync.d.ts +5 -0
- package/package.json +97 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Context, type Logger } from "@steve.kite/stdlib";
|
|
2
|
+
import { type Attributes, type Tracer as OpenTelemetryTracer } from "@opentelemetry/api";
|
|
3
|
+
export type ContextWork<Result> = (ctx: Context) => Result | PromiseLike<Result>;
|
|
4
|
+
/** Adds OpenTelemetry attributes to the stdlib span currently carried by a context. */
|
|
5
|
+
export declare function setSpanAttributes(ctx: Context, attributes: Attributes): void;
|
|
6
|
+
/** Returns the OpenTelemetry trace ID for the span currently carried by a context. */
|
|
7
|
+
export declare function spanTraceId(ctx: Context): string | undefined;
|
|
8
|
+
export declare function withRequestContext<Result>(route: string, logContext: Readonly<Record<string, unknown>>, work: ContextWork<Result>): Promise<Awaited<Result>>;
|
|
9
|
+
/** Runs an intentionally untraced streaming request without creating a named lifetime context. */
|
|
10
|
+
export declare function withUntracedRequestContext<Result>(route: string, logContext: Readonly<Record<string, unknown>>, work: ContextWork<Result>): Promise<Awaited<Result>>;
|
|
11
|
+
export declare function withWorkerContext<Result>(worker: string, work: ContextWork<Result>, logContext?: Readonly<Record<string, unknown>>): Promise<Awaited<Result>>;
|
|
12
|
+
export declare function withConnectionContext<Result>(connection: string, work: ContextWork<Result>, logContext?: Readonly<Record<string, unknown>>): Promise<Awaited<Result>>;
|
|
13
|
+
export declare function withProcessContext<Result>(processName: string, work: ContextWork<Result>, logContext?: Readonly<Record<string, unknown>>): Promise<Awaited<Result>>;
|
|
14
|
+
export declare function withTerminalContext<Result>(terminal: string, work: ContextWork<Result>, logContext?: Readonly<Record<string, unknown>>): Promise<Awaited<Result>>;
|
|
15
|
+
/** Installs logging and tracing on the private application root. */
|
|
16
|
+
export declare function initializeDaemonContext(logger: Logger, tracer?: OpenTelemetryTracer): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { initializeDaemonContext, setSpanAttributes, spanTraceId, withConnectionContext, withProcessContext, withRequestContext, withTerminalContext, withUntracedRequestContext, withWorkerContext, type ContextWork, } from "./daemonContext.js";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retains a stable prefix and suffix while counting the bytes dropped from the
|
|
3
|
+
* middle. This is the same shape Codex uses for unified exec output.
|
|
4
|
+
*/
|
|
5
|
+
export declare class BoundedOutputBuffer {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(maxBytes: number);
|
|
8
|
+
get totalBytes(): number;
|
|
9
|
+
get omittedBytes(): number;
|
|
10
|
+
get retainedBytes(): number;
|
|
11
|
+
append(chunk: Buffer): void;
|
|
12
|
+
snapshot(omittedBytes?: number): Buffer;
|
|
13
|
+
snapshotFromOffset(offset: number): {
|
|
14
|
+
buffer: Buffer;
|
|
15
|
+
omittedBytes: number;
|
|
16
|
+
totalBytes: number;
|
|
17
|
+
};
|
|
18
|
+
drain(): BoundedOutputBuffer;
|
|
19
|
+
clone(): BoundedOutputBuffer;
|
|
20
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Context } from "@steve.kite/stdlib";
|
|
2
|
+
import type { ManagedProcessStatus, ProcessKillOptions, ProcessRunOptions, ProcessRunResult, ProcessSnapshot, ProcessStartOptions } from "./types.js";
|
|
3
|
+
export declare class NativeProcessManager {
|
|
4
|
+
#private;
|
|
5
|
+
start(ctx: Context, options: ProcessStartOptions): Promise<ManagedProcess>;
|
|
6
|
+
run(ctx: Context, options: ProcessRunOptions): Promise<ProcessRunResult>;
|
|
7
|
+
get(id: string): ManagedProcess | undefined;
|
|
8
|
+
snapshots(): ProcessSnapshot[];
|
|
9
|
+
activeCount(): number;
|
|
10
|
+
writeStdin(ctx: Context, id: string, data: string | Uint8Array): Promise<boolean>;
|
|
11
|
+
kill(ctx: Context, id: string, options?: ProcessKillOptions): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Stops running work.
|
|
14
|
+
*
|
|
15
|
+
* Detached work — a command the agent deliberately left running in the
|
|
16
|
+
* background — is spared unless the caller is shutting everything down, in
|
|
17
|
+
* which case whole process groups go too, including anything that outlived
|
|
18
|
+
* the shell that launched it.
|
|
19
|
+
*/
|
|
20
|
+
killAll(ctx: Context, options?: ProcessKillOptions): Promise<void>;
|
|
21
|
+
/** Process groups that a shutdown would still have to take down. */
|
|
22
|
+
pendingProcessGroups(): readonly number[];
|
|
23
|
+
/**
|
|
24
|
+
* How much running work a shutdown would still find.
|
|
25
|
+
*
|
|
26
|
+
* A live command and the group it leads are one thing, so the group of an
|
|
27
|
+
* active process is not counted twice. What this adds are the groups that
|
|
28
|
+
* outlived the command that started them: `nohup server &` leaves nothing
|
|
29
|
+
* running under our watch, but the server is very much still there.
|
|
30
|
+
*/
|
|
31
|
+
reapableCount(): number;
|
|
32
|
+
}
|
|
33
|
+
export interface ManagedProcessHooks {
|
|
34
|
+
/** The whole process group is known to be gone. */
|
|
35
|
+
onGroupTerminated: (processGroupId: number) => void;
|
|
36
|
+
/** No more output or exit information can arrive. */
|
|
37
|
+
onSettled: (id: string) => void;
|
|
38
|
+
}
|
|
39
|
+
export declare class ManagedProcess {
|
|
40
|
+
#private;
|
|
41
|
+
readonly id: `${string}-${string}-${string}-${string}-${string}`;
|
|
42
|
+
readonly command: string;
|
|
43
|
+
readonly cwd: string;
|
|
44
|
+
readonly pid: number | null;
|
|
45
|
+
/** The agent left this running on purpose; an interrupted turn spares it. */
|
|
46
|
+
detached: boolean;
|
|
47
|
+
private constructor();
|
|
48
|
+
static start(ctx: Context, options: ProcessStartOptions, hooks: ManagedProcessHooks): Promise<ManagedProcess>;
|
|
49
|
+
get status(): ManagedProcessStatus;
|
|
50
|
+
snapshot(): ProcessSnapshot;
|
|
51
|
+
readOutput(stdoutOffset: number, stderrOffset: number, consume?: boolean): ProcessSnapshot & {
|
|
52
|
+
stderrDelta: string;
|
|
53
|
+
stderrDeltaBytes: number;
|
|
54
|
+
stderrDeltaOmittedBytes: number;
|
|
55
|
+
stderrOffset: number;
|
|
56
|
+
stdoutDelta: string;
|
|
57
|
+
stdoutDeltaBytes: number;
|
|
58
|
+
stdoutDeltaOmittedBytes: number;
|
|
59
|
+
stdoutOffset: number;
|
|
60
|
+
};
|
|
61
|
+
writeStdin(ctx: Context, data: string | Uint8Array): Promise<boolean>;
|
|
62
|
+
endStdin(ctx: Context, data?: string | Uint8Array): Promise<void>;
|
|
63
|
+
interrupt(ctx: Context): Promise<boolean>;
|
|
64
|
+
kill(ctx: Context, signal?: NodeJS.Signals, options?: ProcessKillOptions): Promise<void>;
|
|
65
|
+
wait(ctx: Context): Promise<ProcessRunResult>;
|
|
66
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Context } from "@steve.kite/stdlib";
|
|
2
|
+
/**
|
|
3
|
+
* Remembers the process groups we started so shutdown can take them down.
|
|
4
|
+
*
|
|
5
|
+
* A background command outlives the shell that launched it, so a group has to
|
|
6
|
+
* stay reapable long after its leader is gone.
|
|
7
|
+
*
|
|
8
|
+
* A group is identified by the number the operating system gave it, and that
|
|
9
|
+
* number is reused once the group is gone. Every group is therefore dropped as
|
|
10
|
+
* soon as it dies, and checked again immediately before it is signalled, which
|
|
11
|
+
* narrows the window in which a recycled identifier could be mistaken for ours
|
|
12
|
+
* to the gap between that check and the signal. Closing it entirely would take
|
|
13
|
+
* a kernel handle on the group, which the platforms we support do not offer.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ProcessGroupReaper {
|
|
16
|
+
#private;
|
|
17
|
+
retain(processGroupId: number): void;
|
|
18
|
+
release(processGroupId: number): void;
|
|
19
|
+
/** The groups we would take down right now, for tests and diagnostics. */
|
|
20
|
+
pending(): readonly number[];
|
|
21
|
+
/** Asks every surviving group to stop, then forces the ones that did not. */
|
|
22
|
+
terminateAll(ctx: Context, forceAfterMs: number): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Signals a whole process group and nothing else.
|
|
26
|
+
*
|
|
27
|
+
* Unlike killing a process tree, there is deliberately no fall back to the bare
|
|
28
|
+
* identifier: if the group is gone, the number may now belong to an unrelated
|
|
29
|
+
* process, and signalling it would be someone else's problem.
|
|
30
|
+
*/
|
|
31
|
+
export declare function killProcessGroup(ctx: Context, processGroupId: number, signal: NodeJS.Signals): Promise<void>;
|
|
32
|
+
export declare function isProcessGroupAlive(processGroupId: number): boolean;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { killProcessTree } from "./killProcessTree.js";
|
|
2
|
+
export { isTargetProcessAlive } from "./isTargetProcessAlive.js";
|
|
3
|
+
export { BoundedOutputBuffer } from "./BoundedOutputBuffer.js";
|
|
4
|
+
export { ManagedProcess, NativeProcessManager } from "./NativeProcessManager.js";
|
|
5
|
+
export { resolveSystemShell } from "./resolveSystemShell.js";
|
|
6
|
+
export { waitForProcessExit } from "./waitForProcessExit.js";
|
|
7
|
+
export type { ManagedProcessStatus, ProcessKillOptions, ProcessRunOptions, ProcessRunResult, ProcessSnapshot, ProcessStartOptions, } from "./types.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isProcessRunning(processId: number): Promise<boolean>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isTargetProcessAlive(pid: number): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function resolveSystemShell(environment?: NodeJS.ProcessEnv): string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Context } from "@steve.kite/stdlib";
|
|
2
|
+
import type { ProcessStartOptions } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* How a running command is talked to.
|
|
5
|
+
*
|
|
6
|
+
* Pipes and a pseudo-terminal differ in ways the process bookkeeping should not
|
|
7
|
+
* have to know about: a terminal merges the two output streams, echoes input,
|
|
8
|
+
* and reports one exit rather than a separate stream close.
|
|
9
|
+
*/
|
|
10
|
+
export interface ProcessTransport {
|
|
11
|
+
readonly kind: "pipe" | "pty";
|
|
12
|
+
readonly pid: number | null;
|
|
13
|
+
/** Whether stderr arrives separately. A terminal merges it into stdout. */
|
|
14
|
+
readonly separatesStderr: boolean;
|
|
15
|
+
endInput(data?: string | Uint8Array): void;
|
|
16
|
+
onError(listener: (error: Error) => void): void;
|
|
17
|
+
onExit(listener: (code: number | null, signal: NodeJS.Signals | null) => void): void;
|
|
18
|
+
onOutputEnd(listener: () => void): void;
|
|
19
|
+
onStderr(listener: (chunk: Buffer) => void): void;
|
|
20
|
+
onStdout(listener: (chunk: Buffer) => void): void;
|
|
21
|
+
/** Releases every listener; the command may still be running. */
|
|
22
|
+
release(): void;
|
|
23
|
+
write(data: string | Uint8Array): boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Discourages terminal-shaped output from a command the model cannot watch.
|
|
27
|
+
*
|
|
28
|
+
* A pseudo-terminal invites full-screen redraws, colour, and pagers that wait
|
|
29
|
+
* for a keypress. None of that survives being read as text, so the environment
|
|
30
|
+
* asks programs not to produce it in the first place.
|
|
31
|
+
*/
|
|
32
|
+
export declare const NON_INTERACTIVE_TERMINAL_ENVIRONMENT: NodeJS.ProcessEnv;
|
|
33
|
+
export declare function startProcessTransport<Result>(ctx: Context, options: ProcessStartOptions, started: (ctx: Context, transport: ProcessTransport) => Result | PromiseLike<Result>): Promise<Awaited<Result>>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export type ManagedProcessStatus = "running" | "exited" | "killed";
|
|
2
|
+
export interface ProcessStartOptions {
|
|
3
|
+
args?: readonly string[];
|
|
4
|
+
command: string;
|
|
5
|
+
cwd: string;
|
|
6
|
+
shell?: string;
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
maxOutputBytes?: number;
|
|
9
|
+
/** Run the command under a pseudo-terminal instead of pipes. */
|
|
10
|
+
tty?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ProcessRunOptions extends ProcessStartOptions {
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
killGraceMs?: number;
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
}
|
|
17
|
+
export interface ProcessKillOptions {
|
|
18
|
+
forceAfterMs?: number;
|
|
19
|
+
/** Also stop work deliberately left running in the background. */
|
|
20
|
+
includeDetached?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface ProcessSnapshot {
|
|
23
|
+
id: string;
|
|
24
|
+
pid: number | null;
|
|
25
|
+
command: string;
|
|
26
|
+
cwd: string;
|
|
27
|
+
status: ManagedProcessStatus;
|
|
28
|
+
stdout: string;
|
|
29
|
+
stderr: string;
|
|
30
|
+
stdoutBytes?: number;
|
|
31
|
+
stderrBytes?: number;
|
|
32
|
+
stdoutOmittedBytes?: number;
|
|
33
|
+
stderrOmittedBytes?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface ProcessRunResult extends ProcessSnapshot {
|
|
36
|
+
exitCode: number | null;
|
|
37
|
+
signal: NodeJS.Signals | null;
|
|
38
|
+
timedOut: boolean;
|
|
39
|
+
aborted: boolean;
|
|
40
|
+
killed: boolean;
|
|
41
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type Static } from "@sinclair/typebox";
|
|
2
|
+
import type { EventId } from "./EventId.js";
|
|
3
|
+
export declare const defaultAppletAllowedScopes: readonly ["everywhere", "project", "workspace", "session"];
|
|
4
|
+
export declare const appletAllowedScopesSchema: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everywhere">, import("@sinclair/typebox").TLiteral<"project">, import("@sinclair/typebox").TLiteral<"workspace">, import("@sinclair/typebox").TLiteral<"session">]>>;
|
|
5
|
+
export type AppletAllowedScopes = Static<typeof appletAllowedScopesSchema>;
|
|
6
|
+
export declare const appletVersionSchema: import("@sinclair/typebox").TObject<{
|
|
7
|
+
version: import("@sinclair/typebox").TInteger;
|
|
8
|
+
changeDescription: import("@sinclair/typebox").TString;
|
|
9
|
+
createdAt: import("@sinclair/typebox").TNumber;
|
|
10
|
+
}>;
|
|
11
|
+
export type AppletVersion = Static<typeof appletVersionSchema>;
|
|
12
|
+
/**
|
|
13
|
+
* An applet is created by importing a source folder; no agent writes into the applet data folder
|
|
14
|
+
* directly. Each import lands in its own version directory (`v1`, `v2`, ...), one version is
|
|
15
|
+
* current, and Happy Terminal serves the current version's static files with `index.html` as the entry point.
|
|
16
|
+
*/
|
|
17
|
+
export declare const appletSchema: import("@sinclair/typebox").TObject<{
|
|
18
|
+
name: import("@sinclair/typebox").TString;
|
|
19
|
+
description: import("@sinclair/typebox").TString;
|
|
20
|
+
purpose: import("@sinclair/typebox").TString;
|
|
21
|
+
allowedScopes: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everywhere">, import("@sinclair/typebox").TLiteral<"project">, import("@sinclair/typebox").TLiteral<"workspace">, import("@sinclair/typebox").TLiteral<"session">]>>;
|
|
22
|
+
iconThumbhash: import("@sinclair/typebox").TString;
|
|
23
|
+
iconUrl: import("@sinclair/typebox").TString;
|
|
24
|
+
authorSessionId: import("@sinclair/typebox").TString;
|
|
25
|
+
sourceDescription: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
26
|
+
currentVersion: import("@sinclair/typebox").TInteger;
|
|
27
|
+
versions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
28
|
+
version: import("@sinclair/typebox").TInteger;
|
|
29
|
+
changeDescription: import("@sinclair/typebox").TString;
|
|
30
|
+
createdAt: import("@sinclair/typebox").TNumber;
|
|
31
|
+
}>>;
|
|
32
|
+
createdAt: import("@sinclair/typebox").TNumber;
|
|
33
|
+
updatedAt: import("@sinclair/typebox").TNumber;
|
|
34
|
+
}>;
|
|
35
|
+
export type Applet = Static<typeof appletSchema>;
|
|
36
|
+
export declare const createAppletRequestSchema: import("@sinclair/typebox").TObject<{
|
|
37
|
+
name: import("@sinclair/typebox").TString;
|
|
38
|
+
description: import("@sinclair/typebox").TString;
|
|
39
|
+
purpose: import("@sinclair/typebox").TString;
|
|
40
|
+
allowedScopes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everywhere">, import("@sinclair/typebox").TLiteral<"project">, import("@sinclair/typebox").TLiteral<"workspace">, import("@sinclair/typebox").TLiteral<"session">]>>>;
|
|
41
|
+
authorSessionId: import("@sinclair/typebox").TString;
|
|
42
|
+
path: import("@sinclair/typebox").TString;
|
|
43
|
+
iconPath: import("@sinclair/typebox").TString;
|
|
44
|
+
sourceDescription: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
45
|
+
}>;
|
|
46
|
+
export type CreateAppletRequest = Static<typeof createAppletRequestSchema>;
|
|
47
|
+
export declare const updateAppletRequestSchema: import("@sinclair/typebox").TObject<{
|
|
48
|
+
path: import("@sinclair/typebox").TString;
|
|
49
|
+
changeDescription: import("@sinclair/typebox").TString;
|
|
50
|
+
allowedScopes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everywhere">, import("@sinclair/typebox").TLiteral<"project">, import("@sinclair/typebox").TLiteral<"workspace">, import("@sinclair/typebox").TLiteral<"session">]>>>;
|
|
51
|
+
}>;
|
|
52
|
+
export type UpdateAppletRequest = Static<typeof updateAppletRequestSchema>;
|
|
53
|
+
export declare const resolveAppletOpenRequestSchema: import("@sinclair/typebox").TObject<{
|
|
54
|
+
path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
55
|
+
query: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>>;
|
|
56
|
+
sessionId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
57
|
+
projectId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
58
|
+
workspaceId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
59
|
+
}>;
|
|
60
|
+
export type ResolveAppletOpenRequest = Static<typeof resolveAppletOpenRequestSchema>;
|
|
61
|
+
export declare const resolveAppletOpenResponseSchema: import("@sinclair/typebox").TObject<{
|
|
62
|
+
url: import("@sinclair/typebox").TString;
|
|
63
|
+
}>;
|
|
64
|
+
export type ResolveAppletOpenResponse = Static<typeof resolveAppletOpenResponseSchema>;
|
|
65
|
+
export declare const appletContextSchema: import("@sinclair/typebox").TObject<{
|
|
66
|
+
applet: import("@sinclair/typebox").TString;
|
|
67
|
+
version: import("@sinclair/typebox").TInteger;
|
|
68
|
+
sessionId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
69
|
+
projectId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
70
|
+
workspaceId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
71
|
+
}>;
|
|
72
|
+
export type AppletContext = Static<typeof appletContextSchema>;
|
|
73
|
+
export declare const revertAppletRequestSchema: import("@sinclair/typebox").TObject<{
|
|
74
|
+
version: import("@sinclair/typebox").TInteger;
|
|
75
|
+
}>;
|
|
76
|
+
export type RevertAppletRequest = Static<typeof revertAppletRequestSchema>;
|
|
77
|
+
export interface AppletResponse {
|
|
78
|
+
applet: Applet;
|
|
79
|
+
}
|
|
80
|
+
export interface ListAppletsResponse {
|
|
81
|
+
applets: readonly Applet[];
|
|
82
|
+
}
|
|
83
|
+
export type AppletManagementErrorCode = "invalid_request" | "invalid_applet" | "applet_not_found";
|
|
84
|
+
export interface AppletManagementErrorResponse {
|
|
85
|
+
error: {
|
|
86
|
+
code: AppletManagementErrorCode;
|
|
87
|
+
message: string;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Applets changed. Live-only, carrying the whole current set so a reconnecting client reads the
|
|
92
|
+
* current applets instead of replaying every past import.
|
|
93
|
+
*/
|
|
94
|
+
export interface AppletsChangedEvent {
|
|
95
|
+
createdAt: number;
|
|
96
|
+
data: {
|
|
97
|
+
applets: readonly Applet[];
|
|
98
|
+
};
|
|
99
|
+
id: EventId;
|
|
100
|
+
type: "applets_changed";
|
|
101
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { type Static } from "@sinclair/typebox";
|
|
2
|
+
export declare const AttachmentImagePreviewSchema: import("@sinclair/typebox").TObject<{
|
|
3
|
+
downloadUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
4
|
+
height: import("@sinclair/typebox").TInteger;
|
|
5
|
+
mediaType: import("@sinclair/typebox").TLiteral<"image/png">;
|
|
6
|
+
path: import("@sinclair/typebox").TString;
|
|
7
|
+
thumbhash: import("@sinclair/typebox").TString;
|
|
8
|
+
width: import("@sinclair/typebox").TInteger;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const SecretRequestAttachmentSchema: import("@sinclair/typebox").TObject<{
|
|
11
|
+
description: import("@sinclair/typebox").TString;
|
|
12
|
+
environmentVariables: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
13
|
+
id: import("@sinclair/typebox").TString;
|
|
14
|
+
instructions: import("@sinclair/typebox").TString;
|
|
15
|
+
kind: import("@sinclair/typebox").TLiteral<"secret_request">;
|
|
16
|
+
operation: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"create">, import("@sinclair/typebox").TLiteral<"update">]>;
|
|
17
|
+
secretId: import("@sinclair/typebox").TString;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const AttachmentSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
|
20
|
+
bytes: import("@sinclair/typebox").TInteger;
|
|
21
|
+
height: import("@sinclair/typebox").TInteger;
|
|
22
|
+
kind: import("@sinclair/typebox").TLiteral<"image">;
|
|
23
|
+
mediaType: import("@sinclair/typebox").TString;
|
|
24
|
+
name: import("@sinclair/typebox").TString;
|
|
25
|
+
thumbhash: import("@sinclair/typebox").TString;
|
|
26
|
+
width: import("@sinclair/typebox").TInteger;
|
|
27
|
+
downloadUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
28
|
+
id: import("@sinclair/typebox").TString;
|
|
29
|
+
source: import("@sinclair/typebox").TString;
|
|
30
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
31
|
+
bytes: import("@sinclair/typebox").TInteger;
|
|
32
|
+
duration: import("@sinclair/typebox").TNumber;
|
|
33
|
+
height: import("@sinclair/typebox").TInteger;
|
|
34
|
+
kind: import("@sinclair/typebox").TLiteral<"video">;
|
|
35
|
+
mediaType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
36
|
+
name: import("@sinclair/typebox").TString;
|
|
37
|
+
preview: import("@sinclair/typebox").TObject<{
|
|
38
|
+
downloadUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
39
|
+
height: import("@sinclair/typebox").TInteger;
|
|
40
|
+
mediaType: import("@sinclair/typebox").TLiteral<"image/png">;
|
|
41
|
+
path: import("@sinclair/typebox").TString;
|
|
42
|
+
thumbhash: import("@sinclair/typebox").TString;
|
|
43
|
+
width: import("@sinclair/typebox").TInteger;
|
|
44
|
+
}>;
|
|
45
|
+
width: import("@sinclair/typebox").TInteger;
|
|
46
|
+
downloadUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
47
|
+
id: import("@sinclair/typebox").TString;
|
|
48
|
+
source: import("@sinclair/typebox").TString;
|
|
49
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
50
|
+
bytes: import("@sinclair/typebox").TInteger;
|
|
51
|
+
duration: import("@sinclair/typebox").TNumber;
|
|
52
|
+
kind: import("@sinclair/typebox").TLiteral<"audio">;
|
|
53
|
+
mediaType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
54
|
+
name: import("@sinclair/typebox").TString;
|
|
55
|
+
downloadUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
56
|
+
id: import("@sinclair/typebox").TString;
|
|
57
|
+
source: import("@sinclair/typebox").TString;
|
|
58
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
59
|
+
description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
60
|
+
image: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
61
|
+
kind: import("@sinclair/typebox").TLiteral<"url">;
|
|
62
|
+
siteName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
63
|
+
title: import("@sinclair/typebox").TString;
|
|
64
|
+
downloadUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
65
|
+
id: import("@sinclair/typebox").TString;
|
|
66
|
+
source: import("@sinclair/typebox").TString;
|
|
67
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
68
|
+
bytes: import("@sinclair/typebox").TInteger;
|
|
69
|
+
kind: import("@sinclair/typebox").TLiteral<"file">;
|
|
70
|
+
mediaType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
71
|
+
name: import("@sinclair/typebox").TString;
|
|
72
|
+
downloadUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
73
|
+
id: import("@sinclair/typebox").TString;
|
|
74
|
+
source: import("@sinclair/typebox").TString;
|
|
75
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
76
|
+
description: import("@sinclair/typebox").TString;
|
|
77
|
+
id: import("@sinclair/typebox").TString;
|
|
78
|
+
image: import("@sinclair/typebox").TString;
|
|
79
|
+
kind: import("@sinclair/typebox").TLiteral<"applet">;
|
|
80
|
+
name: import("@sinclair/typebox").TString;
|
|
81
|
+
path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
82
|
+
query: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>>;
|
|
83
|
+
thumbhash: import("@sinclair/typebox").TString;
|
|
84
|
+
applet: import("@sinclair/typebox").TString;
|
|
85
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
86
|
+
description: import("@sinclair/typebox").TString;
|
|
87
|
+
environmentVariables: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
88
|
+
id: import("@sinclair/typebox").TString;
|
|
89
|
+
instructions: import("@sinclair/typebox").TString;
|
|
90
|
+
kind: import("@sinclair/typebox").TLiteral<"secret_request">;
|
|
91
|
+
operation: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"create">, import("@sinclair/typebox").TLiteral<"update">]>;
|
|
92
|
+
secretId: import("@sinclair/typebox").TString;
|
|
93
|
+
}>]>;
|
|
94
|
+
export type AttachmentImagePreview = Static<typeof AttachmentImagePreviewSchema>;
|
|
95
|
+
export type SecretRequestAttachment = Static<typeof SecretRequestAttachmentSchema>;
|
|
96
|
+
export type Attachment = Static<typeof AttachmentSchema>;
|