@nocobase/app-plugin-agents 1.0.0-beta.16 → 1.0.0-beta.17

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 (173) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +12 -1
  3. package/dist/client/chat/api.d.ts +1 -1
  4. package/dist/client/chat/api.d.ts.map +1 -1
  5. package/dist/client/chat/api.js +2 -2
  6. package/dist/client/chat/api.js.map +1 -1
  7. package/dist/client/chat/keys.d.ts +1 -0
  8. package/dist/client/chat/keys.d.ts.map +1 -1
  9. package/dist/client/chat/keys.js +1 -0
  10. package/dist/client/chat/keys.js.map +1 -1
  11. package/dist/client/chat/provider.d.ts +10 -4
  12. package/dist/client/chat/provider.d.ts.map +1 -1
  13. package/dist/client/chat/provider.js +86 -15
  14. package/dist/client/chat/provider.js.map +1 -1
  15. package/dist/client/chat/use-chat.d.ts +3 -1
  16. package/dist/client/chat/use-chat.d.ts.map +1 -1
  17. package/dist/client/chat/use-chat.js +2 -2
  18. package/dist/client/chat/use-chat.js.map +1 -1
  19. package/dist/client/chat/use-conversation-model.d.ts +12 -0
  20. package/dist/client/chat/use-conversation-model.d.ts.map +1 -0
  21. package/dist/client/chat/use-conversation-model.js +64 -0
  22. package/dist/client/chat/use-conversation-model.js.map +1 -0
  23. package/dist/client/chat.d.ts +1 -0
  24. package/dist/client/chat.d.ts.map +1 -1
  25. package/dist/client/chat.js +1 -0
  26. package/dist/client/chat.js.map +1 -1
  27. package/dist/client/pages/usage/index.d.ts.map +1 -1
  28. package/dist/client/pages/usage/index.js +17 -5
  29. package/dist/client/pages/usage/index.js.map +1 -1
  30. package/dist/client/pages/usage/prices/model.d.ts +4 -4
  31. package/dist/client/pages/usage/prices/model.d.ts.map +1 -1
  32. package/dist/client/pages/usage/prices/model.js +2 -2
  33. package/dist/client/pages/usage/prices/model.js.map +1 -1
  34. package/dist/client/pages/usage/prices/price-cells.js +2 -2
  35. package/dist/client/pages/usage/prices/price-cells.js.map +1 -1
  36. package/dist/client/pages/usage/prices/prices-section.d.ts.map +1 -1
  37. package/dist/client/pages/usage/prices/prices-section.js +13 -13
  38. package/dist/client/pages/usage/prices/prices-section.js.map +1 -1
  39. package/dist/package.json +5 -2
  40. package/dist/server/cli/online-credential.d.ts +16 -0
  41. package/dist/server/cli/online-credential.d.ts.map +1 -0
  42. package/dist/server/cli/online-credential.js +51 -0
  43. package/dist/server/cli/online-credential.js.map +1 -0
  44. package/dist/server/cli/run-credential.d.ts +2 -0
  45. package/dist/server/cli/run-credential.d.ts.map +1 -1
  46. package/dist/server/cli/run-credential.js +12 -1
  47. package/dist/server/cli/run-credential.js.map +1 -1
  48. package/dist/server/cli/surface.js +2 -2
  49. package/dist/server/cli/surface.js.map +1 -1
  50. package/dist/server/composition.d.ts +2 -0
  51. package/dist/server/composition.d.ts.map +1 -1
  52. package/dist/server/composition.js +17 -3
  53. package/dist/server/composition.js.map +1 -1
  54. package/dist/server/core/brief/brief.js +1 -1
  55. package/dist/server/core/brief/brief.js.map +1 -1
  56. package/dist/server/core/conversations/chat-settings.d.ts +1 -0
  57. package/dist/server/core/conversations/chat-settings.d.ts.map +1 -1
  58. package/dist/server/core/conversations/chat-settings.js +71 -57
  59. package/dist/server/core/conversations/chat-settings.js.map +1 -1
  60. package/dist/server/core/conversations/conversation.service.d.ts.map +1 -1
  61. package/dist/server/core/conversations/conversation.service.js +3 -4
  62. package/dist/server/core/conversations/conversation.service.js.map +1 -1
  63. package/dist/server/core/reports/report.service.d.ts +1 -0
  64. package/dist/server/core/reports/report.service.d.ts.map +1 -1
  65. package/dist/server/core/reports/report.service.js +5 -2
  66. package/dist/server/core/reports/report.service.js.map +1 -1
  67. package/dist/server/core/runs/claim.d.ts +1 -1
  68. package/dist/server/core/runs/claim.d.ts.map +1 -1
  69. package/dist/server/core/runs/claim.js +337 -58
  70. package/dist/server/core/runs/claim.js.map +1 -1
  71. package/dist/server/core/runs/runner-affinity.d.ts +6 -0
  72. package/dist/server/core/runs/runner-affinity.d.ts.map +1 -0
  73. package/dist/server/core/runs/runner-affinity.js +16 -0
  74. package/dist/server/core/runs/runner-affinity.js.map +1 -0
  75. package/dist/server/core/skills/skill.service.d.ts +2 -0
  76. package/dist/server/core/skills/skill.service.d.ts.map +1 -1
  77. package/dist/server/core/skills/skill.service.js +1 -0
  78. package/dist/server/core/skills/skill.service.js.map +1 -1
  79. package/dist/server/online/agent/configuration.d.ts +2 -2
  80. package/dist/server/online/agent/configuration.d.ts.map +1 -1
  81. package/dist/server/online/agent/configuration.js +21 -7
  82. package/dist/server/online/agent/configuration.js.map +1 -1
  83. package/dist/server/online/agent/index.d.ts +2 -1
  84. package/dist/server/online/agent/index.d.ts.map +1 -1
  85. package/dist/server/online/agent/index.js.map +1 -1
  86. package/dist/server/online/agent/native/backend.d.ts +2 -0
  87. package/dist/server/online/agent/native/backend.d.ts.map +1 -1
  88. package/dist/server/online/agent/native/backend.js +14 -12
  89. package/dist/server/online/agent/native/backend.js.map +1 -1
  90. package/dist/server/online/agent/native/execution.d.ts +2 -0
  91. package/dist/server/online/agent/native/execution.d.ts.map +1 -1
  92. package/dist/server/online/agent/native/execution.js +51 -22
  93. package/dist/server/online/agent/native/execution.js.map +1 -1
  94. package/dist/server/online/agent/native/types.d.ts +6 -0
  95. package/dist/server/online/agent/native/types.d.ts.map +1 -1
  96. package/dist/server/online/agent/runner/backend.d.ts.map +1 -1
  97. package/dist/server/online/agent/runner/backend.js +4 -3
  98. package/dist/server/online/agent/runner/backend.js.map +1 -1
  99. package/dist/server/online/agent/service.d.ts +2 -0
  100. package/dist/server/online/agent/service.d.ts.map +1 -1
  101. package/dist/server/online/agent/service.js +3 -1
  102. package/dist/server/online/agent/service.js.map +1 -1
  103. package/dist/server/online/agent/types.d.ts +15 -1
  104. package/dist/server/online/agent/types.d.ts.map +1 -1
  105. package/dist/server/online/sandbox/cli-command.d.ts +6 -0
  106. package/dist/server/online/sandbox/cli-command.d.ts.map +1 -0
  107. package/dist/server/online/sandbox/cli-command.js +370 -0
  108. package/dist/server/online/sandbox/cli-command.js.map +1 -0
  109. package/dist/server/online/sandbox/execution.d.ts +25 -0
  110. package/dist/server/online/sandbox/execution.d.ts.map +1 -0
  111. package/dist/server/online/sandbox/execution.js +63 -0
  112. package/dist/server/online/sandbox/execution.js.map +1 -0
  113. package/dist/server/online/sandbox/filesystem.d.ts +8 -0
  114. package/dist/server/online/sandbox/filesystem.d.ts.map +1 -0
  115. package/dist/server/online/sandbox/filesystem.js +72 -0
  116. package/dist/server/online/sandbox/filesystem.js.map +1 -0
  117. package/dist/server/online/sandbox/limits.d.ts +4 -0
  118. package/dist/server/online/sandbox/limits.d.ts.map +1 -0
  119. package/dist/server/online/sandbox/limits.js +46 -0
  120. package/dist/server/online/sandbox/limits.js.map +1 -0
  121. package/dist/server/online/sandbox/provider.d.ts +9 -0
  122. package/dist/server/online/sandbox/provider.d.ts.map +1 -0
  123. package/dist/server/online/sandbox/provider.js +237 -0
  124. package/dist/server/online/sandbox/provider.js.map +1 -0
  125. package/dist/server/online/sandbox/skills.d.ts +14 -0
  126. package/dist/server/online/sandbox/skills.d.ts.map +1 -0
  127. package/dist/server/online/sandbox/skills.js +56 -0
  128. package/dist/server/online/sandbox/skills.js.map +1 -0
  129. package/dist/server/online/sandbox/tools.d.ts +3 -0
  130. package/dist/server/online/sandbox/tools.d.ts.map +1 -0
  131. package/dist/server/online/sandbox/tools.js +35 -0
  132. package/dist/server/online/sandbox/tools.js.map +1 -0
  133. package/dist/server/online/sandbox/types.d.ts +72 -0
  134. package/dist/server/online/sandbox/types.d.ts.map +1 -0
  135. package/dist/server/online/sandbox/types.js +2 -0
  136. package/dist/server/online/sandbox/types.js.map +1 -0
  137. package/dist/server/providers/agents.d.ts +5 -2
  138. package/dist/server/providers/agents.d.ts.map +1 -1
  139. package/dist/server/providers/agents.js +63 -2
  140. package/dist/server/providers/agents.js.map +1 -1
  141. package/dist/server/routes/chat.d.ts +1 -1
  142. package/dist/server/routes/chat.d.ts.map +1 -1
  143. package/dist/server/routes/chat.js +15 -6
  144. package/dist/server/routes/chat.js.map +1 -1
  145. package/dist/server/routes/index.d.ts.map +1 -1
  146. package/dist/server/routes/index.js +17 -2
  147. package/dist/server/routes/index.js.map +1 -1
  148. package/dist/server/routes/openapi.js +1 -1
  149. package/dist/server/routes/openapi.js.map +1 -1
  150. package/dist/server/routes/schemas.js +1 -1
  151. package/dist/server/routes/schemas.js.map +1 -1
  152. package/dist/server/runners/runner.service.d.ts +1 -1
  153. package/dist/server/runners/runner.service.d.ts.map +1 -1
  154. package/dist/server/runners/runner.service.js +5 -1
  155. package/dist/server/runners/runner.service.js.map +1 -1
  156. package/dist/server/runners/runner.store.d.ts.map +1 -1
  157. package/dist/server/runners/runner.store.js +3 -1
  158. package/dist/server/runners/runner.store.js.map +1 -1
  159. package/dist/server/vendor/THIRD_PARTY_LICENSES.txt +782 -0
  160. package/dist/server/vendor/just-bash.d.ts +137 -0
  161. package/dist/server/vendor/just-bash.js +2102 -0
  162. package/dist/shared/conversations.d.ts +2 -1
  163. package/dist/shared/conversations.d.ts.map +1 -1
  164. package/dist/shared/conversations.js.map +1 -1
  165. package/dist/shared/runners.d.ts +1 -1
  166. package/dist/shared/runners.d.ts.map +1 -1
  167. package/dist/shared/runners.js +2 -0
  168. package/dist/shared/runners.js.map +1 -1
  169. package/docs/native-sandbox.md +55 -0
  170. package/docs/ui-message-clients.md +10 -0
  171. package/package.json +11 -8
  172. package/skills/nocobase-app-plugin-agents/SKILL.md +1 -0
  173. package/skills/nocobase-app-plugin-agents/references/online-agent.md +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-command.js","sourceRoot":"","sources":["../../../../server/online/sandbox/cli-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { OnlineAgentToolExecution } from '../agent/types.js';
