@kmlckj/aios-agent-server-sdk 0.0.0-stage → 0.0.1

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 (134) hide show
  1. package/EVENTS.md +88 -0
  2. package/README.md +628 -2
  3. package/capabilities.json +2398 -0
  4. package/dist/cli/daemon/preferences.d.ts +67 -0
  5. package/dist/cli/daemon/protocol.d.ts +26 -0
  6. package/dist/cli/daemon/resource-limits.d.ts +39 -0
  7. package/dist/core/auth/platform-client.d.ts +59 -0
  8. package/dist/core/host/runtime-dependencies.d.ts +26 -0
  9. package/dist/core/skills/skill-bindings.d.ts +19 -0
  10. package/dist/core/skills/skill-versions.d.ts +31 -0
  11. package/dist/electron/main/bundled-runtime-tools.d.ts +24 -0
  12. package/dist/events.js +1 -0
  13. package/dist/index.js +55 -0
  14. package/dist/sdk/src/auth.d.ts +43 -0
  15. package/dist/sdk/src/authorization-events.d.ts +16 -0
  16. package/dist/sdk/src/authorization.d.ts +10 -0
  17. package/dist/sdk/src/communication.d.ts +9 -0
  18. package/dist/sdk/src/diagnostics.d.ts +24 -0
  19. package/dist/sdk/src/errors.d.ts +4 -0
  20. package/dist/sdk/src/events.d.ts +4 -0
  21. package/dist/sdk/src/file-api.d.ts +29 -0
  22. package/dist/sdk/src/file-storage.d.ts +34 -0
  23. package/dist/sdk/src/index.d.ts +257 -0
  24. package/dist/sdk/src/local-connection.d.ts +9 -0
  25. package/dist/sdk/src/managed-host.d.ts +32 -0
  26. package/dist/sdk/src/native-status.d.ts +59 -0
  27. package/dist/sdk/src/platform.d.ts +35 -0
  28. package/dist/sdk/src/runtime-control.d.ts +111 -0
  29. package/dist/sdk/src/runtime-integrity.d.ts +10 -0
  30. package/dist/sdk/src/tool-reference.d.ts +11 -0
  31. package/dist/sdk/src/tool-result.d.ts +36 -0
  32. package/dist/sdk/src/tool-server.d.ts +14 -0
  33. package/dist/sdk/src/transport.d.ts +25 -0
  34. package/dist/sdk/src/types.d.ts +492 -0
  35. package/dist/shared/account-context-api.d.ts +47 -0
  36. package/dist/shared/action-center-api.d.ts +50 -0
  37. package/dist/shared/agent-capabilities.d.ts +42 -0
  38. package/dist/shared/agent-hooks.d.ts +10 -0
  39. package/dist/shared/agent-team.d.ts +17 -0
  40. package/dist/shared/artifact-evidence.d.ts +18 -0
  41. package/dist/shared/automation-api.d.ts +112 -0
  42. package/dist/shared/client-downloads-api.d.ts +20 -0
  43. package/dist/shared/cloud-assistant-api.d.ts +1020 -0
  44. package/dist/shared/cloud-task-event-api.d.ts +22 -0
  45. package/dist/shared/collaboration-api.d.ts +16 -0
  46. package/dist/shared/collaboration-automation-api.d.ts +55 -0
  47. package/dist/shared/collaboration-deep-link.d.ts +18 -0
  48. package/dist/shared/collaboration-event-api.d.ts +19 -0
  49. package/dist/shared/collaboration-plan-api.d.ts +159 -0
  50. package/dist/shared/collaboration-project-api.d.ts +206 -0
  51. package/dist/shared/collaboration-resource-api.d.ts +41 -0
  52. package/dist/shared/collaboration-task-api.d.ts +372 -0
  53. package/dist/shared/computer-use-api.d.ts +80 -0
  54. package/dist/shared/computer-use-handshake.d.ts +19 -0
  55. package/dist/shared/computer-use-protocol.d.ts +488 -0
  56. package/dist/shared/context-usage.d.ts +15 -0
  57. package/dist/shared/desktop-api.d.ts +449 -0
  58. package/dist/shared/desktop-diagnostics-api.d.ts +56 -0
  59. package/dist/shared/desktop-language.d.ts +3 -0
  60. package/dist/shared/desktop-mcp-service-api.d.ts +157 -0
  61. package/dist/shared/document-session-api.d.ts +91 -0
  62. package/dist/shared/enterprise-knowledge-api.d.ts +103 -0
  63. package/dist/shared/enterprise-project-api.d.ts +26 -0
  64. package/dist/shared/execution-activity.d.ts +3 -0
  65. package/dist/shared/execution-context.d.ts +37 -0
  66. package/dist/shared/execution-identity.d.ts +7 -0
  67. package/dist/shared/execution-profile.d.ts +6 -0
  68. package/dist/shared/execution-target.d.ts +71 -0
  69. package/dist/shared/expert-team-api.d.ts +54 -0
  70. package/dist/shared/feedback-api.d.ts +20 -0
  71. package/dist/shared/git-api.d.ts +227 -0
  72. package/dist/shared/git-http-api.d.ts +12 -0
  73. package/dist/shared/hosted-git-api.d.ts +132 -0
  74. package/dist/shared/js-agent-hooks.d.ts +23 -0
  75. package/dist/shared/local-custom-model-api.d.ts +55 -0
  76. package/dist/shared/local-environment-api.d.ts +110 -0
  77. package/dist/shared/local-mcp-server-api.d.ts +91 -0
  78. package/dist/shared/local-memory.d.ts +165 -0
  79. package/dist/shared/local-plugin-api.d.ts +26 -0
  80. package/dist/shared/local-runtime-api.d.ts +32 -0
  81. package/dist/shared/local-skill-api.d.ts +42 -0
  82. package/dist/shared/local-task-api.d.ts +658 -0
  83. package/dist/shared/local-task-command-client.d.ts +55 -0
  84. package/dist/shared/local-task-command.d.ts +91 -0
  85. package/dist/shared/local-task-event-projection.d.ts +29 -0
  86. package/dist/shared/local-task-projection.d.ts +29 -0
  87. package/dist/shared/local-workspace.d.ts +9 -0
  88. package/dist/shared/managed-authorization.d.ts +70 -0
  89. package/dist/shared/memory-customization.d.ts +32 -0
  90. package/dist/shared/model-routing.d.ts +31 -0
  91. package/dist/shared/model-selection.d.ts +11 -0
  92. package/dist/shared/my-expert-api.d.ts +119 -0
  93. package/dist/shared/navigation-api.d.ts +20 -0
  94. package/dist/shared/office-window-api.d.ts +81 -0
  95. package/dist/shared/platform-branding-api.d.ts +66 -0
  96. package/dist/shared/plugin-market-api.d.ts +120 -0
  97. package/dist/shared/profession-market-api.d.ts +96 -0
  98. package/dist/shared/project-local-skill-api.d.ts +8 -0
  99. package/dist/shared/remote-connection-api.d.ts +97 -0
  100. package/dist/shared/remote-connection.d.ts +62 -0
  101. package/dist/shared/remote-installation-api.d.ts +50 -0
  102. package/dist/shared/remote-tasks-api.d.ts +118 -0
  103. package/dist/shared/runtime-tuning.d.ts +44 -0
  104. package/dist/shared/scene-case-api.d.ts +42 -0
  105. package/dist/shared/security-center-api.d.ts +74 -0
  106. package/dist/shared/sensitive-protection-api.d.ts +71 -0
  107. package/dist/shared/session-policy.d.ts +26 -0
  108. package/dist/shared/shortcut-api.d.ts +7 -0
  109. package/dist/shared/skill-activation-api.d.ts +8 -0
  110. package/dist/shared/skill-asset-api.d.ts +12 -0
  111. package/dist/shared/skill-market-api.d.ts +119 -0
  112. package/dist/shared/skill-upload.d.ts +16 -0
  113. package/dist/shared/speech-recognition-api.d.ts +12 -0
  114. package/dist/shared/storage-integrity.d.ts +15 -0
  115. package/dist/shared/target-bridge-protocol.d.ts +67 -0
  116. package/dist/shared/target-environments.d.ts +15 -0
  117. package/dist/shared/target-resources.d.ts +105 -0
  118. package/dist/shared/task-initialization-api.d.ts +44 -0
  119. package/dist/shared/task-menu-api.d.ts +27 -0
  120. package/dist/shared/task-operation.d.ts +19 -0
  121. package/dist/shared/task-path-policy.d.ts +14 -0
  122. package/dist/shared/task-resource-manifest.d.ts +33 -0
  123. package/dist/shared/task-storage-recovery.d.ts +33 -0
  124. package/dist/shared/task-terminal-api.d.ts +48 -0
  125. package/dist/shared/team-control.d.ts +60 -0
  126. package/dist/shared/tool-activity.d.ts +18 -0
  127. package/dist/shared/update-api.d.ts +65 -0
  128. package/dist/shared/usage-statistics-api.d.ts +18 -0
  129. package/dist/shared/worktree-api.d.ts +188 -0
  130. package/examples/business-assistant.mjs +19 -0
  131. package/examples/common.mjs +51 -0
  132. package/examples/platform-assistant.mjs +9 -0
  133. package/examples/standalone-assistant.mjs +16 -0
  134. package/package.json +20 -4