2
+ import type { OnlineAgentSandbox, OnlineAgentSandboxInput, OnlineAgentSandboxProvider } from './types.js';
3
+ /** Execution-local capabilities; only the first shell call allocates a Sandbox. */
4
+ export declare class NativeToolExecution implements OnlineAgentToolExecution {
5
+ readonly id: string;
6
+ private readonly owner;
7
+ private readonly input;
8
+ private readonly provider;
9
+ private prepared;
10
+ private closed;
11
+ private cleanup;
12
+ constructor(id: string, owner: {
13
+ sandbox?: Promise<OnlineAgentSandbox>;
14
+ }, input: OnlineAgentSandboxInput, provider: OnlineAgentSandboxProvider | undefined);
15
+ private available;
16
+ private preparation;
17
+ instructions(tools: readonly string[]): Promise<string>;
18
+ getSandbox(): Promise<OnlineAgentSandbox>;
19
+ readSkill(name: string): Promise<{
20
+ ok: boolean;
21
+ output: string;
22
+ }>;
23
+ dispose(): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../../server/online/sandbox/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EAEvB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,mFAAmF;AACnF,qBAAa,mBAAoB,YAAW,wBAAwB;IAMhE,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAR3B,OAAO,CAAC,QAAQ,CAAqD;IACrE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA4B;gBAGhC,EAAE,EAAE,MAAM,EACF,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAAE,EAChD,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,0BAA0B,GAAG,SAAS;IAGnE,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,WAAW;IAMb,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvD,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAYzC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAMvE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAezB"}
@@ -0,0 +1,63 @@
1
+ /** Execution-local capabilities; only the first shell call allocates a Sandbox. */
2
+ export class NativeToolExecution {
3
+ id;
4
+ owner;
5
+ input;
6
+ provider;
7
+ prepared;
8
+ closed = false;
9
+ cleanup;
10
+ constructor(id, owner, input, provider) {
11
+ this.id = id;
12
+ this.owner = owner;
13
+ this.input = input;
14
+ this.provider = provider;
15
+ }
16
+ available() {
17
+ if (this.closed)
18
+ throw new Error('Execution is closed.');
19
+ this.input.context.signal.throwIfAborted();
20
+ }
21
+ preparation() {
22
+ this.available();
23
+ if (!this.provider)
24
+ throw new Error('Sandbox provider is unavailable.');
25
+ return (this.prepared ??= this.provider.prepare(this.input));
26
+ }
27
+ async instructions(tools) {
28
+ if (!tools.some((name) => name === 'bash' || name === 'skill'))
29
+ return '';
30
+ return (await this.preparation()).instructions;
31
+ }
32
+ async getSandbox() {
33
+ this.available();
34
+ const sandbox = await (this.owner.sandbox ??= this.preparation().then((prepared) => {
35
+ this.available();
36
+ return prepared.create();
37
+ }));
38
+ this.available();
39
+ return sandbox;
40
+ }
41
+ async readSkill(name) {
42
+ const prepared = await this.preparation();
43
+ this.available();
44
+ return prepared.readSkill(name);
45
+ }
46
+ dispose() {
47
+ if (this.cleanup)
48
+ return this.cleanup;
49
+ this.closed = true;
50
+ this.cleanup = (async () => {
51
+ // Creation failures release partial resources in the provider, not here.
52
+ const sandbox = await this.owner.sandbox?.catch(() => undefined);
53
+ await sandbox?.dispose();
54
+ const prepared = await this.prepared?.catch(() => undefined);
55
+ prepared?.dispose();
56
+ })().catch((error) => {
57
+ this.cleanup = undefined;
58
+ throw error;
59
+ });
60
+ return this.cleanup;
61
+ }
62
+ }
63
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../../../server/online/sandbox/execution.ts"],"names":[],"mappings":"AAQA,mFAAmF;AACnF,MAAM,OAAO,mBAAmB;IAMnB;IACQ;IACA;IACA;IARX,QAAQ,CAAqD;IAC7D,MAAM,GAAG,KAAK,CAAC;IACf,OAAO,CAA4B;IAE3C,YACW,EAAU,EACF,KAAgD,EAChD,KAA8B,EAC9B,QAAgD;QAHxD,OAAE,GAAF,EAAE,CAAQ;QACF,UAAK,GAAL,KAAK,CAA2C;QAChD,UAAK,GAAL,KAAK,CAAyB;QAC9B,aAAQ,GAAR,QAAQ,CAAwC;IAChE,CAAC;IAEI,SAAS;QACf,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IAC7C,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAwB;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1E,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CACnE,CAAC,QAAQ,EAAE,EAAE;YACX,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3B,CAAC,CACF,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YACzB,yEAAyE;YACzE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACjE,MAAM,OAAO,EAAE,OAAO,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC7D,QAAQ,EAAE,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { type IFileSystem } from '../../vendor/just-bash.js';
2
+ /** The historical read-only guard over just-bash's filesystem; storage and quotas belong to InMemoryFs. */
3
+ export declare function createSandboxFilesystem(files: Record<string, string>, maxTotalBytes?: number, unreadable?: ReadonlyMap<string, string>): {
4
+ fs: IFileSystem;
5
+ lock(): void;
6
+ dispose(): Promise<void>;
7
+ };
8
+ //# sourceMappingURL=filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../../server/online/sandbox/filesystem.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AA2BzE,2GAA2G;AAC3G,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,aAAa,GAAE,MAAsC,EACrD,UAAU,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GAClD;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,IAAI,IAAI,IAAI,CAAC;IAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA8C7D"}
@@ -0,0 +1,72 @@
1
+ import { posix } from 'node:path';
2
+ import { InMemoryFs } from '../../vendor/just-bash.js';
3
+ import { sandboxLimits } from './limits.js';
4
+ const MUTATORS = new Set([
5
+ 'writeFile',
6
+ 'appendFile',
7
+ 'mkdir',
8
+ 'mkdirSync',
9
+ 'rm',
10
+ 'cp',
11
+ 'mv',
12
+ 'chmod',
13
+ 'utimes',
14
+ 'createExclusive',
15
+ 'writeFileSync',
16
+ 'writeFileLazy',
17
+ ]);
18
+ class FsError extends Error {
19
+ code;
20
+ constructor(code, message) {
21
+ super(message);
22
+ this.code = code;
23
+ }
24
+ }
25
+ /** The historical read-only guard over just-bash's filesystem; storage and quotas belong to InMemoryFs. */
26
+ export function createSandboxFilesystem(files, maxTotalBytes = sandboxLimits.filesystemBytes, unreadable = new Map()) {
27
+ const inner = new InMemoryFs(files, { maxTotalBytes });
28
+ inner.writeFileSync('/tmp/.keep', '');
29
+ let locked = false;
30
+ const writable = (path) => {
31
+ if (typeof path !== 'string' || path.includes('\0'))
32
+ return false;
33
+ const normalized = posix.resolve('/', path);
34
+ return normalized === '/tmp' || normalized.startsWith('/tmp/');
35
+ };
36
+ const fs = new Proxy(inner, {
37
+ get(target, property, receiver) {
38
+ const value = Reflect.get(target, property, receiver);
39
+ if (typeof value !== 'function')
40
+ return value;
41
+ const name = String(property);
42
+ return (...args) => {
43
+ if (['readFile', 'readFileBytes', 'readFileBuffer', 'cp'].includes(name) &&
44
+ typeof args[0] === 'string') {
45
+ const reason = unreadable.get(posix.resolve('/', args[0]));
46
+ if (reason)
47
+ throw new FsError('EACCES', reason);
48
+ }
49
+ // Skills contain no links; refusing new links keeps the guard's normalized paths authoritative.
50
+ if (locked && (name === 'symlink' || name === 'link'))
51
+ throw new FsError('EPERM', 'EPERM: links are unavailable.');
52
+ if (locked && MUTATORS.has(name)) {
53
+ const written = name === 'cp' || name === 'mv' ? args[1] : args[0];
54
+ const touched = name === 'mv' ? [args[0], args[1]] : [written];
55
+ if (!touched.every(writable))
56
+ throw new FsError('EROFS', 'EROFS: only /tmp is writable.');
57
+ }
58
+ return value.apply(target, args);
59
+ };
60
+ },
61
+ });
62
+ return {
63
+ fs,
64
+ lock() {
65
+ locked = true;
66
+ },
67
+ async dispose() {
68
+ await inner.rm('/', { recursive: true, force: true });
69
+ },
70
+ };
71
+ }
72
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../../../server/online/sandbox/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAoB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,WAAW;IACX,YAAY;IACZ,OAAO;IACP,WAAW;IACX,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,iBAAiB;IACjB,eAAe;IACf,eAAe;CAChB,CAAC,CAAC;AAEH,MAAM,OAAQ,SAAQ,KAAK;IAEP;IADlB,YACkB,IAAY,EAC5B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;IAI9B,CAAC;CACF;AAED,2GAA2G;AAC3G,MAAM,UAAU,uBAAuB,CACrC,KAA6B,EAC7B,gBAAwB,aAAa,CAAC,eAAe,EACrD,aAA0C,IAAI,GAAG,EAAE;IAEnD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAW,EAAE;QAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAClE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5C,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC,CAAC;IACF,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;QAC1B,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YAC5B,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/D,IAAI,OAAO,KAAK,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;gBAC5B,IACE,CAAC,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,QAAQ,CAC5D,IAAI,CACL;oBACD,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAC3B,CAAC;oBACD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3D,IAAI,MAAM;wBAAE,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClD,CAAC;gBACD,gGAAgG;gBAChG,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,CAAC;oBACnD,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;gBAC9D,IAAI,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACnE,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC/D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;wBAC1B,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAQ,KAAyC,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxE,CAAC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IACH,OAAO;QACL,EAAE;QACF,IAAI;YACF,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,OAAO;YACX,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const sandboxLimits: Readonly<Record<'skillBytes' | 'filesystemBytes' | 'durationMs' | 'shellOutput' | 'modelOutput', number>>;
2
+ export declare function clip(value: string): string;
3
+ export declare function responseText(response: Response, signal?: AbortSignal): Promise<string>;
4
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../../../server/online/sandbox/limits.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,EAAE,QAAQ,CAClC,MAAM,CACF,YAAY,GACZ,iBAAiB,GACjB,YAAY,GACZ,aAAa,GACb,aAAa,EACf,MAAM,CACP,CAQD,CAAC;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1C;AACD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
@@ -0,0 +1,46 @@
1
+ export const sandboxLimits = Object.freeze({
2
+ skillBytes: 5 * 1024 * 1024,
3
+ // Historical aggregate budget: 5 MiB Skill mount + 1 MiB nominal scratch + 1 MiB overhead.
4
+ filesystemBytes: 7 * 1024 * 1024,
5
+ durationMs: 10000,
6
+ shellOutput: 1024 * 1024,
7
+ modelOutput: 24000,
8
+ });
9
+ export function clip(value) {
10
+ return value.length > sandboxLimits.modelOutput
11
+ ? value.slice(0, sandboxLimits.modelOutput) + '\n[Output truncated]'
12
+ : value;
13
+ }
14
+ export async function responseText(response, signal) {
15
+ if (!response.body)
16
+ return '';
17
+ const reader = response.body.getReader();
18
+ const chunks = [];
19
+ let cancellation;
20
+ const cancel = () => (cancellation ??= reader.cancel(signal?.reason));
21
+ const onAbort = () => {
22
+ void cancel().catch(() => { });
23
+ };
24
+ signal?.addEventListener('abort', onAbort, { once: true });
25
+ try {
26
+ signal?.throwIfAborted();
27
+ for (;;) {
28
+ const part = await reader.read();
29
+ signal?.throwIfAborted();
30
+ if (part.done)
31
+ break;
32
+ chunks.push(part.value);
33
+ }
34
+ return Buffer.concat(chunks).toString('utf8');
35
+ }
36
+ finally {
37
+ signal?.removeEventListener('abort', onAbort);
38
+ try {
39
+ await cancel();
40
+ }
41
+ finally {
42
+ reader.releaseLock();
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../../../../server/online/sandbox/limits.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAStB,MAAM,CAAC,MAAM,CAAC;IAChB,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IAC3B,2FAA2F;IAC3F,eAAe,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IAChC,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,IAAI,GAAG,IAAI;IACxB,WAAW,EAAE,KAAK;CACnB,CAAC,CAAC;AACH,MAAM,UAAU,IAAI,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW;QAC7C,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,sBAAsB;QACpE,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAkB,EAClB,MAAoB;IAEpB,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,YAAuC,CAAC;IAC5C,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,SAAS,CAAC;YACR,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM;YACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,EAAE,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { SkillService } from '../../core/skills/skill.service.js';
2
+ import type { OnlineAgentSandboxProvider, OnlineAgentSandboxOptions } from './types.js';
3
+ type SandboxDependencies = OnlineAgentSandboxOptions & {
4
+ skills: SkillService;
5
+ };
6
+ /** Prepare Skills without credentials; own the CLI lease only while a Sandbox exists. */
7
+ export declare function createSandboxProvider(deps: SandboxDependencies): OnlineAgentSandboxProvider;
8
+ export {};
9
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../server/online/sandbox/provider.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EACV,0BAA0B,EAK1B,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAMpB,KAAK,mBAAmB,GAAG,yBAAyB,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AAMhF,yFAAyF;AACzF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,mBAAmB,GACxB,0BAA0B,CAI5B"}
@@ -0,0 +1,237 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { HEADERS } from '@nocobase/agent-protocol';
3
+ import { callerIdentityOf } from '../../cli/run-credential.js';
4
+ import { Bash, getCommandNames, } from '../../vendor/just-bash.js';
5
+ import { createSandboxFilesystem } from './filesystem.js';
6
+ import { loadSkills } from './skills.js';
7
+ import { cliCommand } from './cli-command.js';
8
+ import { sandboxLimits, clip } from './limits.js';
9
+ /** Prepare Skills without credentials; own the CLI lease only while a Sandbox exists. */
10
+ export function createSandboxProvider(deps) {
11
+ return {
12
+ prepare: (input) => prepareSandbox(deps, input),
13
+ };
14
+ }
15
+ async function prepareSandbox(deps, input) {
16
+ input.context.signal.throwIfAborted();
17
+ const loaded = await loadSkills(deps.skills, input.skill, deps.builtinSkills);
18
+ return new PreparedSandbox(deps, input, loaded);
19
+ }
20
+ /** The selected Skill snapshot exists before any filesystem, CLI or credential is allocated. */
21
+ class PreparedSandbox {
22
+ deps;
23
+ input;
24
+ loaded;
25
+ instructions;
26
+ released = false;
27
+ constructor(deps, input, loaded) {
28
+ this.deps = deps;
29
+ this.input = input;
30
+ this.loaded = loaded;
31
+ this.instructions = this.sandboxInstructions(deps.bin?.());
32
+ }
33
+ sandboxInstructions(bin) {
34
+ return [
35
+ 'Virtual shell: /tmp is the only writable directory; /skills is read-only. No host files, environment, network or external runtimes.',
36
+ bin
37
+ ? 'Application CLI: ' +
38
+ bin +
39
+ '. Use --help to discover current commands. Authorization and business rules apply; never retry an uncertain write without checking its result.'
40
+ : 'No application CLI is configured.',
41
+ 'Selected skills (read with skill or cat only when needed):',
42
+ ...[...this.loaded.skills].map(([slug, skill]) => slug + ': ' + skill.description + ' (/skills/' + slug + '/SKILL.md)'),
43
+ ].join('\n');
44
+ }
45
+ readSkill(name) {
46
+ if (this.released)
47
+ return Promise.reject(new Error('Execution is closed.'));
48
+ this.input.context.signal.throwIfAborted();
49
+ const skill = this.loaded.skills.get(name);
50
+ return Promise.resolve({
51
+ ok: !!skill,
52
+ output: skill
53
+ ? clip([skill.markdown, 'Support files:', ...skill.listing].join('\n'))
54
+ : 'Unknown selected skill.',
55
+ });
56
+ }
57
+ async create() {
58
+ if (this.released)
59
+ throw new Error('Execution is closed.');
60
+ this.input.context.signal.throwIfAborted();
61
+ const filesystem = createSandboxFilesystem(this.loaded.files, undefined, this.loaded.unreadable);
62
+ // InMemoryFs owns the mounted storage; do not retain a second file map.
63
+ this.clearFiles();
64
+ return createSandbox(this, this.deps, this.input, filesystem);
65
+ }
66
+ close() {
67
+ this.released = true;
68
+ }
69
+ dispose() {
70
+ this.close();
71
+ this.loaded.skills.clear();
72
+ this.clearFiles();
73
+ }
74
+ clearFiles() {
75
+ for (const path of Object.keys(this.loaded.files))
76
+ delete this.loaded.files[path];
77
+ }
78
+ }
79
+ /** Creation owns partial-resource cleanup, including failures before a shell is returned. */
80
+ async function createSandbox(preparation, deps, input, filesystem) {
81
+ let lease;
82
+ try {
83
+ const application = deps.cli?.();
84
+ let surface;
85
+ if (application) {
86
+ lease = application.credentials.issue(input.context.user.id, input.executionId ?? randomUUID());
87
+ surface = await loadCommandSurface(application, lease.token);
88
+ }
89
+ return new SandboxExecution(preparation, input, filesystem, surface, lease);
90
+ }
91
+ catch (error) {
92
+ try {
93
+ await filesystem.dispose();
94
+ }
95
+ finally {
96
+ lease?.release();
97
+ }
98
+ throw error;
99
+ }
100
+ }
101
+ async function loadCommandSurface(application, token) {
102
+ const session = await application.auth.getSession(new Headers({ [HEADERS.runToken]: token }));
103
+ const identity = callerIdentityOf(session ?? undefined);
104
+ if (!identity)
105
+ throw new Error('OnlineAgent caller is unavailable.');
106
+ const surface = await application.commandsOf(identity, token);
107
+ if (surface && !/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/u.test(surface.bin))
108
+ throw new Error('Invalid application CLI brand.');
109
+ return surface;
110
+ }
111
+ function createBash(filesystem, command) {
112
+ return new Bash({
113
+ fs: filesystem.fs,
114
+ cwd: '/tmp',
115
+ env: { HOME: '/tmp' },
116
+ executionLimitProfile: 'hardened',
117
+ commands: getCommandNames().filter((name) => name !== 'sqlite3'),
118
+ python: false,
119
+ javascript: false,
120
+ customCommands: command ? [command] : [],
121
+ executionLimits: {
122
+ maxOutputSize: sandboxLimits.shellOutput,
123
+ maxExecutionTimeMs: sandboxLimits.durationMs,
124
+ },
125
+ });
126
+ }
127
+ function shellResult(result) {
128
+ return {
129
+ ok: result.exitCode === 0,
130
+ output: clip([
131
+ 'exit code ' + result.exitCode,
132
+ result.stdout ? result.stdout.replace(/\n$/u, '') : '',
133
+ result.stderr ? '[stderr]\n' + result.stderr.replace(/\n$/u, '') : '',
134
+ ]
135
+ .filter(Boolean)
136
+ .join('\n')),
137
+ exitCode: result.exitCode,
138
+ };
139
+ }
140
+ /** Own serialized shell calls, real CLI work and retryable cleanup for one execution. */
141
+ class SandboxExecution {
142
+ preparation;
143
+ input;
144
+ filesystem;
145
+ lease;
146
+ instructions;
147
+ bash;
148
+ abort = new AbortController();
149
+ work = new Set();
150
+ queue = Promise.resolve();
151
+ cleanup;
152
+ closed = false;
153
+ constructor(preparation, input, filesystem, surface, lease) {
154
+ this.preparation = preparation;
155
+ this.input = input;
156
+ this.filesystem = filesystem;
157
+ this.lease = lease;
158
+ const cli = surface ? cliCommand(surface, input.context.signal) : undefined;
159
+ this.bash = createBash(filesystem, cli ? this.trackCommand(cli) : undefined);
160
+ filesystem.lock();
161
+ this.instructions = preparation.sandboxInstructions(surface?.bin);
162
+ }
163
+ trackCommand(command) {
164
+ return {
165
+ ...command,
166
+ execute: (args, ctx) => {
167
+ // Bash can detach a cancelled command; keep owning its actual application work.
168
+ const task = command.execute(args, ctx);
169
+ this.work.add(task);
170
+ void task.finally(() => this.work.delete(task)).catch(() => { });
171
+ return task;
172
+ },
173
+ };
174
+ }
175
+ exec(command, options) {
176
+ if (this.closed)
177
+ return Promise.reject(new Error('Sandbox is closed.'));
178
+ // The deadline includes time spent waiting in the queue.
179
+ const deadline = AbortSignal.timeout(sandboxLimits.durationMs);
180
+ const signal = AbortSignal.any([
181
+ this.input.context.signal,
182
+ this.abort.signal,
183
+ deadline,
184
+ ...(options.abortSignal ? [options.abortSignal] : []),
185
+ ]);
186
+ const task = this.queue
187
+ .catch(() => { })
188
+ .then(() => this.run(command, signal));
189
+ this.queue = task;
190
+ return task;
191
+ }
192
+ async run(command, signal) {
193
+ signal.throwIfAborted();
194
+ try {
195
+ return shellResult(await this.bash.exec(command, { signal }));
196
+ }
197
+ catch (error) {
198
+ signal.throwIfAborted();
199
+ return {
200
+ ok: false,
201
+ output: clip(error instanceof Error ? error.message : 'Virtual shell failed.'),
202
+ exitCode: 1,
203
+ };
204
+ }
205
+ finally {
206
+ // Cancellation must not release the execution gate before real CLI work exits.
207
+ await Promise.allSettled([...this.work]);
208
+ signal.throwIfAborted();
209
+ }
210
+ }
211
+ readSkill(name) {
212
+ if (this.closed)
213
+ return Promise.reject(new Error('Sandbox is closed.'));
214
+ return this.preparation.readSkill(name);
215
+ }
216
+ dispose() {
217
+ if (this.cleanup)
218
+ return this.cleanup;
219
+ this.closed = true;
220
+ this.preparation.close();
221
+ this.abort.abort();
222
+ this.cleanup = this.releaseResources().catch((error) => {
223
+ // A failed cleanup is retryable, but never reopens this execution.
224
+ this.cleanup = undefined;
225
+ throw error;
226
+ });
227
+ return this.cleanup;
228
+ }
229
+ async releaseResources() {
230
+ await this.queue.catch(() => { });
231
+ await Promise.allSettled([...this.work]);
232
+ await this.filesystem.dispose();
233
+ this.preparation.dispose();
234
+ this.lease?.release();
235
+ }
236
+ }
237
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../server/online/sandbox/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { SkillService } from '../../core/skills/skill.service.js';
2
+ import type { OnlineAgentSandboxSkillCatalog } from './types.js';
3
+ /** Read current resources once per SDK segment; no resource versions survive preparation. */
4
+ export declare function loadSkills(service: SkillService, ids: readonly string[], builtinSkills?: OnlineAgentSandboxSkillCatalog): Promise<{
5
+ skills: Map<string, {
6
+ name: string;
7
+ description: string;
8
+ markdown: string;
9
+ listing: string[];
10
+ }>;
11
+ files: Record<string, string>;
12
+ unreadable: Map<string, string>;
13
+ }>;
14
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../../server/online/sandbox/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAGjE,6FAA6F;AAC7F,wBAAsB,UAAU,CAC9B,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,aAAa,CAAC,EAAE,8BAA8B,GAC7C,OAAO,CAAC;IACT,MAAM,EAAE,GAAG,CACT,MAAM,EACN;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAC3E,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC,CA4DD"}
@@ -0,0 +1,56 @@
1
+ import { skillFilePathProblem } from '../../../shared/skills.js';
2
+ import { sandboxLimits } from './limits.js';
3
+ /** Read current resources once per SDK segment; no resource versions survive preparation. */
4
+ export async function loadSkills(service, ids, builtinSkills) {
5
+ const skills = new Map();
6
+ const files = {};
7
+ const unreadable = new Map();
8
+ let bytes = 0;
9
+ const selected = [];
10
+ for (const id of ids) {
11
+ // Selection is a trusted server scope. SkillService has no per-user read/enable policy.
12
+ const builtin = builtinSkills?.get(id);
13
+ const current = builtin ? await builtin() : await service.get(id);
14
+ if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(current.slug) ||
15
+ skills.has(current.slug))
16
+ throw new Error('Invalid or duplicate selected skill slug.');
17
+ bytes += Buffer.byteLength(current.content);
18
+ if (bytes > sandboxLimits.skillBytes)
19
+ throw new Error('Selected skill entry exceeds mount budget.');
20
+ skills.set(current.slug, {
21
+ name: current.name,
22
+ description: current.description,
23
+ markdown: current.content,
24
+ listing: [],
25
+ });
26
+ files['/skills/' + current.slug + '/SKILL.md'] = current.content;
27
+ selected.push(current);
28
+ }
29
+ // Reserve all entry documents before admitting supporting text in stable path order.
30
+ for (const current of selected) {
31
+ const paths = new Set();
32
+ for (const file of [...current.files].sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0)) {
33
+ if (skillFilePathProblem(file.path) || paths.has(file.path))
34
+ throw new Error('Invalid or duplicate skill support path.');
35
+ paths.add(file.path);
36
+ const path = '/skills/' + current.slug + '/' + file.path;
37
+ const size = file.content === null ? 0 : Buffer.byteLength(file.content);
38
+ const reason = file.content === null
39
+ ? 'Binary skill file is not readable.'
40
+ : bytes + size > sandboxLimits.skillBytes
41
+ ? 'Skill file exceeds mount budget.'
42
+ : undefined;
43
+ skills
44
+ .get(current.slug)
45
+ .listing.push(file.path + (reason ? ' [unreadable: ' + reason + ']' : ''));
46
+ if (reason)
47
+ unreadable.set(path, reason);
48
+ else {
49
+ files[path] = file.content;
50
+ bytes += size;
51
+ }
52
+ }
53
+ }
54
+ return { skills, files, unreadable };
55
+ }
56
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../../server/online/sandbox/skills.ts"],"names":[],"mappings":"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"}