@@ -0,0 +1,67 @@
1
+ import { type GitSettings } from '../../shared/git-api.js';
2
+ import { type WorktreeSettings } from '../../shared/worktree-api.js';
3
+ import { type DesktopSecurityPolicy, type SecurityRuntimeToolEnablement } from '../../shared/security-center-api.js';
4
+ export interface Preferences {
5
+ version: 1;
6
+ revision: number;
7
+ git: GitSettings;
8
+ worktrees: WorktreeSettings;
9
+ securityPolicy: DesktopSecurityPolicy;
10
+ security: {
11
+ deletionProtection: boolean;
12
+ };
13
+ tools: SecurityRuntimeToolEnablement;
14
+ }
15
+ export type PreferenceDomain = 'git' | 'worktrees' | 'security' | 'tools';
16
+ export declare const preferenceDefaults: {
17
+ git: GitSettings;
18
+ worktrees: WorktreeSettings;
19
+ security: {
20
+ deletionProtection: boolean;
21
+ };
22
+ tools: SecurityRuntimeToolEnablement;
23
+ };
24
+ export declare const preferenceSchema: {
25
+ [k: string]: {
26
+ type: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
27
+ scope: string;
28
+ restart: boolean;
29
+ default: any;
30
+ };
31
+ };
32
+ /** Host storage differs, while preference contracts and validation stay shared. */
33
+ export declare class CliPreferences {
34
+ private readonly root;
35
+ private readonly account;
36
+ constructor(root: string, account: () => string);
37
+ private file;
38
+ read(): Preferences;
39
+ get(key: string): {
40
+ key: string;
41
+ value: any;
42
+ revision: number;
43
+ scope: string;
44
+ };
45
+ set(key: string, value: string | undefined, revision: number): {
46
+ revision: number;
47
+ version: 1;
48
+ git: GitSettings;
49
+ worktrees: WorktreeSettings;
50
+ securityPolicy: DesktopSecurityPolicy;
51
+ security: {
52
+ deletionProtection: boolean;
53
+ };
54
+ tools: SecurityRuntimeToolEnablement;
55
+ };
56
+ save(domain: PreferenceDomain | 'securityPolicy', value: unknown, revision: number): {
57
+ revision: number;
58
+ version: 1;
59
+ git: GitSettings;
60
+ worktrees: WorktreeSettings;
61
+ securityPolicy: DesktopSecurityPolicy;
62
+ security: {
63
+ deletionProtection: boolean;
64
+ };
65
+ tools: SecurityRuntimeToolEnablement;
66
+ };
67
+ }
@@ -0,0 +1,26 @@
1
+ export declare const DAEMON_PROTOCOL = 1;
2
+ export declare const MAX_RPC_BYTES: number;
3
+ export interface DaemonMetadata {
4
+ protocol: 1;
5
+ pid: number;
6
+ instanceId: string;
7
+ version: string;
8
+ installationId?: string;
9
+ token: string;
10
+ socket: string;
11
+ root: string;
12
+ startedAt: string;
13
+ }
14
+ export declare function validMetadata(value: unknown): value is DaemonMetadata;
15
+ export interface DaemonRequest {
16
+ argv: string[];
17
+ payload?: unknown;
18
+ expectedIdentity?: string;
19
+ environment?: Record<string, string>;
20
+ control?: {
21
+ leaseId: string;
22
+ foreground: boolean;
23
+ timeoutMs?: number;
24
+ };
25
+ }
26
+ export declare function parseDaemonRequest(value: unknown): DaemonRequest;
@@ -0,0 +1,39 @@
1
+ export declare const resourceDefaults: {
2
+ readonly 'runtime.maxActiveTasks': 2;
3
+ readonly 'runtime.maxQueuedCommands': 100;
4
+ readonly 'runtime.maxQueuedPerTask': 20;
5
+ readonly 'runtime.defaultTimeout': "0";
6
+ readonly 'storage.minFreeBytes': number;
7
+ readonly 'cache.maxBytes': number;
8
+ };
9
+ export type ResourceKey = keyof typeof resourceDefaults;
10
+ export interface ResourceSettings {
11
+ version: 1;
12
+ revision: number;
13
+ values: {
14
+ [K in ResourceKey]: typeof resourceDefaults[K] extends number ? number : string;
15
+ };
16
+ }
17
+ export declare const resourceSchema: {
18
+ [k: string]: {
19
+ type: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
20
+ scope: string;
21
+ restart: boolean;
22
+ default: number | "0";
23
+ };
24
+ };
25
+ export declare class CliResourceLimits {
26
+ private readonly file;
27
+ constructor(root: string);
28
+ read(): ResourceSettings;
29
+ get(key: string): {
30
+ key: string;
31
+ value: string | number;
32
+ revision: number;
33
+ scope: string;
34
+ };
35
+ set(key: string, value: string | undefined, revision: number): {
36
+ configuration: ResourceSettings;
37
+ restartRequired: boolean;
38
+ };
39
+ }
@@ -0,0 +1,59 @@
1
+ interface PlatformPostInput {
2
+ baseUrl: string;
3
+ path: string;
4
+ body?: unknown;
5
+ accessToken?: string;
6
+ fetcher?: PlatformFetch;
7
+ }
8
+ export type PlatformFetch = (input: string, init?: RequestInit) => Promise<Response>;
9
+ export type PlatformHttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
10
+ export interface PlatformRequestInput {
11
+ method: PlatformHttpMethod;
12
+ path: `/api/${string}`;
13
+ query?: Record<string, string | number | boolean | undefined>;
14
+ body?: unknown;
15
+ formData?: FormData;
16
+ binaryData?: Uint8Array;
17
+ extraHeaders?: Record<string, string>;
18
+ timeoutMs?: number;
19
+ emptyTenantContext?: boolean;
20
+ /** Resource binding scope. null explicitly selects personal scope. */
21
+ tenantId?: string | null;
22
+ }
23
+ export interface PlatformAuthorizationProvider {
24
+ getAuthorization(): Promise<{
25
+ accessToken: string;
26
+ platformBaseUrl: string;
27
+ tenantId?: string | null;
28
+ userId?: string | null;
29
+ workspaceId?: string | null;
30
+ }>;
31
+ refreshAuthorization(): Promise<void>;
32
+ invalidateAuthorization?(reason: string): void | Promise<void>;
33
+ }
34
+ export interface PlatformDataClient {
35
+ request<T>(input: PlatformRequestInput): Promise<T>;
36
+ requestBinary?(input: PlatformRequestInput): Promise<PlatformBinaryResponse>;
37
+ }
38
+ export interface PlatformBinaryResponse {
39
+ data: Uint8Array;
40
+ mediaType: string | null;
41
+ }
42
+ export declare class PlatformRequestClient implements PlatformDataClient {
43
+ private readonly authorization;
44
+ private readonly fetcher;
45
+ constructor(authorization: PlatformAuthorizationProvider, fetcher?: PlatformFetch);
46
+ request<T>(input: PlatformRequestInput): Promise<T>;
47
+ requestBinary(input: PlatformRequestInput): Promise<PlatformBinaryResponse>;
48
+ private requestBinaryOnce;
49
+ private requestOnce;
50
+ private invalidateAuthorization;
51
+ }
52
+ export declare class PlatformHttpError extends Error {
53
+ readonly status: number;
54
+ constructor(status: number, message: string);
55
+ }
56
+ export declare function isUnauthorizedPlatformError(error: unknown): boolean;
57
+ export declare function postPlatformData<T>(input: PlatformPostInput): Promise<T>;
58
+ export declare function getPlatformData<T>(input: Omit<PlatformPostInput, 'body'>): Promise<T>;
59
+ export {};
@@ -0,0 +1,26 @@
1
+ import { type BundledRuntimeToolDefinition } from '../../electron/main/bundled-runtime-tools.js';
2
+ export type ExternalToolId = 'node' | 'python' | 'git' | 'bash' | 'npm';
3
+ export interface ExternalRuntimeDependencies {
4
+ profile: 'external';
5
+ hostNode?: string;
6
+ tools?: Partial<Record<ExternalToolId, string>>;
7
+ }
8
+ export interface ResolvedDependency {
9
+ executable?: string;
10
+ source: 'explicit' | 'host' | 'path' | 'bundled';
11
+ status: 'available' | 'not-installed' | 'unavailable';
12
+ version?: string;
13
+ detectedExecutable?: string;
14
+ reason?: string;
15
+ }
16
+ export interface ResolvedRuntimeDependencies {
17
+ profile: 'external' | 'bundled';
18
+ hostNode: string;
19
+ hostVersion: string;
20
+ tools: Record<ExternalToolId, ResolvedDependency>;
21
+ }
22
+ export declare function resolveBundledDependencies(resourcesPath: string): ResolvedRuntimeDependencies;
23
+ export declare function resolveExternalRuntimeDependencies(input: ExternalRuntimeDependencies, environment?: NodeJS.ProcessEnv): ResolvedRuntimeDependencies;
24
+ export declare function externalTaskTools(dependencies: ResolvedRuntimeDependencies): Array<BundledRuntimeToolDefinition & {
25
+ launchMode: 'direct';
26
+ }>;
@@ -0,0 +1,19 @@
1
+ import type { PlatformDataClient } from '../auth/platform-client.js';
2
+ /** The platform's MySkillCardDTO, not the marketplace's public resource ID. */
3
+ export interface SkillBinding {
4
+ skillId: string;
5
+ bindingId: string | null;
6
+ relationType: 'CREATED' | 'FORKED' | 'INSTALLED';
7
+ tenantId: string | null;
8
+ name: string;
9
+ enabled: boolean;
10
+ installationStatus: 'INSTALLED' | 'REMOVED';
11
+ bindingStatus: 'ACTIVE' | 'REVOKED';
12
+ upgradePolicy: 'OWNER' | 'AUTO' | 'PINNED';
13
+ pinnedVersionId: string | null;
14
+ updatedAt: string;
15
+ }
16
+ export declare function createSkillBindingApi(client: PlatformDataClient): {
17
+ list: (personal: boolean) => Promise<SkillBinding[]>;
18
+ update: (binding: SkillBinding, version?: string) => Promise<unknown>;
19
+ };
@@ -0,0 +1,31 @@
1
+ import type { SkillBinding } from './skill-bindings.js';
2
+ import type { SkillMarketApi } from '../../shared/skill-market-api.js';
3
+ export interface SkillVersionSelection {
4
+ skillId: string;
5
+ tenantId?: string | null;
6
+ }
7
+ export interface SkillVersionUpdate extends SkillVersionSelection {
8
+ expectedRevision: string;
9
+ versionId?: string;
10
+ }
11
+ export declare class SkillVersionError extends Error {
12
+ readonly code: string;
13
+ constructor(code: string, message: string);
14
+ }
15
+ export declare function selectSkillBinding(items: SkillBinding[], selection: SkillVersionSelection): SkillBinding;
16
+ export declare function updateSkillVersion(api: {
17
+ list(): Promise<SkillBinding[]>;
18
+ update(binding: SkillBinding, version?: string): Promise<unknown>;
19
+ }, market: Pick<SkillMarketApi, 'prepareForLocalTask'>, request: SkillVersionUpdate): Promise<{
20
+ changed: boolean;
21
+ versionChanged: boolean;
22
+ binding: SkillBinding;
23
+ before: import("../../shared/local-task-api.js").LocalTaskSkillReference | {
24
+ skillId: string;
25
+ versionId: string | null;
26
+ };
27
+ current: import("../../shared/local-task-api.js").LocalTaskSkillReference | {
28
+ skillId: string;
29
+ versionId: string | null;
30
+ };
31
+ }>;
@@ -0,0 +1,24 @@
1
+ import type { SecurityRuntimeToolId } from '../../shared/security-center-api.js';
2
+ export type BundledRuntimeToolLaunchMode = 'direct' | 'electron-node';
3
+ export interface BundledRuntimeToolDefinition {
4
+ id: SecurityRuntimeToolId;
5
+ executable: string;
6
+ aliases: string[];
7
+ launchMode: BundledRuntimeToolLaunchMode;
8
+ pathDirectories?: string[];
9
+ npxCli?: string;
10
+ }
11
+ interface ResolveBundledRuntimeToolsOptions {
12
+ resourcesPath: string;
13
+ developmentRoot?: string;
14
+ platform?: NodeJS.Platform;
15
+ }
16
+ /** Explicit project interpreters affect task tools only, never the private host. */
17
+ export declare function withProjectRuntimeTools(tools: BundledRuntimeToolDefinition[], project?: {
18
+ node?: string;
19
+ python?: string;
20
+ }): BundledRuntimeToolDefinition[];
21
+ export declare function resolveBundledRuntimeTools({ resourcesPath, developmentRoot, platform, }: ResolveBundledRuntimeToolsOptions): BundledRuntimeToolDefinition[];
22
+ /** Background plugin synchronization must use an installed helper, never task PATH. */
23
+ export declare function resolveBundledGitExecutable({ resourcesPath, developmentRoot, platform }: ResolveBundledRuntimeToolsOptions): string | undefined;
24
+ export {};
package/dist/events.js ADDED
@@ -0,0 +1 @@
1
+ var D="[REDACTED]",L="(?:密码|口令|密钥|令牌|私钥|凭据|验证码)",N=new RegExp(`(${L}\\s*["']?\\s*(?:[::=]|是(?!否)|为)\\s*)(?:"([^"]*)"|'([^']*)'|“([^”]*)”|‘([^’]*)’|([^\\s"'“”‘’,。;,;}]+))`,"gu");var j=["authorization","password","passwd","passphrase","token","api[-_]?key","secret","cookie","credentials?","private[-_]?key","pat"].join("|"),E=`(?:[a-z0-9]+[-_])*(?:${j})`,P=new RegExp(`(\\b${E}\\b["']?\\s*[:=]\\s*["']?)([^\\s"',};&,。;]+)`,"gi"),U=new RegExp(`([?&]${E}=)([^&#\\s]*)`,"gi");function S(s){return s.replace(/(\/codex\/)[a-f0-9]+(?=\/v1\b)/gi,"$1[REDACTED]").replace(/(\/model-usage\/)[a-f0-9]+/gi,"$1[REDACTED]").replace(/\b(authorization|proxy-authorization)\s*:\s*[^\r\n]+/gi,"$1: [REDACTED]").replace(/\b(set-cookie|cookie)\s*:\s*[^\r\n]+/gi,"$1: [REDACTED]").replace(/\b(bearer|basic)\s+[^\s"',}]+/gi,"$1 [REDACTED]").replace(/(https?:\/\/[^\s/:@]+:)[^\s/@]+(@)/gi,"$1[REDACTED]$2").replace(U,"$1[REDACTED]").replace(P,"$1[REDACTED]").replace(N,(d,c,m,i,t,h)=>{let w=m!==void 0?['"','"']:i!==void 0?["'","'"]:t!==void 0?["“","”"]:h!==void 0?["‘","’"]:["",""];return`${c}${w[0]}${D}${w[1]}`})}var b={read_file:["读取","Read"],write_file:["写入","Write"],append_file:["追加文件内容","Append to file"],edit_file:["修改文件","Edit file"],enterprise_knowledge_list:["查看企业知识库","List enterprise knowledge bases"],enterprise_knowledge_search:["搜索企业知识库","Search enterprise knowledge bases"],enterprise_knowledge_retrieve:["检索企业知识库","Search enterprise knowledge"],enterprise_knowledge_list_documents:["查看知识库文件","List knowledge documents"],enterprise_knowledge_get_document:["查看知识库文件详情","Inspect knowledge document"],enterprise_knowledge_search_document_chunks:["读取知识库正文片段","Read knowledge document excerpts"],enterprise_knowledge_get_document_download_url:["获取知识库文件下载地址","Get knowledge document download link"],git_status:["查看仓库状态","Check repository status"],git_list_checkouts:["查看仓库目录","List repository checkouts"],git_changes:["查看文件改动","List file changes"],git_diff:["查看文件差异","Inspect file diff"],git_commits:["查看提交记录","Read commit history"],git_stage:["暂存文件改动","Stage file changes"],git_unstage:["取消暂存文件改动","Unstage file changes"],git_discard:["丢弃文件改动","Discard file changes"],git_commit:["提交仓库改动","Commit repository changes"],git_fetch:["获取远端更新","Fetch remote changes"],git_push:["推送分支","Push branch"],git_create_branch:["创建分支","Create branch"],git_switch_branch:["切换分支","Switch branch"],git_review_changes:["审查代码改动","Review code changes"],git_generate_commit_message:["整理提交说明","Draft commit message"],git_generate_pull_request:["整理合并请求","Draft pull request"],git_hosted_connections:["查看代码托管连接","List repository connections"],git_http_credentials:["查看仓库凭据列表","List repository credentials"],git_preferences:["查看仓库偏好设置","Read repository preferences"],create_worktree:["创建工作树","Create worktree"],list_worktrees:["查看工作树","List worktrees"],office_document_get:["读取当前编辑文件","Read open document"],office_document_apply:["应用文件修改","Apply document edits"],glob_file:["查找文件","Find files"],grep_file:["搜索文件内容","Search file contents"],search_files:["查找文件","Find files"],list_directory:["查看文件夹","List directory"],directory_tree:["查看目录结构","View directory tree"],create_directory:["创建文件夹","Create directory"],get_file_info:["查看文件信息","Inspect file"],validate_html_file:["检查网页文件","Validate HTML file"],web_search:["搜索网络","Search the web"],search_web:["搜索网络","Search the web"],image_search:["搜索图片","Search images"],search_knowledge:["检索知识库","Search knowledge"],web_extractor:["读取网页","Read webpage"],fetch_url:["读取网页","Read webpage"],fetch:["读取网页","Read webpage"],project_asset_upload:["上传项目资产","Upload project asset"],load_skill:["读取技能说明","Read skill instructions"],tool_search:["查找可用工具","Find available tools"],run_foreground_process:["运行命令","Run command"],start_background_process:["启动后台任务","Start background process"],get_background_process:["查看后台任务输出","Read background process output"],list_background_processes:["查看后台任务","List background processes"],stop_background_process:["停止后台任务","Stop background process"],node_repl:["执行组合操作","Run automation"],task_create:["创建任务事项","Create task item"],task_update:["更新任务事项","Update task item"],task_get:["查看任务事项","Inspect task item"],task_list:["查看任务列表","List task items"],todo_write:["更新任务计划","Update task plan"],request_desktop_input:["向用户提问","Ask user"],team_delegate:["分派专家任务","Delegate expert task"],team_follow_up:["补充专家任务说明","Follow up with expert"],team_wait:["等待专家结果","Wait for experts"],team_close:["关闭专家会话","Close expert session"],team_present_artifacts:["登记团队产物","Register team artifacts"],memory_search:["检索记忆","Search memories"],memory_get:["读取记忆","Read memory"],task_history_search:["检索任务历史","Search task history"],task_history_get:["读取任务历史","Read task history"],skill_market_search:["搜索技能","Search skills"],skill_market_install:["安装平台技能","Install platform skill"],skill_local_install:["安装本地技能","Install local skill"],skill_cloud_upload:["上传个人技能","Upload personal skill"],expert_local_create:["创建专家","Create expert"],expert_local_publish:["发布专家","Publish expert"],mcp_registry_search:["搜索 MCP 服务","Search MCP services"],mcp_registry_install:["安装 MCP 服务","Install MCP service"],image_generate:["生成图片","Generate image"],image_edit:["编辑图片","Edit image"],video_generate:["生成视频","Generate video"],vision_understand:["理解图片","Analyze image"],git_revert:["还原文件改动","Revert file changes"],git_stage_hunk:["暂存差异块","Stage diff hunk"],git_unstage_hunk:["取消差异块暂存","Unstage diff hunk"],git_revert_hunk:["还原差异块","Revert diff hunk"],git_list_pull_requests:["查看合并请求","List pull requests"],git_create_pull_request:["创建合并请求","Create pull request"],git_pull_request_status:["查看合并请求创建状态","Check pull request creation"],git_configure_monitor:["配置合并请求监控","Configure pull request monitoring"],git_list_monitors:["查看合并请求监控","List pull request monitors"],get_worktree_creation_status:["查看工作树创建进度","Check worktree creation"],cancel_worktree_creation:["取消创建工作树","Cancel worktree creation"],list_worktree_environments:["查看工作树初始化环境","List worktree environments"],resume_worktree_creation:["继续创建工作树","Resume worktree creation"],archive_worktree:["归档工作树","Archive worktree"],restore_worktree:["恢复工作树","Restore worktree"],get_local_environment:["查看项目环境","Inspect project environment"],run_worktree_environment_action:["运行项目环境操作","Run project environment action"],get_environment_action_status:["查看环境操作进度","Check environment action"],stop_environment_action:["停止环境操作","Stop environment action"],get_worktree_operation_status:["查看工作树操作进度","Check worktree operation"]},y={ui_artifact:{create:["创建界面设计","Create UI design"],batch_edit:["修改界面设计","Edit UI design"],inspect:["查看界面设计","Inspect UI design"],compile:["生成界面页面","Build UI page"]},vector_artifact:{create:["创建矢量设计","Create vector design"],batch_edit:["修改矢量设计","Edit vector design"],inspect:["查看矢量设计","Inspect vector design"],compile:["导出矢量设计","Export vector design"]},research_artifact:{create:["创建研究记录","Create research record"],batch_edit:["更新研究记录","Update research record"],inspect:["查看研究记录","Inspect research record"],compile:["生成研究报告","Build research report"]},structured_calculation:{calculate:["计算与核对公式","Calculate and check formulas"],aggregate:["汇总数据","Aggregate data"]},data_analysis_pipeline:{transaction_analytics:["分析交易数据","Analyze transaction data"],python_pipeline:["执行数据分析流程","Run data analysis pipeline"]},web_resource:{discover:["查找网页资源","Find webpage resources"],download:["下载网页资源","Download web resource"]},automation_update:{list:["查看自动化列表","List automations"],view:["查看自动化任务","Inspect automation"],create:["创建自动化任务","Create automation"],update:["更新自动化任务","Update automation"],delete:["删除自动化任务","Delete automation"]},document_artifact:{create:["生成文档","Create document"],inspect:["查看文档结构","Inspect document"],read_text:["读取文档正文","Read document text"],read_tables:["读取文档表格","Read document tables"],read_images:["读取文档图片","Read document images"],edit_images:["修改文档图片","Edit document images"],read_structure:["查看文档结构","Inspect document structure"],replace_text:["修改文档文字","Edit document text"],edit_tables:["修改文档表格","Edit document tables"],edit_structure:["调整文档结构","Edit document structure"],verify:["检查文档","Check document"]},pdf_artifact:{create:["生成 PDF","Create PDF"],inspect:["查看 PDF 信息","Inspect PDF"],search_text:["搜索 PDF 正文","Search PDF text"],extract_text:["读取 PDF 正文","Read PDF text"],merge:["合并 PDF","Merge PDFs"],fill_form:["填写 PDF 表单","Fill PDF form"],verify:["检查 PDF","Check PDF"]},spreadsheet_artifact:{create:["生成表格","Create spreadsheet"],create_from_docx:["从文档生成表格","Create spreadsheet from document"],create_from_html:["从网页生成表格","Create spreadsheet from HTML"],create_financial_model:["生成财务模型","Create financial model"],append_sheets:["添加工作表","Add worksheets"],inspect:["查看表格结构","Inspect spreadsheet"],search:["搜索表格内容","Search spreadsheet"],read_range:["读取表格区域","Read spreadsheet range"],update:["修改表格","Edit spreadsheet"],recalculate:["计算表格公式","Recalculate spreadsheet"],verify:["检查表格","Check spreadsheet"]},presentation_artifact:{create:["生成演示文稿","Create presentation"],project_init:["创建演示文稿项目","Create presentation project"],project_write_storyboard:["编排演示文稿","Write presentation storyboard"],project_write_slide:["制作幻灯片","Create slide"],project_write_slides:["制作幻灯片","Create slides"],project_compile:["生成演示文稿","Build presentation"],project_inspect:["查看演示文稿项目","Inspect presentation project"],inspect:["查看演示文稿结构","Inspect presentation"],read_text:["读取演示文稿文字","Read presentation text"],verify:["检查演示文稿","Check presentation"]}},T={computer_read_output:["读取电脑操作结果","Read computer operation output"],browser_status:["检查浏览器连接","Check browser connection"],browser_list_windows:["查看浏览器窗口","List browser windows"],browser_create_window:["创建浏览器窗口","Create browser window"],browser_update_window:["调整浏览器窗口","Update browser window"],browser_close_window:["关闭浏览器窗口","Close browser window"],browser_list_tabs:["读取浏览器标签页","List browser tabs"],browser_open_tab:["打开网页","Open webpage"],browser_move_tab:["移动标签页","Move browser tab"],browser_navigate:["打开网页","Open webpage"],browser_close_tab:["关闭标签页","Close browser tab"],browser_select_tab:["切换标签页","Select browser tab"],browser_reload:["刷新网页","Reload webpage"],browser_go_back:["返回上一页","Go back"],browser_go_forward:["前往下一页","Go forward"],browser_snapshot:["读取页面结构","Read page structure"],browser_click:["点击页面元素","Click page element"],browser_hover:["移动到页面元素","Hover over page element"],browser_drag:["拖动页面元素","Drag page element"],browser_type_text:["填写网页内容","Fill webpage content"],browser_press_key:["向网页发送按键","Send keys to webpage"],browser_scroll:["滚动页面","Scroll webpage"],browser_select_option:["选择网页选项","Select webpage option"],browser_upload_file:["上传文件","Upload file"],browser_download_file:["下载文件","Download file"],browser_query_downloads:["查看下载记录","List downloads"],browser_query_history:["读取浏览历史","Read browser history"],browser_delete_history:["删除浏览历史","Delete browser history"],browser_list_tab_groups:["查看标签页分组","List tab groups"],browser_group_tabs:["创建标签页分组","Group browser tabs"],browser_ungroup_tabs:["取消标签页分组","Ungroup browser tabs"],browser_update_tab_group:["修改标签页分组","Update tab group"],browser_search_bookmarks:["搜索书签","Search bookmarks"],browser_create_bookmark:["创建书签","Create bookmark"],browser_update_bookmark:["修改书签","Update bookmark"],browser_remove_bookmark:["删除书签","Delete bookmark"],browser_handle_dialog:["处理网页对话框","Handle webpage dialog"],browser_cdp_command:["执行浏览器调试命令","Run browser debug command"],desktop_status:["检查桌面控制状态","Check desktop control"],desktop_list_apps:["读取桌面应用列表","List desktop applications"],desktop_list_windows:["读取桌面窗口列表","List desktop windows"],desktop_get_frontmost:["获取前台窗口","Read foreground window"],desktop_launch_app:["启动桌面应用","Launch desktop application"],desktop_focus_window:["切换桌面窗口","Focus desktop window"],desktop_observe:["观察桌面窗口","Observe desktop window"],desktop_search_ui:["搜索界面元素","Search UI elements"],desktop_expand_ui:["展开界面结构","Expand UI structure"],desktop_inspect_ui:["查看界面元素","Inspect UI element"],desktop_read_text:["读取界面文字","Read UI text"],desktop_wait_for:["等待界面状态","Wait for UI state"],desktop_act_batch:["批量操作桌面","Run desktop actions"],desktop_click:["点击桌面元素","Click desktop element"],desktop_move_mouse:["移动鼠标","Move pointer"],desktop_scroll:["滚动桌面窗口","Scroll desktop window"],desktop_drag:["拖动桌面元素","Drag desktop element"],desktop_type_text:["输入文字","Type text"],desktop_keypress:["发送按键","Send keys"]};function f(s){return s&&typeof s=="object"&&!Array.isArray(s)?s:{}}function a(s){return typeof s=="string"?s.trim():""}function F(s){return S(s.replace(/https?:\/\/[^\s<>"'“”]+/giu,d=>{try{let c=new URL(d);return c.origin+(c.pathname==="/"?"":c.pathname)}catch{return"[URL]"}})).replace(/[\u0000-\u001f\u007f\u202a-\u202e\u2066-\u2069]/g," ").replace(/\s+/g," ").trim()}function q(s){let d=a(s.name)||a(s.tool_name);if(d.startsWith("mcp__")){let i=d.split("__");return["aios_plugins","aios_system","aios_computer_use"].includes(i[1])?i.slice(2).join("__"):""}let c=a(s.server);if(c&&!["aios_plugins","aios_system","aios_computer_use"].includes(c))return"";let m=a(s.namespace);return m&&!["functions","office","enterprise_knowledge","repository","aios_computer_use"].includes(m)?"":d.replace(/^(?:functions|office|enterprise_knowledge|repository|aios_computer_use)\./,"")}function $(s,d="zh-CN",c=f(s.tool_display),m=i=>i){let i=f(s.input),t=c.external?"":q(s),h=d==="en-US",w=e=>F(m(e)),k=(e,o=100)=>{let _=Array.from(w(e));return _.length>o?_.slice(0,o).join("")+"…":_.join("")},r=(...e)=>e.map(o=>a(i[o])).find(Boolean)||"",p=e=>{let o=w(e).replace(/\\/g,"/"),_=o.split("/").filter(Boolean).at(-1)||o,A=Array.isArray(s.file_name_aliases)?s.file_name_aliases.map(f):[];return a(A.find(I=>a(I.source).toLowerCase()===_.toLowerCase())?.display)||_},l=()=>p(r("file_name","filename","path","file_path","filePath","file","outputPath")),n=(e,o="",_)=>({title:k(`${e[h?1:0]}${o?` ${k(o,72)}`:""}`),..._?{category:_}:{}}),u=e=>e?`“${k(e)}”`:"";if(t==="web_search"){let e=f(i.action);if(e.type==="open_page")return n(["读取网页","Read webpage"],a(e.url),"mcp");if(e.type==="find_in_page")return n(["搜索网页内容","Search webpage content"],[u(a(e.pattern)),a(e.url)].filter(Boolean).join(" · "),"mcp");if(e.type==="search"){let o=Array.isArray(e.queries)?e.queries.filter(_=>typeof _=="string").join("、"):"";return n(b.web_search,u(r("query")||a(e.query)||o),"mcp")}}if(["run_foreground_process","start_background_process","node_repl"].includes(t)){let e=w(r(t==="node_repl"?"title":"description"));if(e&&(h||/[\u3400-\u9fff]/.test(e)))return{title:k(e),category:"command"}}if(t==="document_workflow"){if(i.job_id)return n(["等待文档处理","Wait for document processing"],"","file");let e=f(i.checks);return n(e.layout?["检查文档排版","Check document layout"]:e.ocr?["识别文档文字","Recognize document text"]:i.action==="verify"?["检查文档","Check document"]:["分析文档","Analyze document"],l(),"file")}let C={document_replace_text:"replace_text",document_edit_structure:"edit_structure",document_edit_tables:"edit_tables",document_edit_images:"edit_images",document_verify:"verify",document_create_markdown:"create",document_create_html:"create",document_create_report:"create",document_create_blocks:"create"};if(C[t]||t==="document_read"){let e=C[t]||r("action"),o=y.document_artifact[e];return o?n(o,l(),"file"):void 0}let R=y[t]?.[r("action","mode")];if(R){let e=t==="web_resource"&&i.action==="discover"?r("pageUrl"):t==="automation_update"?r("name"):t==="data_analysis_pipeline"?p(r("datasetPath")):t==="research_artifact"?r("title")||p(r("markdownPath")):l(),o=t==="spreadsheet_artifact"&&i.action==="read_range"?r("sheetName"):"";return n(R,[e,o].filter(Boolean).join(" · "),"file")}if(t==="office_document_apply"){let e=f(f(i.edit).selection);return n(b[t],a(e.fileName)||l(),"file")}if(t==="write_files"&&Array.isArray(i.files)){let e=i.files.map(f).map(o=>p(a(o.path)||a(o.filename))).filter(Boolean);return n(["写入文件","Write files"],e.slice(0,3).join("、")+(e.length>3?` +${e.length-3}`:""),"file")}let v=b[t];if(v){let e="";return["web_search","search_web","image_search","search_knowledge","enterprise_knowledge_search","enterprise_knowledge_retrieve","enterprise_knowledge_list_documents"].includes(t)?e=u(r("query")):["web_extractor","fetch_url","fetch"].includes(t)?e=r("url"):["glob_file","grep_file","search_files"].includes(t)?e=u(r("pattern","query")):["git_create_branch","git_switch_branch"].includes(t)?e=r("name"):["git_diff","git_stage_hunk","git_unstage_hunk","git_revert_hunk"].includes(t)?e=l():["git_stage","git_unstage","git_revert","team_present_artifacts"].includes(t)&&Array.isArray(i.paths)?e=i.paths.filter(o=>typeof o=="string").slice(0,3).map(p).join("、"):t==="git_create_pull_request"?e=[r("source"),r("target")].filter(Boolean).join(" → "):t==="git_push"?e=[r("remote"),r("remoteBranch")||r("branch")].filter(Boolean).join("/"):t==="git_fetch"?e=r("remote"):["skill_market_search","mcp_registry_search"].includes(t)?e=u(r("keyword")):["memory_search","task_history_search","tool_search"].includes(t)?e=u(r("query")):["skill_local_install","skill_cloud_upload","expert_local_publish"].includes(t)?e=p(r("sourcePath")):t==="mcp_registry_install"?e=r("registryName"):t==="expert_local_create"?e=r("displayName","name"):["task_create","task_update"].includes(t)?e=r("subject"):t==="create_worktree"?e=r("name"):["image_generate","image_edit","video_generate"].includes(t)?e=p(r("output_name")):!t.startsWith("enterprise_knowledge_")&&!t.startsWith("git_")&&(e=l()),n(v,e,t.startsWith("git_")||t.includes("process")||t==="node_repl"?"command":t.includes("knowledge")||t.includes("web")?"mcp":void 0)}let g=t.replace(/^in_app_browser_/,"browser_");if(["browser_navigate","browser_open_tab","navigate_page","new_page","open_in_app_browser"].includes(g))return n(["打开网页","Open webpage"],r("url")||l(),"browser");if(["browser_upload_file","upload_file"].includes(g))return n(["上传文件","Upload file"],l(),"browser");if(t==="desktop_launch_app"&&r("applicationName","executableName","bundleId","appUserModelId"))return n(["启动应用","Launch application"],r("applicationName","bundleId","appUserModelId")||p(r("executableName")),"command");if(g==="browser_control_download"){let o={pause:["暂停下载","Pause download"],resume:["继续下载","Resume download"],cancel:["取消下载","Cancel download"],open:["打开下载文件","Open downloaded file"],show:["定位下载文件","Reveal downloaded file"],erase:["清除下载记录","Clear download record"],remove_file:["删除下载文件","Delete downloaded file"]}[r("operation")];return o?n(o,"","browser"):void 0}let x=T[g];if(x){let e=["browser_create_window","browser_create_bookmark","browser_update_bookmark","browser_delete_history"].includes(g)?r("url"):g==="browser_download_file"?l()||r("url"):g==="browser_search_bookmarks"?u(r("query")):t==="desktop_search_ui"?u(r("text")):"";return n(x,e,g.startsWith("browser_")?"browser":void 0)}if(c.operation||c.provider)return{title:k([a(c.operation),a(c.provider)].filter(Boolean).join(" · ")),category:"mcp"}}export{$ as toolActivityTitle};
package/dist/index.js ADDED
@@ -0,0 +1,55 @@
1
+ import{randomUUID as x}from"node:crypto";import{setTimeout as Me}from"node:timers/promises";import _t from"node:path";import{randomUUID as tt}from"node:crypto";var f=class extends Error{constructor(t,n,o){super(n,o);this.code=t;this.name="AiosSdkError"}};import Ot from"node:http";import{setTimeout as Pt}from"node:timers/promises";import N from"node:fs";import ze from"node:os";import G from"node:path";import{createHash as bt}from"node:crypto";var O=class extends Error{constructor(t,n,o=2,i){super(n,i);this.code=t;this.exitCode=o;this.details=i?.details}details};import{execFile as Rr,spawnSync as vt}from"node:child_process";import $e from"node:path";function Ee(r=process.env){let e=r.SystemRoot??r.SYSTEMROOT;if(!e||!$e.win32.isAbsolute(e))throw new Error("Windows SystemRoot 未配置为绝对路径。");return $e.win32.join(e,"System32","WindowsPowerShell","v1.0","powershell.exe")}function Ue(r){let e=String.raw`
2
+ $ErrorActionPreference = 'Stop'
3
+ $ProgressPreference = 'SilentlyContinue'
4
+ $env:PSModulePath = Join-Path $PSHOME 'Modules'
5
+ [Console]::InputEncoding = New-Object Text.UTF8Encoding
6
+ [Console]::OutputEncoding = New-Object Text.UTF8Encoding
7
+ try {
8
+ `+r+String.raw`
9
+ } catch {
10
+ [Console]::Error.WriteLine($_.Exception.ToString())
11
+ exit 1
12
+ }
13
+ `;return["-NoLogo","-NoProfile","-NonInteractive","-OutputFormat","Text","-EncodedCommand",Buffer.from(e,"utf16le").toString("base64")]}var Et=String.raw`
14
+ $spec = [Console]::In.ReadToEnd() | ConvertFrom-Json
15
+ try { $item = Get-Item -LiteralPath $spec.path -Force }
16
+ catch [Management.Automation.ItemNotFoundException] { exit 3 }
17
+ function Read-StorageAccessControl($entry, $sections) {
18
+ try { return $entry.GetAccessControl($sections) }
19
+ catch {
20
+ $cause = $_.Exception.GetBaseException()
21
+ if ($cause -is [IO.FileNotFoundException] -or $cause -is [IO.DirectoryNotFoundException]) { exit 3 }
22
+ throw
23
+ }
24
+ }
25
+ $attributes = $item.Attributes
26
+ if ([int]$attributes -eq -1) { exit 3 }
27
+ if ($attributes -band [IO.FileAttributes]::ReparsePoint) { throw 'Reparse points are not private storage' }
28
+ $sid = [Security.Principal.WindowsIdentity]::GetCurrent().User
29
+ $sections = [Security.AccessControl.AccessControlSections]'Owner,Access'
30
+ $acl = Read-StorageAccessControl $item $sections
31
+ if ($acl.GetOwner([Security.Principal.SecurityIdentifier]).Value -ne $sid.Value) { throw 'Storage owner mismatch' }
32
+ if ($spec.secure) {
33
+ if (!$item.PSIsContainer) { throw 'Private root is not a directory' }
34
+ $inherit = [Security.AccessControl.InheritanceFlags]'ContainerInherit,ObjectInherit'
35
+ $rules = @($acl.GetAccessRules($true, $true, [Security.Principal.SecurityIdentifier]))
36
+ $private = ($acl.AreAccessRulesProtected -and $rules.Count -eq 1 -and
37
+ !$rules[0].IsInherited -and $rules[0].IdentityReference.Value -eq $sid.Value -and
38
+ $rules[0].AccessControlType -eq 'Allow' -and $rules[0].FileSystemRights -eq 'FullControl' -and
39
+ $rules[0].InheritanceFlags -eq $inherit -and $rules[0].PropagationFlags -eq 'None')
40
+ if (!$private) {
41
+ $acl = New-Object Security.AccessControl.DirectorySecurity
42
+ $acl.SetAccessRuleProtection($true, $false)
43
+ $rule = New-Object Security.AccessControl.FileSystemAccessRule($sid, 'FullControl', $inherit, 'None', 'Allow')
44
+ $acl.AddAccessRule($rule)
45
+ # Set only the DACL; repeating it would propagate across all installed resources.
46
+ $item.SetAccessControl($acl)
47
+ $acl = Read-StorageAccessControl $item $sections
48
+ }
49
+ }
50
+ foreach ($rule in $acl.GetAccessRules($true, $true, [Security.Principal.SecurityIdentifier])) {
51
+ if ($rule.AccessControlType -eq 'Allow' -and $rule.IdentityReference.Value -ne $sid.Value -and $rule.IdentityReference.Value -ne 'S-1-5-18') { throw 'Storage is accessible by another principal' }
52
+ }
53
+ `;function ke(r,e){let t=vt(Ee(),Ue(Et),{input:JSON.stringify({path:r,secure:e}),windowsHide:!0,timeout:15e3,encoding:"utf8",maxBuffer:65536});kt(r,t.status,t.error,t.stderr)}function kt(r,e,t,n){if(e===3)throw Object.assign(new Error(`ENOENT: private storage path no longer exists, '${r}'`),{code:"ENOENT",path:r});if(t||e!==0)throw new O("UNSAFE_DATA_DIRECTORY",`Windows 私有存储访问控制校验失败:${t?.message??n.trim()}`,1)}import At from"node:fs";function xt(r,e="/proc"){let t;try{t=At.readFileSync(`${e}/${r}/stat`,"utf8")}catch(o){if(o.code==="ENOENT")return;throw o}let n=t.slice(t.lastIndexOf(")")+2).trim().split(/\s+/);return{pid:r,parentPid:Number(n[1]),exited:n[0]==="Z"||n[0]==="X"}}function H(r){if(process.platform==="linux"){let e=xt(r);if(!e||e.exited)return!1}try{return process.kill(r,0),!0}catch(e){let t=e.code;if(t==="ESRCH")return!1;if(t==="EPERM")return!0;throw e}}function ce(r){N.mkdirSync(r,{recursive:!0,mode:448});let e=N.lstatSync(r);if(!e.isDirectory()||e.isSymbolicLink()||process.getuid&&e.uid!==process.getuid())throw new O("UNSAFE_DATA_DIRECTORY","CLI 私有目录的类型或所有者不正确。",1);process.platform==="win32"?ke(r,!0):N.chmodSync(r,448)}function Ae(r){let e=bt("sha256").update(r).digest("hex").slice(0,32),t=G.join(process.platform==="win32"?ze.tmpdir():"/tmp",`aios-cli-${process.getuid?.()??ze.userInfo().username}`);return{lock:G.join(r,"daemon.lock"),mutex:G.join(r,"daemon-owner.sqlite"),metadata:G.join(r,"daemon.json"),socketDirectory:t,socket:process.platform==="win32"?`\\\\.\\pipe\\aios-cli-${e}`:G.join(t,`${e}.sock`)}}function Tt(r){let e=N.lstatSync(r,{throwIfNoEntry:!1});if(e&&(!e.isFile()||e.isSymbolicLink()))throw new O("UNSAFE_DAEMON_METADATA","服务所有权文件的类型、权限或所有者不正确。",1);return e}function xe(r){let e=Tt(r);try{process.platform==="win32"&&e&&ke(r,!1)}catch(t){if(t.code==="ENOENT")return;throw t}return Ct(r)}function Ct(r){let e;try{e=N.openSync(r,N.constants.O_RDONLY|N.constants.O_NOFOLLOW)}catch(t){let n=t.code;if(n==="ENOENT")return;throw n==="ELOOP"?new O("UNSAFE_DAEMON_METADATA","服务所有权文件的类型、权限或所有者不正确。",1):t}try{let t=N.fstatSync(e);if(!t.isFile()||process.getuid&&t.uid!==process.getuid()||process.platform!=="win32"&&(t.mode&63)!==0)throw new O("UNSAFE_DAEMON_METADATA","服务所有权文件的类型、权限或所有者不正确。",1);try{return JSON.parse(N.readFileSync(e,"utf8"))}catch(n){throw n instanceof SyntaxError?new O("INVALID_DAEMON_METADATA","服务所有权记录损坏,原文件已保留。",1):n}}finally{N.closeSync(e)}}var Rt=1,qr=8*1024*1024;function be(r){if(!r||typeof r!="object")return!1;let e=r;return e.protocol===Rt&&Number.isSafeInteger(e.pid)&&Number(e.pid)>0&&(e.installationId===void 0||typeof e.installationId=="string")&&["instanceId","version","token","socket","root","startedAt"].every(t=>typeof e[t]=="string")}function Be(r){let e=Ae(r),t=xe(e.metadata);if(!be(t)||t.root!==r||t.socket!==e.socket||!H(t.pid))throw new f("CLI_NOT_RUNNING","请先启动指定数据目录的 CLI 后台服务。");if("sdkProtocol"in t)throw new f("RUNTIME_INCOMPATIBLE","该数据目录属于精简运行时,请使用 createClient。");return t}function F(r){let e=Ae(r),t=xe(e.metadata);if(t!==void 0){if(!be(t)||t.root!==r||t.socket!==e.socket||!("sdkProtocol"in t)||t.sdkProtocol!==1)throw new f("RUNTIME_INCOMPATIBLE","本机服务不支持当前 SDK 协议,或其归属记录不一致。");return H(t.pid)?t:void 0}}async function He(r,e){for(;;){e.throwIfAborted();let t=F(r);if(t)return t;await Pt(100,void 0,{signal:e})}}function de(r,e,t,n,o,i,s=t==="runtime.drain"?0:12e4){let a=JSON.stringify({id:o,clientId:e,method:t,params:n});return Buffer.byteLength(a)>8*1024*1024?Promise.reject(new f("REQUEST_TOO_LARGE","SDK 请求超过 8 MiB。")):new Promise((c,u)=>{let d=l=>u(i?.aborted?i.reason:new f("OUTCOME_UNKNOWN",`请求 ${o} 的结果未知,请使用原命令 ID 查询回执。`,{cause:l})),m=Ot.request({socketPath:r.socket,path:"/sdk",method:"POST",signal:i,headers:{authorization:`Bearer ${r.token}`,"content-type":"application/json","content-length":Buffer.byteLength(a),"x-aios-protocol":"1","x-aios-instance":r.instanceId}},l=>{let y=[],g=0;l.on("data",p=>{g+=p.length,g>16777216?l.destroy(new Error("SDK 响应超过 16 MiB,请分页读取。")):y.push(p)}),l.once("error",d),l.once("end",()=>{try{if(l.statusCode===404)throw new f("SDK_UNSUPPORTED","此 CLI 版本未提供 SDK 接口,请使用包含 SDK 接口的版本。");let p=JSON.parse(Buffer.concat(y).toString("utf8"));if(p.id!==o||typeof p.ok!="boolean")throw new f("INVALID_RESPONSE","SDK 响应与请求不匹配。");if(!p.ok)throw new f(p.error?.code??"RUNTIME_ERROR",p.error?.message??"运行时返回未知错误。");c(p.value)}catch(p){u(p)}})});s>0&&m.setTimeout(s,()=>m.destroy(new Error("SDK 请求等待超时。"))),m.once("error",d),m.end(a)})}import V from"node:path";import{createHash as Nt}from"node:crypto";function Te(r){let e=new URL(r);if(!["http:","https:"].includes(e.protocol)||e.username||e.password||e.search||e.hash)throw new Error("平台基地址无效。");return e.toString().replace(/\/+$/,"")}function L(r){let e=r.mode==="platform"?Te(r.platformBaseUrl):null,t=[r.mode,r.appId,r.userScope,e];if(r.mode==="platform"&&r.authentication){let{userId:o,tenantId:i,workspaceId:s}=r.authentication.principal;t.push(JSON.stringify(["managed",o,i,s]))}let n=Nt("sha256").update(JSON.stringify(t)).digest("hex");return V.join(V.resolve(r.runtime.dataDirectory),"applications",n)}function Fe(r){let e=L(r),t=V.basename(e),n=(o,i)=>o?V.join(V.resolve(o),"applications",t,i):V.join(e,i);return{workspaces:n(r.runtime.workspaceDirectory,"workspaces"),cache:n(r.runtime.cacheDirectory,"cache"),temporary:n(r.runtime.temporaryDirectory,"tmp")}}import Ce from"node:path";function Ve(r){for(let[e,t]of Object.entries({appId:r.appId,userScope:r.userScope}))if(typeof t!="string"||!t.trim()||t.length>256||/[\u0000-\u001f]/u.test(t))throw new Error(`独立运行身份 ${e} 无效。`);if(r.mode!=="standalone")throw new Error("独立运行身份模式不匹配。");return{mode:"standalone",appId:r.appId,userScope:r.userScope}}function A(r,e){return Object.assign(new Error(e),{code:r})}function qe(r,e){if(!r||r.kind!=="managed")throw new Error("托管身份配置无效。");let t=r.principal;if(!t||typeof t.userId!="string"||!t.userId.trim()||![t.tenantId,t.workspaceId].every(o=>o===null||typeof o=="string"&&o.trim()))throw new Error("托管身份必须明确指定用户、租户和工作区;无租户或工作区时使用 null。");let n=r.allowedOrigins??[];if(!Array.isArray(n)||n.some(o=>{let i=new URL(o);return!["http:","https:"].includes(i.protocol)||i.origin!==o}))throw new Error("凭证目标必须是 HTTP(S) origin,不能包含路径或认证信息。");return new URL(e),{kind:"managed",principal:{userId:t.userId,tenantId:t.tenantId,workspaceId:t.workspaceId},allowedOrigins:[...new Set(n)]}}function Je(r,e,t,n=Date.now()){if(!r||typeof r.accessToken!="string"||!r.accessToken.trim())throw new Error("托管凭证缺少 accessToken。");let o=r.session;if(!o||o.user?.id!==e.userId||typeof o.platformBaseUrl!="string"||o.platformBaseUrl.replace(/\/+$/,"")!==t.replace(/\/+$/,""))throw A("MANAGED_IDENTITY_MISMATCH","托管凭证的平台或用户与绑定身份不一致。");let i=r.accessToken.split(".");if(i.length!==3)throw new Error("平台托管凭证必须是 JWT。");let s=JSON.parse(Buffer.from(i[1],"base64url").toString("utf8"));if(!s||typeof s!="object"||Array.isArray(s))throw new Error("平台凭证的 JWT 内容无效。");let a=(...I)=>{let U=I.map(k=>s[k]).find(k=>typeof k=="string"&&k.trim());return typeof U=="string"?U:null},c=a("sub"),u=a("tenantId","tenant_id"),d=a("workspaceId","workspace_id")??o.context?.currentWorkspaceId??null;if(c!==e.userId||u!==e.tenantId||d!==e.workspaceId||(o.context?.currentTenantId??null)!==e.tenantId||(o.context?.currentWorkspaceId??null)!==e.workspaceId)throw A("MANAGED_IDENTITY_MISMATCH","托管凭证续期不得改变用户、租户或工作区。");let m=Date.parse(o.accessTokenExpiresAt);if(!Number.isFinite(m)||m<=n||typeof s.exp!="number"||!Number.isFinite(s.exp)||s.exp*1e3<=n)throw A("MANAGED_CREDENTIAL_EXPIRED","应用返回的托管凭证已经过期。");if(typeof o.user.username!="string"||typeof o.user.displayName!="string"||!Array.isArray(o.user.roles)||!o.user.roles.every(I=>typeof I=="string")||!Array.isArray(o.tenants))throw new Error("托管凭证的用户资料格式无效。");let{id:l,username:y,displayName:g,email:p,phone:S,avatarUrl:v,tenantId:h,roles:w}=o.user,_=o.tenants.map(I=>{if(!I||typeof I.id!="string"||typeof I.name!="string"||typeof I.displayName!="string")throw new Error("托管凭证的租户资料格式无效。");return{id:I.id,name:I.name,displayName:I.displayName,status:I.status}});return{credential:{accessToken:r.accessToken,session:{user:{id:l,username:y,displayName:g,email:p,phone:S,avatarUrl:v,tenantId:h,roles:[...w]},tenants:_,context:{currentTenantId:e.tenantId,currentWorkspaceId:e.workspaceId,personalMode:o.context?.personalMode,contextVersion:o.context?.contextVersion},platformBaseUrl:t,authenticatedAt:o.authenticatedAt,accessTokenExpiresAt:o.accessTokenExpiresAt}},expiresAt:Math.min(m,s.exp*1e3),sessionId:a("sessionId","sid")}}function Ke(r){if(r!==void 0){if(!r||typeof r!="object"||Array.isArray(r)||Object.keys(r).some(e=>!["startupTimeoutMs","rpcTimeoutMs","methodTimeoutMs","shutdownTimeoutMs"].includes(e)))throw new Error("通信等待配置无效。");for(let e of["startupTimeoutMs","rpcTimeoutMs","shutdownTimeoutMs"]){let t=r[e];if(t!==void 0&&(!Number.isSafeInteger(t)||t<(e==="rpcTimeoutMs"?0:1)||t>2147483647))throw new Error(`${e} 必须是有效毫秒数。`)}if(r.methodTimeoutMs!==void 0){if(!r.methodTimeoutMs||typeof r.methodTimeoutMs!="object"||Array.isArray(r.methodTimeoutMs))throw new Error("方法等待配置无效。");for(let[e,t]of Object.entries(r.methodTimeoutMs))if(!/^[a-zA-Z][a-zA-Z0-9.]+$/.test(e)||!Number.isSafeInteger(t)||t<0||t>2147483647)throw new Error("方法等待配置无效。")}}}function Ge(r,e){return e?.methodTimeoutMs?.[r]??(r==="runtime.drain"?0:e?.rpcTimeoutMs??12e4)}function Xe(r){if(!r||typeof r!="object"||Array.isArray(r)||Object.entries(r).some(([e,t])=>!["temperature","topP","maxOutputTokens","responseFormat"].includes(e)||typeof t!="boolean"))throw new Error("模型生成能力声明无效。")}function We(r){if(r===void 0)return;if(!r||typeof r!="object"||Array.isArray(r)||Object.keys(r).some(t=>!["storage","extraction"].includes(t))||r.storage!==void 0&&!["local","external"].includes(r.storage))throw new Error("记忆配置无效。");let e=r.extraction;if(e!==void 0&&(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).some(t=>!["enabled","idleMs","model","instructions","timeoutMs"].includes(t))||e.enabled!==void 0&&typeof e.enabled!="boolean"||e.idleMs!==void 0&&(!Number.isSafeInteger(e.idleMs)||e.idleMs<0||e.idleMs>2147483647)||e.timeoutMs!==void 0&&(!Number.isSafeInteger(e.timeoutMs)||e.timeoutMs<1||e.timeoutMs>2147483647)||e.model!==void 0&&(typeof e.model!="string"||!e.model.trim())||e.instructions!==void 0&&(typeof e.instructions!="string"||e.instructions.length>32e3)))throw new Error("记忆提取策略无效。")}function X(r){if(!r||!["platform","standalone"].includes(r.mode))throw new Error("必须明确选择 platform 或 standalone 模式。");if(Ve({mode:"standalone",appId:r.appId,userScope:r.userScope}),Ke(r.communication),We(r.memory),r.authorization!==void 0&&(!r.authorization||typeof r.authorization.required!="boolean"||Object.keys(r.authorization).some(e=>e!=="required")))throw new Error("会话授权配置无效。");if(r.generationCapabilities!==void 0){if(!r.generationCapabilities||typeof r.generationCapabilities!="object"||Array.isArray(r.generationCapabilities))throw new Error("模型能力目录无效。");Object.values(r.generationCapabilities).forEach(Xe)}if(!r.runtime||typeof r.runtime.directory!="string"||!r.runtime.directory.trim()||typeof r.runtime.dataDirectory!="string"||!r.runtime.dataDirectory.trim())throw new Error("运行时目录和数据目录不能为空。");if(r.mode==="standalone"&&"platformBaseUrl"in r)throw new Error("独立模式不得配置平台基地址。");if(r.mode==="platform"&&"models"in r)throw new Error("平台模式不得配置独立模式模型列表。");if(r.mode==="standalone"&&"authentication"in r)throw new Error("独立模式不使用平台托管凭证。");if(r.runtime.tools&&Object.keys(r.runtime.tools).some(e=>!["node","python","git","bash","npm"].includes(e)))throw new Error("工具路径配置包含未知工具。");if(r.appName!==void 0&&(typeof r.appName!="string"||!r.appName.trim()||r.appName.length>128))throw new Error("应用名称无效。");for(let e of["workspaceDirectory","cacheDirectory","temporaryDirectory"]){let t=r.runtime[e];if(t!==void 0&&(typeof t!="string"||!t.trim()||!Ce.isAbsolute(t)))throw new Error(`${e} 必须是绝对目录路径。`)}return{...structuredClone(r),runtime:{...structuredClone(r.runtime),directory:Ce.resolve(r.runtime.directory),dataDirectory:Ce.resolve(r.runtime.dataDirectory)},...r.mode==="platform"?{platformBaseUrl:Te(r.platformBaseUrl),...r.authentication!==void 0?{authentication:qe(r.authentication,r.platformBaseUrl)}:{}}:{}}}import{setTimeout as Lt}from"node:timers/promises";import D from"node:fs";import P from"node:path";import{createHash as Qe,verify as Mt}from"node:crypto";var Ye=`-----BEGIN PUBLIC KEY-----
54
+ MCowBQYDK2VwAyEAH1NI5TKlc89zXnULhsNPzgN4M1ki3w5spKY7BH8VsZw=
55
+ -----END PUBLIC KEY-----`;var le={version:"0.0.1",protocol:1,dataFormat:1,profile:"light"};var M=r=>new f("RUNTIME_INTEGRITY_FAILED",r);function Ze(r,e){let t=P.relative(r,e);return t!==".."&&!t.startsWith(`..${P.sep}`)&&!P.isAbsolute(t)}async function b(r,e=Ye){let t=D.realpathSync(r),n=P.join(t,"aios-sdk-runtime.json"),o=D.readFileSync(n),i=JSON.parse(o.toString("utf8"));if(i.schemaVersion!==1||i.version!==le.version||i.protocol!==le.protocol||i.dataFormat!==le.dataFormat||i.platform!==process.platform||i.arch!==process.arch||i.profile!=="light")throw new f("RUNTIME_INCOMPATIBLE","精简运行时版本、协议、数据格式、系统或架构不兼容。");let s=JSON.parse(D.readFileSync(P.join(t,"signature.json"),"utf8"));if(s.algorithm!=="ed25519"||typeof s.signature!="string"||s.publicKey?.trim()!==e.trim()||!Mt(null,o,e,Buffer.from(s.signature,"base64")))throw M("运行时清单签名与可信发布公钥不匹配。");if(!i.files||typeof i.files!="object"||Array.isArray(i.files))throw M("运行时缺少文件清单。");let a=i.files,c=["host.mjs","js-hook-runner.js","memory-worker.js","memory-schema-v1.sql","task-event-reader-worker.js","task-storage-recovery-worker.js","keyring.node","resources/runtime/desktop-agent-runtime/index.js",`resources/runtime/codex/${process.platform}-${process.arch}/bin/${process.platform==="win32"?"codex.exe":"codex"}`];for(let p of c)if(!Object.hasOwn(a,p))throw M(`运行时缺少必需资源:${p}`);let u=new Map,d=p=>{for(let S of D.readdirSync(p)){let v=P.join(p,S),h=P.relative(t,v).split(P.sep).join("/");if(["aios-sdk-runtime.json","signature.json"].includes(h))continue;let w=D.lstatSync(v);w.isDirectory()&&!w.isSymbolicLink()?d(v):u.set(h,w)}};if(d(t),u.size!==Object.keys(a).length)throw M("运行时文件数量与清单不一致。");let m=[];for(let[p,S]of Object.entries(a)){let v=P.resolve(t,p),h=u.get(p);if(!p||p.includes("\\")||P.posix.normalize(p)!==p||!Ze(t,v)||!h)throw M(`运行时文件路径或归属不匹配:${p}`);if(S.type==="link"){if(!h.isSymbolicLink()||typeof S.link!="string"||P.isAbsolute(S.link)||D.readlinkSync(v)!==S.link||!Ze(t,D.realpathSync(v)))throw M(`运行时链接不匹配:${p}`)}else if(S.type==="file"){if(!h.isFile()||h.isSymbolicLink()||h.size!==S.size||!/^[a-f0-9]{64}$/.test(S.sha256)||process.platform!=="win32"&&(h.mode&73)!==(S.mode&73))throw M(`运行时文件属性不匹配:${p}`);m.push({file:v,name:p,entry:S})}else throw M(`运行时文件类型无效:${p}`)}let l=0,g=(await Promise.allSettled(Array.from({length:Math.min(8,m.length)},async()=>{for(;l<m.length;){let{file:p,name:S,entry:v}=m[l++],h=Qe("sha256");for await(let w of D.createReadStream(p))h.update(w);if(h.digest("hex")!==v.sha256)throw M(`运行时文件摘要不匹配:${S}`)}}))).find(p=>p.status==="rejected");if(g)throw g.reason;return{version:i.version,protocol:i.protocol,dataFormat:i.dataFormat,platform:process.platform,arch:process.arch,profile:"light",manifestSha256:Qe("sha256").update(o).digest("hex")}}import Re from"node:fs";import et from"node:path";import{spawn as Dt}from"node:child_process";function ue(r){let{options:e}=r,t=L(e);ce(t);let n=Fe(e).temporary;Re.mkdirSync(n,{recursive:!0});let o=Re.openSync(et.join(t,"sdk-host.log"),"a",384),i=(()=>{try{return Dt(e.runtime.nodeExecutable??process.execPath,[et.join(e.runtime.directory,"host.mjs")],{detached:!r.managed,windowsHide:!0,stdio:["ignore",o,o,"ipc"],env:{...process.env,TEMP:n,TMP:n,TMPDIR:n}})}finally{Re.closeSync(o)}})(),s=new Promise(c=>{i.once("exit",(u,d)=>c({code:u,signal:d})),i.once("error",()=>{i.pid||c({code:null,signal:null})})}),a=new Promise((c,u)=>{let d=setTimeout(()=>y(new f("RUNTIME_START_TIMEOUT","SDK 服务未在指定时间内完成启动,请检查宿主日志。")),e.communication?.startupTimeoutMs??12e4),m=(g,p)=>y(new f("RUNTIME_START_FAILED",`SDK 服务启动进程退出(${g??p})。`)),l=g=>{if(!g||g.type!=="ready"){y(new f("RUNTIME_INCOMPATIBLE","宿主未返回当前 SDK 启动协议,请使用配套运行包。"));return}g.ok?y(void 0,g.value):y(new f(g.error.code,g.error.message))};function y(g,p){clearTimeout(d),i.removeListener("error",y),i.removeListener("exit",m),i.removeListener("message",l),g?u(g):c(p)}i.once("error",y),i.once("exit",m),i.on("message",l),i.send(r,g=>{g&&y(g)})});return{child:i,ready:a,exited:s}}var W=class r{constructor(e,t,n){this.metadata=e;this.ownerExit=t;this.communication=n}eventWaitMs=0;closed=!1;clientId=tt();static async start(e,t){let n=X(e),o=_t.resolve(n.runtime.directory),i=await b(o,n.runtime.trustedPublicKey),s=L(n),a=F(s);if(!a){let{child:c,ready:u}=ue({options:n,verifiedPackage:i});try{a=await u}catch(d){if(!(d instanceof f)||d.code!=="DAEMON_ALREADY_OWNED")throw d;a=await He(s,AbortSignal.timeout(n.communication?.startupTimeoutMs??12e4))}finally{c.connected&&c.disconnect(),c.unref()}}return r.attach(n,a,i,t)}static async attach(e,t,n,o,i){if(t.version!==n.version||t.manifestSha256!==n.manifestSha256)throw new f("RUNTIME_INCOMPATIBLE","已运行的服务与指定运行包不一致,请由宿主所有者关闭后使用同一运行包重新启动。");let s=new r(t,i,e.communication),a=await s.call("attach",{options:e,pid:process.pid,manifestSha256:n.manifestSha256});if(s.eventWaitMs=a.eventWaitMs??0,o)try{await s.call("auth.bindProvider",o)}catch(c){throw await s.stop(),c}return s}call(e,t={},n=tt(),o){return this.closed?Promise.reject(new f("RUNTIME_CLOSED","SDK 客户端连接已关闭。")):this.ownerExit?.aborted?Promise.reject(this.ownerExit.reason):de(this.metadata,this.clientId,e,t,n,o,Ge(e,this.communication))}async stop(){if(!this.closed){if(this.ownerExit?.aborted){this.closed=!0;return}await this.call("detach"),this.closed=!0}}async shutdown(){await this.call("shutdown"),this.closed=!0;let e=AbortSignal.timeout(this.communication?.shutdownTimeoutMs??12e4);for(;F(this.metadata.root)?.instanceId===this.metadata.instanceId||H(this.metadata.pid);)await Lt(100,void 0,{signal:e})}};import $t from"node:path";import{randomUUID as rt}from"node:crypto";var pe=class r{constructor(e){this.metadata=e}closed=!1;clientId=rt();static async connect(e){let t=new r(Be($t.resolve(e.dataDirectory)));return await t.call("attach",{sdkProtocol:1,options:e,pid:process.pid}),t}call(e,t={},n=rt(),o){return this.closed?Promise.reject(new f("RUNTIME_CLOSED","SDK 客户端连接已关闭。")):de(this.metadata,this.clientId,e,t,n,o)}async stop(){this.closed||(await this.call("detach"),this.closed=!0)}async shutdown(){throw new f("SHARED_RUNTIME","连接已有 CLI 时,请通过 CLI 管理后台服务。")}};import Bt from"node:http";import{randomBytes as Ht,randomUUID as Ft,timingSafeEqual as Vt}from"node:crypto";import{Ajv as qt}from"ajv";import{Ajv2020 as Jt}from"ajv/dist/2020.js";function Ut(r){let e={...r,kind:"aios-tool-result"};return Oe(e),e}function q(r,e){if(typeof r!="string"||!r.trim())throw new Error(`工具返回的 ${e} 必须是非空字符串。`)}function Oe(r){if(!r||typeof r!="object"||!("kind"in r)||r.kind!=="aios-tool-result")return{content:[{type:"text",text:typeof r=="string"?r:JSON.stringify(r??null)}],isError:!1};let e=r;if(!Array.isArray(e.content))throw new Error("工具返回的 content 必须是数组。");let t=e.content.map(n=>{if(!n||typeof n!="object")throw new Error("工具返回的内容格式无效。");if(n.type==="text"){if(typeof n.text!="string")throw new Error("工具返回的 text 必须是字符串。");return{type:"text",text:n.text}}if(n.type==="image")return q(n.data,"image.data"),q(n.mimeType,"image.mimeType"),{type:"image",data:n.data,mimeType:n.mimeType};if(n.type==="resource"){let o=n.resource;q(o?.uri,"resource.uri"),new URL(o.uri),o.mimeType!==void 0&&q(o.mimeType,"resource.mimeType");let i="text"in o,s="blob"in o;if(i===s||i&&typeof o.text!="string"||s&&typeof o.blob!="string")throw new Error("工具文件内容必须且只能包含 text 或 blob。");return{type:"resource",resource:{uri:o.uri,...o.mimeType?{mimeType:o.mimeType}:{},...i?{text:o.text}:{blob:o.blob}}}}throw new Error("不支持的工具内容类型。")});if(e.data!==void 0){if(!e.data||typeof e.data!="object"||Array.isArray(e.data))throw new Error("工具返回的 data 必须是 JSON 对象。");t.push({type:"text",text:JSON.stringify(e.data)})}return e.error!==void 0&&(q(e.error.code,"error.code"),q(e.error.message,"error.message"),t.push({type:"text",text:JSON.stringify({error:e.error})})),{content:t,isError:e.error!==void 0}}var nt=["projectId","collaborationProjectId","assistantId","platformSessionId","platformTurnId","platformTaskId","platformRunId","traceId"];function Y(r){if(!r||typeof r!="object"||Array.isArray(r))throw new Error("执行上下文必须为对象。");return r}function $(r){if(typeof r!="string"||!r.trim()||r.length>512||/[\x00-\x1f\x7f]/.test(r))throw new Error("执行上下文字段必须为有效字符串,最多 512 字符。");return r}function ot(r){let e=Y(r);if(Object.keys(e).some(t=>!["userId","tenantId","name"].includes(t)))throw new Error("执行主体包含未知字段。");return{userId:$(e.userId),tenantId:e.tenantId===null?null:$(e.tenantId),...e.name===void 0?{}:{name:$(e.name)}}}function zt(r){let e=Y(r);if(Object.keys(e).some(n=>!["actor","owner","workspaceId","usageScene","metadata",...nt].includes(n)))throw new Error("执行上下文包含未知字段。");if(!["personal","greeting","task","collaboration","coding"].includes(String(e.usageScene)))throw new Error("执行用量场景无效。");let t={actor:ot(e.actor),owner:ot(e.owner),workspaceId:e.workspaceId===null?null:$(e.workspaceId),usageScene:e.usageScene};for(let n of nt)e[n]!==void 0&&(t[n]=$(e[n]));if(e.metadata!==void 0){let n=Y(e.metadata);if(Object.keys(n).length>16||JSON.stringify(n).length>8192)throw new Error("业务扩展元数据超过限制。");for(let[o,i]of Object.entries(n)){if(!/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/.test(o))throw new Error("业务元数据命名空间无效。");let s=Y(i);if(Object.keys(s).length>32)throw new Error("业务元数据字段过多。");for(let[a,c]of Object.entries(s))if(!/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/.test(a)||!(c===null||typeof c=="boolean"||typeof c=="number"&&Number.isFinite(c)||typeof c=="string"&&c.length<=1024&&!/[\x00-\x1f\x7f]/.test(c)))throw new Error("业务元数据字段无效。")}t.metadata=structuredClone(n)}return t}function me(r){let e=Y(r);if(Object.keys(e).some(t=>!["sessionId","runId","context"].includes(t)))throw new Error("执行绑定包含未知字段。");return{sessionId:$(e.sessionId),runId:$(e.runId),...e.context===void 0?{}:{context:zt(e.context)}}}async function it(r,e,t){let n=new Map,o=new qt({strict:!0,strictTypes:!1,allErrors:!0,validateFormats:!1}),i=new Jt({strict:!0,strictTypes:!1,allErrors:!0,validateFormats:!1}),s=new Map;for(let h of e){if(!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(h.name)||n.has(h.name))throw new Error(`业务工具名称无效或重复:${h.name}`);if(h.inputSchema.type!=="object")throw new Error(`业务工具 ${h.name} 的输入 schema 必须为 object。`);n.set(h.name,h);let w=h.inputSchema.$schema==="http://json-schema.org/draft-07/schema#"?o:i;s.set(h.name,w.compile(h.inputSchema))}let a=Ht(32).toString("hex"),c=new Map,u=new Set,d=!1,m,l,y=new Promise(h=>{l=h}),g=()=>m??=(async()=>{for(let h of c.values())h.abort(new Error("应用工具提供者已关闭。"));S.closeAllConnections(),await new Promise((h,w)=>S.close(_=>_?w(_):h())),l()})(),p=()=>{d&&u.size===0&&c.size===0&&g()},S=Bt.createServer(async(h,w)=>{let _=Buffer.from(`Bearer ${a}`),Se=Buffer.from(h.headers.authorization??"");if(Se.length!==_.length||!Vt(Se,_)){w.writeHead(401).end();return}if(h.url!=="/mcp"){w.writeHead(404).end();return}let I=h.headers["mcp-session-id"];if(h.method==="DELETE"&&typeof I=="string"&&u.delete(I)){for(let[C,z]of c)C.startsWith(`${I}:`)&&z.abort(new Error("工具会话已关闭。"));w.writeHead(204).end(),p();return}if(h.method!=="POST"){w.writeHead(405).end();return}let U=null,k=(C,z=!1)=>{w.writeHead(200,{"content-type":"application/json","cache-control":"no-store"}),w.end(JSON.stringify({jsonrpc:"2.0",id:U,...z?{error:C}:{result:C}}))};try{let C=0,z=[];for await(let E of h){let B=Buffer.from(E);if(C+=B.length,C>8*1024*1024)throw new Error("业务工具请求超过 8 MiB。");z.push(B)}let R=JSON.parse(Buffer.concat(z).toString("utf8"));if(U=R.id??null,R.method==="initialize"){if(d){k({code:-32e3,message:"应用工具提供者已注销。"},!0);return}let E=Ft();u.add(E),w.setHeader("mcp-session-id",E),k({protocolVersion:"2025-03-26",capabilities:{tools:{listChanged:!1}},serverInfo:{name:r,version:"1"}});return}if(typeof I!="string"||!u.has(I)){w.writeHead(404).end();return}if(R.method==="notifications/cancelled"){c.get(`${I}:${String(R.params?.requestId)}`)?.abort(new Error("工具调用已取消。")),w.writeHead(202).end();return}if(R.id===void 0){w.writeHead(202).end();return}if(R.method==="ping"){k({});return}if(R.method==="tools/list"){k({tools:e.map(E=>({name:E.name,description:E.description,inputSchema:E.inputSchema,annotations:{readOnlyHint:E.readOnly,destructiveHint:!E.readOnly,openWorldHint:!0}}))});return}if(R.method!=="tools/call"){k({code:-32601,message:"不支持的 MCP 方法。"},!0);return}let Ie=n.get(String(R.params?.name));if(!Ie)throw new Error("业务工具不存在。");let J=R.params?.arguments;if(!J||typeof J!="object"||Array.isArray(J))throw new Error("工具参数必须是对象。");let _e=s.get(Ie.name);if(!_e(J)){k({content:[{type:"text",text:`工具参数不符合声明:${JSON.stringify(_e.errors)}`}],isError:!0});return}let K=new AbortController,se=`${I}:${String(U)}`;if(c.has(se))throw new Error("工具请求 ID 正在执行,不能重复提交。");c.set(se,K);let Le=()=>{w.writableEnded||K.abort(new Error("工具请求连接已关闭。"))};w.once("close",Le);try{let B=R.params?._meta?.["aios/execution"],{invocationId:ve,...yt}=B??{},ae=B===void 0?void 0:me(yt);if(B&&(typeof ve!="string"||!ve))throw new Error("工具调用标识缺失。");let wt=await Ie.execute(J,{signal:K.signal,callId:se,...ae&&t?{files:{resolve:(St,It)=>t(ae.sessionId,St,It,K.signal)}}:{},...ae?{execution:st({...ae,invocationId:ve})}:{}});K.signal.throwIfAborted(),k(Oe(wt))}catch(E){k({content:[{type:"text",text:E instanceof Error?E.message:String(E)}],isError:!0})}finally{w.removeListener("close",Le),c.delete(se),p()}}catch(C){k({code:-32602,message:C instanceof Error?C.message:String(C)},!0)}});return await new Promise((h,w)=>{S.once("error",w),S.listen(0,"127.0.0.1",h)}),{descriptor:{id:r,name:r,transport:"HTTP",url:`http://127.0.0.1:${S.address().port}/mcp`,bearerToken:a,tools:e.map(h=>h.name),defaultToolsApproval:"prompt",toolApprovals:Object.fromEntries(e.map(h=>[h.name,h.readOnly?"auto":"prompt"]))},close:g,closed:y,status:()=>({retired:d,sessions:u.size,calls:c.size,closing:!!m}),retire:()=>{d=!0,p()}}}function st(r){return r&&typeof r=="object"&&(Object.values(r).forEach(st),Object.freeze(r)),r}import{createHash as Wt}from"node:crypto";var Kt=/^[a-z][a-z0-9_]{0,63}$/u;function Gt(r){return r.trim().toLowerCase()}function Pe(r){let e=Gt(r);if(!Kt.test(e))throw new Error("MCP 技能引用标识只能包含小写字母、数字和下划线,必须以字母开头,最长 64 个字符");return e}function Xt(r){return`aios_mcp_${Pe(r)}`}function at(r,e){let t=e.trim();if(!t)throw new Error("MCP 工具名称不能为空");return`mcp__${Xt(r)}__${t}`}function fe(r){return r.toolProviderId===void 0?`app_${Wt("sha256").update(JSON.stringify([r.id,r.version])).digest("hex").slice(0,32)}`:Pe(r.toolProviderId)}function Ne(r,e){if(!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e))throw new Error("业务工具名称无效。");return at(fe(r),e)}import{randomUUID as Yt}from"node:crypto";function je(r,e){if(!e)return r;function t(n){try{return n()}catch(o){process.emitWarning("SDK 诊断导出器执行失败,请检查应用诊断配置。",{code:"SDK_DIAGNOSTICS_FAILED",detail:o instanceof Error?o.name:typeof o})}}return{get eventWaitMs(){return r.eventWaitMs},stop:()=>r.stop(),shutdown:()=>r.shutdown(),async call(n,o,i=Yt(),s){let a=performance.now(),c={name:"sdk.rpc",method:n,requestId:i},u=t(()=>e.startSpan?.("sdk.rpc",{method:n,requestId:i}));t(()=>e.log?.(Object.freeze({...c,phase:"started"})));let d="completed",m;try{return await r.call(n,o,i,s)}catch(l){throw d="failed",m=l&&typeof l=="object"&&"code"in l&&typeof l.code=="string"&&/^[A-Z0-9_]{1,80}$/.test(l.code)?l.code:"RPC_ERROR",l}finally{let l=performance.now()-a,y=Object.freeze({...c,phase:d,durationMs:l,...m?{errorCode:m}:{}});t(()=>e.log?.(y)),t(()=>e.metric?.("sdk.rpc.duration_ms",l,{method:n,outcome:d})),t(()=>u?.end(y))}}}}async function he(r,e){let t;try{t=await r()}catch(n){try{await e()}catch(o){throw new AggregateError([n,o],"文件传输及清理均失败。",{cause:n})}throw n}return await e(),t}var ge=class{constructor(e,t){this.transport=e;this.sessionId=t}resolve(e,t="read",n){return this.transport.call("session.file.resolve",{id:this.sessionId,path:e,access:t},void 0,n)}call(e,t,n){return this.transport.call(`session.file.transfer.${e}`,{id:this.sessionId,...t},void 0,n)}async export(e,t,n){let{signal:o}=n,i=await this.call("begin",{kind:"export",path:e},o),s=this,a=0,c=(async function*(){for(;a<i.bytes;){o?.throwIfAborted();let u=await s.call("read",{transferId:i.id,offset:a},o);if(u.bytes<=0)throw new Error("导出数据意外结束。");a+=u.bytes,yield Buffer.from(u.data,"base64")}})();return he(async()=>{let u=await t.put({...n,source:c,sha256:i.sha256,bytes:i.bytes});if(o?.throwIfAborted(),a!==i.bytes||!u.version||u.key!==n.key)throw new Error("存储适配器未完整接收文件或未返回正确版本。");return{stored:u,file:i.file,sha256:i.sha256,bytes:i.bytes}},()=>he(()=>c.return(void 0),()=>this.call("close",{transferId:i.id})))}async import(e,t,n){if(!e.key||!e.version)throw new Error("导入必须指定对象存储键及版本。");let{signal:o}=n;o?.throwIfAborted();let i=await t.get({key:e.key,version:e.version,signal:o}),s=i.source[Symbol.asyncIterator](),a;return he(async()=>{a=await this.call("begin",{kind:"import",path:n.path,expectedVersion:n.expectedVersion,bytes:i.bytes,sha256:i.sha256},o);let c=0;for(;;){o?.throwIfAborted();let d=await s.next();if(d.done)break;let m=d.value;for(let l=0;l<m.byteLength;l+=a.chunkBytes){o?.throwIfAborted();let y=Buffer.from(m.subarray(l,l+a.chunkBytes));c=(await this.call("write",{transferId:a.id,offset:c,data:y.toString("base64")},o)).offset}}return o?.throwIfAborted(),{file:await this.call("commit",{transferId:a.id},o),source:e}},()=>he(async()=>s.return?.(),async()=>{a&&await this.call("close",{transferId:a.id})}))}};import Qt from"node:http";import{randomBytes as Zt,timingSafeEqual as er}from"node:crypto";async function ct(r){let e=Zt(32).toString("hex"),t=new Set,n=Qt.createServer(async(i,s)=>{let a=Buffer.from(`Bearer ${e}`),c=Buffer.from(i.headers.authorization??"");if(c.length!==a.length||!er(c,a)){s.writeHead(401).end();return}if(i.method!=="POST"||i.url!=="/callbacks"){s.writeHead(404).end();return}let u=new AbortController;t.add(u),s.once("close",()=>{s.writableFinished||u.abort(new Error("应用回调请求已断开。"))});try{let d=[],m=0;for await(let S of i){let v=Buffer.from(S);if(m+=v.length,m>64*1024*1024)throw new Error("应用回调请求超过 64 MiB。");d.push(v)}let l=JSON.parse(Buffer.concat(d).toString("utf8")),y=r.get(l.method);if(!y)throw Object.assign(new Error("应用回调不存在。"),{code:"APPLICATION_PROVIDER_OFFLINE"});let g=await y(l.params,u.signal);u.signal.throwIfAborted();let p=JSON.stringify({ok:!0,value:g});s.writeHead(200,{"content-type":"application/json"}).end(p)}catch(d){s.writeHead(200,{"content-type":"application/json"}).end(JSON.stringify({ok:!1,error:{message:d instanceof Error?d.message:String(d),code:d&&typeof d=="object"&&"code"in d?String(d.code):"APPLICATION_CALLBACK_FAILED"}}))}finally{t.delete(u)}});return await new Promise((i,s)=>{n.once("error",s),n.listen(0,"127.0.0.1",i)}),{connection:{url:`http://127.0.0.1:${n.address().port}/callbacks`,token:e,methods:[...r.keys()]},close:async()=>{for(let i of t)i.abort(new Error("应用回调服务已关闭。"));n.closeAllConnections(),await new Promise((i,s)=>n.close(a=>a?s(a):i()))}}}function dt(r){if(!Array.isArray(r)||r.length>2)throw new Error("JS Hook 定义无效。");let e=new Set;return r.map(t=>{if(!t||typeof t!="object"||!["PreToolUse","PostToolUse"].includes(t.event)||e.has(t.event)||typeof t.callback!="string"||!/^hook\.[a-z0-9_]+\.(PreToolUse|PostToolUse)$/.test(t.callback)||!Number.isSafeInteger(t.timeoutMs)||t.timeoutMs<1||t.timeoutMs>36e5||t.matcher!==void 0&&(typeof t.matcher!="string"||!t.matcher.trim())||Object.keys(t).some(n=>!["event","callback","matcher","timeoutMs"].includes(n)))throw new Error("JS Hook 字段无效。");return e.add(t.event),structuredClone(t)})}function lt(r,e){let t=e===void 0?{}:e;if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).some(n=>!["decision","reason","additionalContext"].includes(n))||t.decision!==void 0&&!["continue","deny"].includes(t.decision)||["reason","additionalContext"].some(n=>{let o=t[n];return o!==void 0&&(typeof o!="string"||o.length>32e3)})||t.decision==="deny"&&!t.reason?.trim())throw new Error("Hook 决定无效,拒绝必须说明原因。");return{...t.decision==="deny"?{decision:"block",reason:t.reason}:{},hookSpecificOutput:{hookEventName:r,...t.additionalContext?{additionalContext:t.additionalContext}:{}}}}import cr from"node:http";import{randomBytes as dr,timingSafeEqual as lr}from"node:crypto";var tr="[REDACTED]",rr="(?:密码|口令|密钥|令牌|私钥|凭据|验证码)",nr=new RegExp(`(${rr}\\s*["']?\\s*(?:[::=]|是(?!否)|为)\\s*)(?:"([^"]*)"|'([^']*)'|“([^”]*)”|‘([^’]*)’|([^\\s"'“”‘’,。;,;}]+))`,"gu");var or=["authorization","password","passwd","passphrase","token","api[-_]?key","secret","cookie","credentials?","private[-_]?key","pat"].join("|"),ut=`(?:[a-z0-9]+[-_])*(?:${or})`,ir=new RegExp(`(\\b${ut}\\b["']?\\s*[:=]\\s*["']?)([^\\s"',};&,。;]+)`,"gi"),sr=new RegExp(`([?&]${ut}=)([^&#\\s]*)`,"gi");function pt(r){return r.replace(/(\/codex\/)[a-f0-9]+(?=\/v1\b)/gi,"$1[REDACTED]").replace(/(\/model-usage\/)[a-f0-9]+/gi,"$1[REDACTED]").replace(/\b(authorization|proxy-authorization)\s*:\s*[^\r\n]+/gi,"$1: [REDACTED]").replace(/\b(set-cookie|cookie)\s*:\s*[^\r\n]+/gi,"$1: [REDACTED]").replace(/\b(bearer|basic)\s+[^\s"',}]+/gi,"$1 [REDACTED]").replace(/(https?:\/\/[^\s/:@]+:)[^\s/@]+(@)/gi,"$1[REDACTED]$2").replace(sr,"$1[REDACTED]").replace(ir,"$1[REDACTED]").replace(nr,(e,t,n,o,i,s)=>{let a=n!==void 0?['"','"']:o!==void 0?["'","'"]:i!==void 0?["“","”"]:s!==void 0?["‘","’"]:["",""];return`${t}${a[0]}${tr}${a[1]}`})}import{randomUUID as ar}from"node:crypto";var ye=class{id=ar();sequence=0;records=[];listeners=new Set;closed=!1;publish(e){this.records.push({...structuredClone(e),cursor:`${this.id}:${++this.sequence}`,occurredAt:new Date().toISOString()}),this.records.length>256&&this.records.shift(),this.wake()}close(){this.closed=!0,this.wake()}wake(){for(let e of this.listeners)e()}async*stream(e={}){let t=this.sequence-this.records.length;if(e.after!==void 0){let[n,o,i]=e.after.split(":");if(t=Number(o),n!==this.id||i!==void 0||!/^\d+$/.test(o??"")||!Number.isSafeInteger(t)||t>this.sequence)throw A("AUTH_EVENT_CURSOR_INVALID","授权事件游标不属于当前凭证提供者。")}for(;;){e.signal?.throwIfAborted();let n=this.sequence-this.records.length;if(t<n)throw A("AUTH_EVENT_CURSOR_EXPIRED","授权事件游标已超出内存保留范围,请重新读取授权状态。");let o=this.records[t-n];if(o){t++,yield structuredClone(o);continue}if(this.closed)return;await new Promise((i,s)=>{let a=()=>{this.listeners.delete(c),e.signal?.removeEventListener("abort",u)},c=()=>{a(),i()},u=()=>{a(),s(e.signal.reason)};this.listeners.add(c),e.signal?.addEventListener("abort",u,{once:!0})})}}};var we=class{constructor(e,t,n){this.authentication=e;this.platformBaseUrl=t;this.provider=n}events=new ye;entries=new Map;sequence=0;epoch=0;revoked=!1;closed=!1;expiration;execution(e){if(e===void 0)return;let t=me(e),{context:n}=t,o=this.authentication.principal;if(n&&(n.actor.userId!==o.userId||n.actor.tenantId!==o.tenantId||n.workspaceId!==o.workspaceId))throw A("EXECUTION_PRINCIPAL_MISMATCH","凭证请求的操作者、租户和空间与实例主体不一致。");return n&&(Object.freeze(n.actor),Object.freeze(n.owner),Object.freeze(n)),Object.freeze(t)}clear(){this.epoch++;for(let e of this.entries.values())e.controller.abort(A("MANAGED_AUTHORIZATION_CHANGED","解析凭证期间授权已改变。"));this.entries.clear(),clearTimeout(this.expiration)}revoke(e,t){let n=this.execution(e);return t!==void 0&&this.entries.get(JSON.stringify(n)??"")?.generation!==t?!1:(this.clear(),this.revoked=!0,this.events.publish({type:"invalidated",scope:"provider",reason:"revoked",execution:n,code:"MANAGED_AUTHORIZATION_REVOKED"}),!0)}async resolve(e,t,n){if(this.closed)throw A("MANAGED_PROVIDER_UNAVAILABLE","凭证提供者已关闭。");if(this.revoked&&e!=="explicit")throw A("MANAGED_AUTHORIZATION_REVOKED","应用托管授权已撤销。");let o=this.execution(t),i=JSON.stringify(o)??"";if(e==="explicit"&&o)throw new Error("显式刷新作用于整个实例,不能指定单轮上下文。");let s=this.entries.get(i);if(e==="explicit"&&(!s?.pending||s.reason!=="explicit")&&(this.clear(),s=void 0),s||(s={execution:o,generation:0,controller:new AbortController}),this.entries.delete(i),this.entries.set(i,s),s.pending)await s.pending;else{let a=e==="explicit"||e==="rejected"&&n===s.generation;if(a||!s.cached||s.cached.expiresAt<=Date.now()+3e4){let c=a?e:s.cached||s.expired?"expiring":"initial";s.cached=void 0;let u=this.epoch;s.reason=c;let d=this.load(s,c,u);s.pending=d;try{await d}finally{s.pending===d&&(s.pending=void 0),this.trim()}}}if(!s.cached||s.controller.signal.aborted)throw A("MANAGED_AUTHORIZATION_CHANGED","解析凭证期间授权已改变。");return{...s.cached.credential,generation:s.generation}}trim(){for(let[e,t]of this.entries){if(this.entries.size<=128)return;t.pending||this.entries.delete(e)}}async load(e,t,n){try{let o=await this.provider({reason:t,signal:e.controller.signal,execution:e.execution});if(e.controller.signal.throwIfAborted(),n!==this.epoch)throw A("MANAGED_AUTHORIZATION_CHANGED","解析凭证期间授权已改变。");if(o===null)throw this.revoke(),A("MANAGED_AUTHORIZATION_REVOKED","应用未提供有效授权。");e.cached=Je(o,this.authentication.principal,this.platformBaseUrl),e.expired=!1,e.generation=++this.sequence,this.revoked=!1,this.events.publish({type:"authorized",scope:"credential",reason:t,execution:e.execution,expiresAt:new Date(e.cached.expiresAt).toISOString()})}catch(o){if(n===this.epoch){let i=o&&typeof o=="object"&&"code"in o?String(o.code):"";this.events.publish({type:"invalidated",scope:"credential",reason:"provider_error",execution:e.execution,code:["MANAGED_IDENTITY_MISMATCH","MANAGED_CREDENTIAL_EXPIRED"].includes(i)?i:"MANAGED_CREDENTIAL_ERROR"})}throw o}finally{this.scheduleExpiration()}}scheduleExpiration(){clearTimeout(this.expiration);let e=1/0;for(let t of this.entries.values())t.cached&&(e=Math.min(e,t.cached.expiresAt));e===1/0||this.closed||(this.expiration=setTimeout(()=>{for(let t of this.entries.values())t.cached&&t.cached.expiresAt<=Date.now()&&(t.cached=void 0,t.expired=!0,this.events.publish({type:"invalidated",scope:"credential",reason:"expired",execution:t.execution,code:"MANAGED_CREDENTIAL_EXPIRED"}));this.scheduleExpiration()},Math.min(2147483647,Math.max(1,e-Date.now()))),this.expiration.unref())}close(){this.closed=!0,this.clear(),this.revoked=!0,this.events.publish({type:"invalidated",scope:"provider",reason:"closed",code:"MANAGED_PROVIDER_UNAVAILABLE"}),this.events.close()}};async function mt(r,e,t){let n=dr(32).toString("hex"),o=new we(r,e,t),i=cr.createServer(async(s,a)=>{let c=Buffer.from(`Bearer ${n}`),u=Buffer.from(s.headers.authorization??"");if(c.length!==u.length||!lr(c,u)){a.writeHead(401).end();return}if(s.method!=="POST"||s.url!=="/credentials"){a.writeHead(404).end();return}try{let d=0,m=[];for await(let g of s){let p=Buffer.from(g);if(d+=p.length,d>64*1024)throw new Error("凭证请求过大。");m.push(p)}let l=JSON.parse(Buffer.concat(m).toString("utf8"));if(l.generation!==void 0&&(!Number.isSafeInteger(l.generation)||l.generation<1))throw new Error("凭证版本无效。");let y;if(l.revoke===!0)y={revoked:o.revoke(l.execution,l.generation)};else{if(!["initial","expiring","rejected","explicit"].includes(String(l.reason)))throw new Error("凭证解析原因无效。");if(l.reason==="rejected"&&l.generation===void 0)throw new Error("被拒凭证版本无效。");y=await o.resolve(l.reason,l.execution,l.generation)}a.writeHead(200,{"content-type":"application/json","cache-control":"no-store"}),a.end(JSON.stringify(y))}catch(d){a.writeHead(400,{"content-type":"application/json","cache-control":"no-store"}),a.end(JSON.stringify({error:{code:d&&typeof d=="object"&&"code"in d?String(d.code):"MANAGED_CREDENTIAL_ERROR",message:pt(d instanceof Error?d.message:String(d))}}))}});return await new Promise((s,a)=>{i.once("error",a),i.listen(0,"127.0.0.1",s)}),{connection:{url:`http://127.0.0.1:${i.address().port}/credentials`,token:n},events:o.events,close:async()=>{o.close(),i.closeAllConnections(),await new Promise((s,a)=>i.close(c=>c?a(c):s()))}}}import{randomUUID as ur}from"node:crypto";import{setTimeout as ft}from"node:timers/promises";var Q=class{constructor(e,t){this.connection=e;this.authorizationEvents=t}managedEvents(e={}){let t=this.authorizationEvents?.();if(!t)throw new f("MANAGED_PROVIDER_UNAVAILABLE","此客户端未注册托管凭证提供者。");return t.stream(e)}login(e){return this.connection().call("auth.login",e)}getToken(){return this.connection().call("auth.token")}refresh(){return this.connection().call("auth.refresh")}refreshManaged(){return this.connection().call("auth.managed.refresh")}revokeManaged(){return this.connection().call("auth.managed.revoke")}status(){return this.connection().call("auth.status")}context(){return this.connection().call("auth.context")}logout(){return this.connection().call("auth.logout")}completePasswordChange(e){return this.connection().call("auth.password",e)}switchSubject(e){return this.connection().call("auth.switchSubject",e)}async startBrowserLogin(e={}){let t=this.connection(),n=await t.call("auth.browser.start",{...e,requestId:e.requestId??ur()});return new Z(t,n.id)}resumeBrowserLogin(e){return new Z(this.connection(),e)}},Z=class{constructor(e,t){this.transport=e;this.id=t}status(){return this.transport.call("auth.browser.status",{id:this.id})}cancel(){return this.transport.call("auth.browser.cancel",{id:this.id})}async getAuthorizationUrl(e={}){for(;;){e.signal?.throwIfAborted();let t=await this.status();if(this.checkFailure(t),t.state==="waiting"&&t.authorizationUrl)return t.authorizationUrl;if(t.state==="completed")throw new f("LOGIN_ALREADY_COMPLETED","网页登录已完成,请读取登录结果。");await ft(150,void 0,e)}}async wait(e={}){for(;;){e.signal?.throwIfAborted();let t=await this.status();if(this.checkFailure(t),t.state==="completed"&&t.session)return t.session;await ft(250,void 0,e)}}checkFailure(e){if(e.state==="failed")throw new f(e.error.code,e.error.message);if(e.state==="cancelled")throw new f("LOGIN_CANCELLED","网页登录已取消。")}};var ee=class{constructor(e){this.connection=e}call(e,t={}){return this.connection().call(`platform.${e}`,t)}getSession(){return this.call("session")}getUser(){return this.call("user")}getTenants(){return this.call("tenants")}getContext(){return this.call("context")}models={list:()=>this.call("models.list"),listSpeechRecognition:()=>this.call("models.speech")};account={getSummary:(e={})=>this.call("account.summary",e),listPlanPurchases:()=>this.call("account.purchases"),getUsage:e=>this.call("account.usage",e)};skills={getHome:()=>this.call("skills.home"),install:e=>this.call("skills.install",e),remove:(e,t)=>this.call("skills.remove",{skillId:e,tenantId:t}),getVersions:e=>this.call("skills.versions",e),updateVersion:e=>this.call("skills.updateVersion",e),search:(e={})=>this.call("skills.search",e),getDetail:(e,t)=>this.call("skills.detail",{skillId:e,tenantId:t}),listCategories:()=>this.call("skills.categories"),prepareForLocalTask:e=>this.call("skills.prepare",e)};plugins={list:(e={})=>this.call("plugins.list",e),getDetail:e=>this.call("plugins.detail",{recordId:e}),listCategories:()=>this.call("plugins.categories"),prepare:(e,t,n)=>this.call("plugins.prepare",{pluginId:e,recordId:t,resourceVersion:n}),getAuthorization:e=>this.call("plugins.authorization.get",{pluginId:e}),saveAuthorization:(e,t)=>this.call("plugins.authorization.save",{pluginId:e,request:t}),revokeAuthorization:e=>this.call("plugins.authorization.revoke",{pluginId:e}),verifyAuthorization:e=>this.call("plugins.authorization.verify",{pluginId:e})};knowledge={tree:()=>this.call("knowledge.tree"),search:(e={})=>this.call("knowledge.search",e),listDocuments:e=>this.call("knowledge.documents",e),readDocument:e=>this.call("knowledge.read",e),getDocumentDownloadLink:e=>this.call("knowledge.downloadLink",{documentId:e})}};import j from"node:fs";import T from"node:path";import{createHash as pr}from"node:crypto";import{createRequire as mr}from"node:module";import{t as fr,x as hr}from"tar";var gr=mr(import.meta.url),yr=["win32-x64","darwin-x64","darwin-arm64","linux-x64","linux-arm64"];function wr(r=`${process.platform}-${process.arch}`){if(!yr.includes(r))throw new f("RUNTIME_UNSUPPORTED",`尚未提供 ${r} 的精简运行时。`);let e=`@kmlckj/aios-runtime-${r}`;try{return T.dirname(gr.resolve(`${e}/package.json`))}catch(t){throw t.code!=="MODULE_NOT_FOUND"?t:new f("RUNTIME_PACKAGE_MISSING",`缺少 ${e}。请安装对应版本的运行时包,不要使用 --omit=optional;也可显式指定 runtime.directory。`)}}async function Sr(r){let e=pr("sha256");for await(let t of j.createReadStream(r))e.update(t);return e.digest("hex")}async function Ir(r,e){let t=new Set,n,o=i=>{if(!i||i.includes("\\")||i.includes("\0")||T.posix.isAbsolute(i)||/^[A-Za-z]:/.test(i)||i.split("/").includes(".."))throw new Error(`运行时归档路径无效:${i}`)};if(await fr({file:r,strict:!0,onReadEntry(i){try{o(i.path);let s=T.posix.normalize(i.path).replace(/\/$/,"");if(t.has(s))throw new Error(`运行时归档包含重复路径:${s}`);if(t.add(s),!["File","OldFile","Directory","SymbolicLink","Link"].includes(i.type))throw new Error(`运行时归档条目类型无效:${i.type}`);if(i.linkpath){if(T.posix.isAbsolute(i.linkpath)||i.linkpath.includes("\\")||/^[A-Za-z]:/.test(i.linkpath))throw new Error(`运行时归档链接越界:${s}`);o(i.type==="SymbolicLink"?T.posix.join(T.posix.dirname(s),i.linkpath):i.linkpath)}}catch(s){n??=s}}}),n)throw n;await hr({file:r,cwd:e,strict:!0,preservePaths:!1})}async function te(r,e){if(r.runtime?.directory!==void 0)return X(r);let t=e??wr(),n=JSON.parse(j.readFileSync(T.join(t,"package.json"),"utf8")),o=JSON.parse(j.readFileSync(new URL("../package.json",import.meta.url),"utf8")),i=JSON.parse(j.readFileSync(T.join(t,"runtime-package.json"),"utf8")),s=`${process.platform}-${process.arch}`;if(n.name!==`@kmlckj/aios-runtime-${s}`||n.version!==o.version||i.schemaVersion!==1||i.version!==o.version||i.target!==s||i.archive?.file!=="payload.tar.gz"||!/^[a-f0-9]{64}$/.test(i.archive.sha256)||!Number.isSafeInteger(i.archive.size)||i.archive.size<=0)throw new f("RUNTIME_INCOMPATIBLE","npm 运行时包的版本、平台或归档清单与 SDK 不一致。");if(!r.runtime||typeof r.runtime.dataDirectory!="string"||!r.runtime.dataDirectory.trim())throw new Error("运行时数据目录不能为空。");let a=T.resolve(r.runtime.dataDirectory,"runtimes"),c=T.join(a,`${s}-${i.archive.sha256}`),u=X({...r,runtime:{...r.runtime,directory:c}});if(j.existsSync(c))return await b(c,u.runtime.trustedPublicKey),u;let d=T.join(t,i.archive.file);if(j.statSync(d).size!==i.archive.size||await Sr(d)!==i.archive.sha256)throw new f("RUNTIME_INTEGRITY_FAILED","npm 运行时归档内容与清单不一致。");ce(a);let m=j.mkdtempSync(T.join(a,".unpack-"));try{await Ir(d,m),await b(m,u.runtime.trustedPublicKey);try{j.renameSync(m,c)}catch(l){if(!j.existsSync(c))throw l;await b(c,u.runtime.trustedPublicKey)}return u}finally{j.rmSync(m,{recursive:!0,force:!0})}}import{randomUUID as vr}from"node:crypto";function ht(r){let e=n=>{let o=r[n];if(typeof o!="number"||!Number.isSafeInteger(o)||o<0||o>864e5)throw Object.assign(new Error(`${n} 必须是 0 至 86400000 毫秒的整数。`),{code:"INVALID_DRAIN_OPTIONS"});return o},t=e("timeoutMs");if(r.onTimeout==="cancel")return{timeoutMs:t,onTimeout:"cancel",cancelTimeoutMs:e("cancelTimeoutMs")};if(r.onTimeout==="return")return{timeoutMs:t,onTimeout:"return"};throw Object.assign(new Error("必须明确选择排空到期后返回或取消。"),{code:"INVALID_DRAIN_OPTIONS"})}var re=class r{constructor(e,t,n,o,i,s){this.options=e;this.metadata=t;this.verified=n;this.child=o;this.exited=i;this.connector=s;o.on("message",this.onMessage),o.on("error",this.onError),o.once("disconnect",this.onDisconnect),i.then(a=>{this.exit=a,this.exitController.abort(new f("RUNTIME_EXITED","SDK 宿主进程已退出。")),this.onError(new f("RUNTIME_EXITED",`SDK 宿主已退出(${a.code??a.signal})。`)),o.removeListener("message",this.onMessage),o.removeListener("error",this.onError),o.removeListener("disconnect",this.onDisconnect)})}exit;exitController=new AbortController;shutdownRequest;pending=new Map;static async start(e,t,n){let o=ht({...t.shutdown}),i=await te(e),s=await b(i.runtime.directory,i.runtime.trustedPublicKey);if(F(L(i)))throw new f("DAEMON_ALREADY_OWNED","此上下文已有运行中的宿主,不能接管其进程所有权。");let{child:a,ready:c,exited:u}=ue({options:i,verifiedPackage:s,managed:{shutdown:o}});try{let d=await c;return new r(i,d,s,a,u,n)}catch(d){throw a.connected&&a.disconnect(),a.unref(),d}}get pid(){return this.metadata.pid}get instanceId(){return this.metadata.instanceId}connect(e={}){return this.exit||!this.child.connected?Promise.reject(new f("RUNTIME_EXITED","受管宿主连接已结束。")):this.connector(this.options,this.metadata,this.verified,e,this.exitController.signal)}shutdown(){if(this.shutdownRequest)return this.shutdownRequest;if(this.exit||!this.child.connected)return Promise.reject(new f("RUNTIME_EXITED","受管宿主连接已结束,请读取 wait 的退出结果。"));let e=vr();return this.shutdownRequest=new Promise((t,n)=>{this.pending.set(e,{resolve:t,reject:n}),this.child.send({type:"shutdown",id:e},o=>{o&&(this.pending.delete(e),n(o))})}).then(async t=>{if(t.status==="drained"){let n=await this.wait();if(n.code!==0)throw new f("RUNTIME_EXIT_FAILED",`SDK 宿主清理后异常退出(${n.code??n.signal})。`)}else this.shutdownRequest=void 0;return t},t=>{throw this.shutdownRequest=void 0,t}),this.shutdownRequest}wait(){return this.exited}onMessage=e=>{if(e.type!=="shutdown")return;let t=this.pending.get(e.id);t&&(this.pending.delete(e.id),e.ok?t.resolve(e.value):t.reject(new f(e.error.code,e.error.message)))};onError=e=>{for(let t of this.pending.values())t.reject(e);this.pending.clear()};onDisconnect=()=>this.onError(new f("HOST_DISCONNECTED","宿主控制通道已断开,请读取 wait 的退出结果。"))};function gt(r,e){if(e.credentials&&(r.mode!=="platform"||!r.authentication))throw new Error("凭证回调只能用于平台托管模式。");if(e.authorize&&!r.authorization?.required)throw new Error("会话授权回调需要 authorization.required=true。");if(e.memoryStore&&r.memory?.storage!=="external")throw new Error("记忆存储适配器需要 memory.storage=external。")}var oe=class r{constructor(e,t,n,o={}){this.transport=e;this.options=t;this.mode=n;this.services=o;this.transport=je(e,o.diagnostics)}toolProviders=new Set;activeToolProviders=new Map;credentialProvider;callbacks;callbackHandlers=new Map;lifecycleQueue=Promise.resolve();closed=!1;scheduleLifecycle(e){let t=this.lifecycleQueue.then(e);return this.lifecycleQueue=t.then(()=>{},()=>{}),t}assertOpen(){if(this.closed)throw new f("RUNTIME_CLOSED","SDK 客户端连接已关闭。")}async startCallbacks(){let e=this.callbackHandlers;if(this.services.authorize&&e.set("session.authorize",(i,s)=>this.services.authorize(Object.freeze(i),{signal:s})),this.services.memoryStore){let i=this.services.memoryStore;e.set("memory.read",(s,a)=>i.read(s,a)),e.set("memory.compareAndSwap",(s,a)=>i.compareAndSwap(s,a))}if(!e.size)return;let t=this.callbacks,n=t??await ct(e),o={...n.connection,methods:[...e.keys()]};try{await this.transport.call("application.callbacks",{connection:o}),this.callbacks=n}catch(i){throw t||await n.close(),i}}static async start(e,t,n){gt(e,t);let o=e.mode==="platform"&&e.authentication&&t.credentials?await mt(e.authentication,e.platformBaseUrl,t.credentials):void 0;try{return{transport:n?await W.attach(e,n.metadata,n.verified,o?.connection,n.exitSignal):await W.start(e,o?.connection),provider:o}}catch(i){throw await o?.close(),i}}static async create(e,t={}){let n=await te(e),{transport:o,provider:i}=await r.start(n,t),s=new r(o,n,n.mode,t);s.credentialProvider=i;try{await s.startCallbacks()}catch(a){throw await s.close(),a}return s}static startManaged(e,t){return re.start(e,t,async(n,o,i,s,a)=>{let{transport:c,provider:u}=await r.start(n,s,{metadata:o,verified:i,exitSignal:a}),d=new r(c,n,n.mode,s);d.credentialProvider=u;try{await d.startCallbacks()}catch(m){throw await d.close(),m}return d})}static async connectCli(e){return new r(await pe.connect(e),e,"platform")}auth=new Q(()=>this.transport,()=>this.credentialProvider?.events);platform=new ee(()=>this.transport);runtime={health:e=>this.transport.call("runtime.health",{},void 0,e),activity:()=>this.transport.call("runtime.activity"),drain:(e,t)=>this.transport.call("runtime.drain",e,void 0,t)};resources={limits:{get:()=>this.transport.call("resources.limits.get"),set:(e,t,n)=>this.transport.call("resources.limits.set",{key:e,value:t,revision:n})},cache:{status:()=>this.transport.call("resources.cache.status"),prune:(e={})=>this.transport.call("resources.cache.prune",e)}};skills={list:()=>this.transport.call("skills.list"),importPaths:e=>this.transport.call("skills.import",{paths:e}),remove:e=>this.transport.call("skills.remove",{reference:e})};plugins={list:()=>this.transport.call("plugins.list"),install:(e,t)=>this.transport.call("plugins.install",{recordId:e,source:t}),update:(e,t,n)=>this.transport.call("plugins.update",{pluginId:e,recordId:t,expectedRevision:n}),setEnabled:(e,t,n)=>this.transport.call("plugins.setEnabled",{pluginId:e,enabled:t,expectedRevision:n}),remove:(e,t)=>this.transport.call("plugins.remove",{pluginId:e,expectedRevision:t})};settings={get:()=>this.transport.call("settings.get"),set:(e,t,n)=>this.transport.call("settings.set",{domain:e,value:t,revision:n})};native={settings:()=>this.transport.call("native.settings"),configure:(e,t)=>this.transport.call("native.configure",{value:e,revision:t}),status:e=>this.transport.call("native.status",{kind:e}),registerBrowser:()=>this.transport.call("native.register"),unregisterBrowser:()=>this.transport.call("native.unregister")};memory={get:e=>this.transport.call("memory.get",e),setEnabled:e=>this.transport.call("memory.setEnabled",e),edit:e=>this.transport.call("memory.edit",e),reset:e=>this.transport.call("memory.reset",e)};async setPlatformBaseUrl(e){if(!("mode"in this.options)||this.options.mode!=="platform")throw new Error("独立模式不使用平台基地址。");await this.configure({platformBaseUrl:e})}getConfiguration(){return this.transport.call("configuration.get")}configure(e){return this.scheduleLifecycle(()=>this.applyConfiguration(e))}async applyConfiguration(e){if(this.assertOpen(),!("mode"in this.options))throw new Error("连接已有 CLI 时请通过 CLI 修改全局配置。");if(this.options.mode==="standalone"&&e.platformBaseUrl!==void 0)throw new Error("独立模式不使用平台基地址。");if(this.options.mode==="platform"&&e.models!==void 0)throw new Error("平台模型由平台管理;外部模型请使用独立模式。");let t=await te({...this.options,...e});gt(t,this.services),await b(t.runtime.directory,t.runtime.trustedPublicKey),await this.transport.call("configuration.validate",{options:t}),await this.transport.shutdown(),await this.disconnect();let{transport:n,provider:o}=await r.start(t,this.services);this.transport=je(n,this.services.diagnostics),this.credentialProvider=o,this.options=t,this.closed=!1;try{await this.startCallbacks()}catch(i){throw await this.disconnect(),i}return this.getConfiguration()}capabilities(e={}){return this.transport.call("capabilities",e)}dependencies(){return this.transport.call("dependencies")}defineAgent(e){return this.scheduleLifecycle(()=>this.registerAgent(e))}async registerAgent(e){this.assertOpen();let{tools:t,toolProviderId:n,jsHooks:o,...i}=e,s=fe(e),a=[],c=new Map;for(let[l,y]of Object.entries(o??{})){if(!["beforeTool","afterTool"].includes(l)||!y||typeof y.execute!="function")throw new Error("JS Hook 必须提供执行函数。");let g=l==="beforeTool"?"PreToolUse":"PostToolUse",p=`hook.${s}.${g}`;a.push({event:g,callback:p,timeoutMs:y.timeoutMs??3e4,...y.matcher?{matcher:y.matcher}:{}}),c.set(p,this.callbackHandlers.get(p))}o&&(i.jsHookDefinitions=dt(a));let u=JSON.stringify([e.id,e.version]),d=this.activeToolProviders.get(s);if(d&&d.agent!==u)throw new Error("应用工具提供者 ID 已被其他智能体使用。");let m=t?.length?await it(s,t,(l,y,g,p)=>this.transport.call("session.file.resolve",{id:l,path:y,access:g},void 0,p)):void 0;m&&this.toolProviders.add(m);try{for(let[g,p]of Object.entries(o??{})){let S=g==="beforeTool"?"PreToolUse":"PostToolUse";this.callbackHandlers.set(`hook.${s}.${S}`,async(v,h)=>{let w=await p.execute(Object.freeze(v),{signal:h});return lt(S,w),w})}o&&await this.startCallbacks();let l=[...i.mcpServers??[],...m?[m.descriptor]:[]];await this.transport.call("agent.define",{...i,mcpServers:l,...m?{applicationToolProviderId:s}:{}}),d?.provider?.retire();let y={agent:u,provider:m};return this.activeToolProviders.set(s,y),m&&m.closed.then(()=>{this.toolProviders.delete(m)}),new De(this.transport,e.id,e.version,m,t?.map(g=>({name:g.name,reference:Ne(e,g.name)})),()=>{if(this.activeToolProviders.get(s)!==y)throw new Error("此工具提供者已被新注册替换,请使用当前 Agent 句柄。")})}catch(l){for(let[y,g]of c)g?this.callbackHandlers.set(y,g):this.callbackHandlers.delete(y);throw m&&(this.toolProviders.delete(m),await m.close()),l}}async openSession(e){return new ie(this.transport,await this.transport.call("session.get",{id:e}))}listSessions(e={}){return this.transport.call("session.list",e)}shutdown(){return this.scheduleLifecycle(async()=>{this.assertOpen(),await this.transport.shutdown(),await this.disconnect()})}close(){return this.scheduleLifecycle(()=>this.disconnect())}async disconnect(){if(!this.closed){this.closed=!0;try{await this.transport.stop()}finally{await Promise.all([...this.toolProviders].map(e=>e.close()).concat(this.credentialProvider?[this.credentialProvider.close()]:[])),this.callbacks&&(await this.callbacks.close(),this.callbacks=void 0),this.callbackHandlers.clear(),this.toolProviders.clear(),this.activeToolProviders.clear(),this.credentialProvider=void 0}}}},De=class{constructor(e,t,n,o,i=[],s=()=>{}){this.transport=e;this.id=t;this.version=n;this.provider=o;this.tools=i;this.assertCurrentProvider=s}async createSession(e={}){return new ie(this.transport,await this.transport.call("session.create",{agentId:this.id,agentVersion:this.version,...e,creationId:e.creationId??x()}))}async adoptSession(e,t={}){return new ie(this.transport,await this.transport.call("session.bind",{id:e,agentId:this.id,agentVersion:this.version,policy:t.policy}))}providerStatus(){return this.transport.call("agent.providers",{agentId:this.id,agentVersion:this.version})}unregisterProvider(){return this.assertCurrentProvider(),this.transport.call("agent.unregisterProvider",{agentId:this.id,agentVersion:this.version})}async releaseProvider(){return await this.unregisterProvider(),this.provider?.retire(),this.provider?.status()}waitProviderClosed(){return this.provider?.closed??Promise.resolve()}},ie=class r{constructor(e,t){this.transport=e;this.info=t;this.id=t.id,this.files=new ge(e,this.id)}id;files;runtimeTuning(){return this.transport.call("session.runtimeTuning",{id:this.id})}memory={get:(e={})=>this.transport.call("memory.get",{...e,sessionId:this.id}),edit:e=>this.transport.call("memory.edit",{...e,sessionId:this.id}),reset:()=>this.transport.call("memory.reset",{sessionId:this.id}),setEnabled:e=>this.transport.call("memory.setEnabled",{enabled:e,sessionId:this.id})};async send(e,t={}){let n=t.commandId??x(),o=await this.transport.call("session.send",{id:this.id,content:e,options:{...t,commandId:n}});return new ne(this.transport,this.id,o.runId,n)}enqueue(e,t={}){return this.transport.call("session.enqueue",{id:this.id,content:e,options:{...t,commandId:t.commandId??x()}})}queue(){return this.transport.call("session.queue",{id:this.id})}editQueued(e,t,n,o=x()){return this.transport.call("session.queue.edit",{id:this.id,pendingMessageId:e,content:t,queueVersion:n,commandId:o})}removeQueued(e,t,n=x()){return this.transport.call("session.queue.delete",{id:this.id,pendingMessageId:e,queueVersion:t.queueVersion,targetRunId:t.activeRunId,commandId:n})}reorderQueue(e,t,n=x()){return this.transport.call("session.queue.reorder",{id:this.id,pendingMessageIds:e,queueVersion:t,commandId:n})}dispatchQueued(e,t,n,o=x()){return this.transport.call("session.queue.send",{id:this.id,pendingMessageId:e,queueVersion:t,targetRunId:n,commandId:o})}history(){return this.transport.call("session.history",{id:this.id})}rename(e,t){return this.transport.call("session.rename",{id:this.id,name:e,expectedRevision:t})}setArchived(e,t){return this.transport.call("session.archive",{id:this.id,archived:e,expectedRevision:t})}runs(e={},t){return this.transport.call("session.runs",{id:this.id,...e},void 0,t)}async*events(e={}){let t=e.cursor;for(;;){e.signal?.throwIfAborted();let n=await this.transport.call("session.events",{id:this.id,cursor:t,waitMs:this.transport.eventWaitMs??0},void 0,e.signal);for(let o of n.events)e.signal?.throwIfAborted(),yield o;t=n.cursor,this.transport.eventWaitMs||await Me(150,void 0,{signal:e.signal})}}eventPage(e={}){return this.transport.call("session.events",{id:this.id,cursor:e.cursor,waitMs:0},void 0,e.signal)}queryHistory(e={}){return this.transport.call("session.history.query",{id:this.id,...e})}clear(e){return this.transport.call("session.clear",{id:this.id,...e})}delete(e){return this.transport.call("session.delete",{id:this.id,...e})}artifacts(e={},t={}){return this.transport.call("session.artifacts",{id:this.id,query:e},void 0,t.signal)}operations(e={}){return this.transport.call("session.operations",{id:this.id,...e})}teamState(){return this.transport.call("session.team.state",{id:this.id})}async createBackgroundSession(e,t=x()){let n=await this.transport.call("session.team.background",{id:this.id,memberId:e,creationId:t});return new r(this.transport,n)}operation(e,t={}){return this.transport.call("session.operation",{id:this.id,operationId:e},void 0,t.signal)}cancelOperation(e,t={}){return this.transport.call("session.operation.cancel",{id:this.id,operationId:e},void 0,t.signal)}configuration(e){return this.transport.call("session.configuration",{id:this.id,revision:e})}configure(e,t){return this.transport.call("session.defaults",{id:this.id,defaults:e,expectedRevision:t})}configureBuiltins(e,t){return this.transport.call("session.builtins",{id:this.id,builtins:e,expectedRevision:t})}updateAgent(e){return this.transport.call("session.agent",{id:this.id,...e})}receipt(e){return this.transport.call("session.receipt",{id:this.id,commandId:e})}resumeRun(e){return new ne(this.transport,this.id,e)}async compact(){let e=await this.transport.call("session.compact",{id:this.id,commandId:x()});return new ne(this.transport,this.id,e.runId)}},ne=class r{constructor(e,t,n,o){this.transport=e;this.taskId=t;this.id=n;this.commandId=o}state(e={}){return this.transport.call("run.state",{taskId:this.taskId,runId:this.id},void 0,e.signal)}context(){return this.transport.call("run.context",{taskId:this.taskId,runId:this.id})}memoryPolicy(){return this.transport.call("run.memoryPolicy",{taskId:this.taskId,runId:this.id})}team(e,t={}){return this.transport.call("session.team.command",{id:this.taskId,runId:this.id,command:e},void 0,t.signal)}artifacts(e={},t={}){return this.transport.call("session.artifacts",{id:this.taskId,query:{...e,runId:this.id}},void 0,t.signal)}operations(){return this.transport.call("session.operations",{id:this.taskId,runId:this.id})}operation(e,t={}){return this.transport.call("session.operation",{id:this.taskId,runId:this.id,operationId:e},void 0,t.signal)}cancelOperation(e,t={}){return this.transport.call("session.operation.cancel",{id:this.taskId,runId:this.id,operationId:e},void 0,t.signal)}cancel(){return this.transport.call("run.cancel",{taskId:this.taskId,runId:this.id,commandId:x()})}detach(){return this.transport.call("run.detach",{taskId:this.taskId,runId:this.id})}approve(e,t){return this.transport.call("run.approve",{taskId:this.taskId,runId:this.id,toolCallId:e,decision:t,commandId:x()})}answer(e,t){return this.transport.call("run.answer",{taskId:this.taskId,runId:this.id,requestId:e,response:t,commandId:x()})}async confirmPlan(){let e=await this.transport.call("run.confirmPlan",{taskId:this.taskId,runId:this.id,commandId:x()});return new r(this.transport,this.taskId,e.runId)}async*events(e={}){let t=e.cursor;for(;;){e.signal?.throwIfAborted();let n=await this.transport.call("run.events",{taskId:this.taskId,runId:this.id,cursor:t,waitMs:this.transport.eventWaitMs??0},void 0,e.signal);for(let o of n.events)e.signal?.throwIfAborted(),yield o;if(t=n.cursor,n.terminal)return;this.transport.eventWaitMs||await Me(150,void 0,{signal:e.signal})}}async wait(e={}){for(;;){e.signal?.throwIfAborted();let t=this.transport.eventWaitMs?await this.transport.call("run.wait",{taskId:this.taskId,runId:this.id,waitMs:this.transport.eventWaitMs},void 0,e.signal):await this.state(e);if(t.status!=="running"&&t.status!=="queued")return t;this.transport.eventWaitMs||await Me(150,void 0,{signal:e.signal})}}},Ii=oe.create,vi=oe.connectCli,Ei=oe.startManaged;export{De as Agent,oe as AiosClient,f as AiosSdkError,Q as AuthApi,Z as BrowserLogin,re as ManagedHost,ee as PlatformApi,ne as Run,ie as Session,fe as applicationToolProviderId,Ne as applicationToolReference,vi as connectCli,Ii as createClient,Ei as startManagedHost,Ut as toolResult,b as validateRuntime};