@geminixiang/mikan 1.0.0-beta.21 → 1.0.0-beta.23

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 (199) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +12 -8
  3. package/dist/adapters/discord/bot.d.ts.map +1 -1
  4. package/dist/adapters/discord/bot.js +13 -14
  5. package/dist/adapters/discord/bot.js.map +1 -1
  6. package/dist/adapters/intake.d.ts.map +1 -1
  7. package/dist/adapters/intake.js +5 -0
  8. package/dist/adapters/intake.js.map +1 -1
  9. package/dist/adapters/slack/bot.d.ts.map +1 -1
  10. package/dist/adapters/slack/bot.js +13 -2
  11. package/dist/adapters/slack/bot.js.map +1 -1
  12. package/dist/adapters/slack/types.d.ts +2 -0
  13. package/dist/adapters/slack/types.d.ts.map +1 -1
  14. package/dist/adapters/slack/types.js.map +1 -1
  15. package/dist/agent.d.ts.map +1 -1
  16. package/dist/agent.js +34 -24
  17. package/dist/agent.js.map +1 -1
  18. package/dist/cli/boot.d.ts +1 -1
  19. package/dist/cli/boot.d.ts.map +1 -1
  20. package/dist/cli/boot.js +7 -15
  21. package/dist/cli/boot.js.map +1 -1
  22. package/dist/commands/login.js +2 -2
  23. package/dist/commands/login.js.map +1 -1
  24. package/dist/commands/sandbox.d.ts.map +1 -1
  25. package/dist/commands/sandbox.js +4 -7
  26. package/dist/commands/sandbox.js.map +1 -1
  27. package/dist/commands/text.js +1 -1
  28. package/dist/commands/text.js.map +1 -1
  29. package/dist/config.d.ts.map +1 -1
  30. package/dist/config.js +12 -39
  31. package/dist/config.js.map +1 -1
  32. package/dist/execution-resolver.d.ts +6 -8
  33. package/dist/execution-resolver.d.ts.map +1 -1
  34. package/dist/execution-resolver.js +73 -107
  35. package/dist/execution-resolver.js.map +1 -1
  36. package/dist/harness/index.d.ts +1 -1
  37. package/dist/harness/index.d.ts.map +1 -1
  38. package/dist/harness/index.js.map +1 -1
  39. package/dist/harness/runner.d.ts +9 -6
  40. package/dist/harness/runner.d.ts.map +1 -1
  41. package/dist/harness/runner.js +42 -20
  42. package/dist/harness/runner.js.map +1 -1
  43. package/dist/harness/subagent-runner.d.ts +14 -13
  44. package/dist/harness/subagent-runner.d.ts.map +1 -1
  45. package/dist/harness/subagent-runner.js +116 -24
  46. package/dist/harness/subagent-runner.js.map +1 -1
  47. package/dist/harness/types.d.ts +14 -0
  48. package/dist/harness/types.d.ts.map +1 -1
  49. package/dist/harness/types.js.map +1 -1
  50. package/dist/harness/usage.d.ts +6 -0
  51. package/dist/harness/usage.d.ts.map +1 -0
  52. package/dist/harness/usage.js +32 -0
  53. package/dist/harness/usage.js.map +1 -0
  54. package/dist/index.d.ts +3 -2
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +1 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/main.js +19 -87
  59. package/dist/main.js.map +1 -1
  60. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  61. package/dist/runtime/conversation-runtime.js +23 -79
  62. package/dist/runtime/conversation-runtime.js.map +1 -1
  63. package/dist/runtime/session-lifecycle.d.ts +19 -0
  64. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  65. package/dist/runtime/session-lifecycle.js +76 -0
  66. package/dist/runtime/session-lifecycle.js.map +1 -0
  67. package/dist/runtime/types.d.ts +5 -0
  68. package/dist/runtime/types.d.ts.map +1 -1
  69. package/dist/runtime/types.js.map +1 -1
  70. package/dist/sandbox/agent-sandbox.d.ts +18 -0
  71. package/dist/sandbox/agent-sandbox.d.ts.map +1 -0
  72. package/dist/sandbox/agent-sandbox.js +234 -0
  73. package/dist/sandbox/agent-sandbox.js.map +1 -0
  74. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  75. package/dist/sandbox/cloudflare.js +1 -0
  76. package/dist/sandbox/cloudflare.js.map +1 -1
  77. package/dist/sandbox/container.d.ts.map +1 -1
  78. package/dist/sandbox/container.js +1 -0
  79. package/dist/sandbox/container.js.map +1 -1
  80. package/dist/sandbox/host.d.ts.map +1 -1
  81. package/dist/sandbox/host.js +1 -0
  82. package/dist/sandbox/host.js.map +1 -1
  83. package/dist/sandbox/identity.d.ts +11 -16
  84. package/dist/sandbox/identity.d.ts.map +1 -1
  85. package/dist/sandbox/identity.js +32 -26
  86. package/dist/sandbox/identity.js.map +1 -1
  87. package/dist/sandbox/image.d.ts.map +1 -1
  88. package/dist/sandbox/image.js +1 -0
  89. package/dist/sandbox/image.js.map +1 -1
  90. package/dist/sandbox/index.d.ts +7 -7
  91. package/dist/sandbox/index.d.ts.map +1 -1
  92. package/dist/sandbox/index.js +13 -9
  93. package/dist/sandbox/index.js.map +1 -1
  94. package/dist/sandbox/types.d.ts +17 -16
  95. package/dist/sandbox/types.d.ts.map +1 -1
  96. package/dist/sandbox/types.js.map +1 -1
  97. package/dist/sessions/session-key.d.ts +9 -0
  98. package/dist/sessions/session-key.d.ts.map +1 -1
  99. package/dist/sessions/session-key.js +50 -2
  100. package/dist/sessions/session-key.js.map +1 -1
  101. package/dist/sessions/store.d.ts.map +1 -1
  102. package/dist/sessions/store.js +36 -8
  103. package/dist/sessions/store.js.map +1 -1
  104. package/dist/tools/sandbox.d.ts.map +1 -1
  105. package/dist/tools/sandbox.js +4 -5
  106. package/dist/tools/sandbox.js.map +1 -1
  107. package/dist/tools/subagent-slots.d.ts +3 -3
  108. package/dist/tools/subagent-slots.d.ts.map +1 -1
  109. package/dist/tools/subagent-slots.js +25 -10
  110. package/dist/tools/subagent-slots.js.map +1 -1
  111. package/dist/tools/subagent.d.ts +13 -2
  112. package/dist/tools/subagent.d.ts.map +1 -1
  113. package/dist/tools/subagent.js +16 -16
  114. package/dist/tools/subagent.js.map +1 -1
  115. package/dist/types.d.ts +14 -63
  116. package/dist/types.d.ts.map +1 -1
  117. package/dist/types.js.map +1 -1
  118. package/dist/vault/injection.d.ts +4 -14
  119. package/dist/vault/injection.d.ts.map +1 -1
  120. package/dist/vault/injection.js +5 -2
  121. package/dist/vault/injection.js.map +1 -1
  122. package/dist/vault/policy.d.ts +3 -3
  123. package/dist/vault/policy.d.ts.map +1 -1
  124. package/dist/vault/policy.js +6 -4
  125. package/dist/vault/policy.js.map +1 -1
  126. package/dist/vault/types.d.ts +4 -0
  127. package/dist/vault/types.d.ts.map +1 -1
  128. package/dist/vault/types.js.map +1 -1
  129. package/dist/web/admin/portal.js +2 -2
  130. package/dist/web/admin/portal.js.map +1 -1
  131. package/dist/workspace-projection/index.d.ts +5 -0
  132. package/dist/workspace-projection/index.d.ts.map +1 -0
  133. package/dist/workspace-projection/index.js +71 -0
  134. package/dist/workspace-projection/index.js.map +1 -0
  135. package/dist/workspace-projection/types.d.ts +7 -0
  136. package/dist/workspace-projection/types.d.ts.map +1 -0
  137. package/dist/workspace-projection/types.js +2 -0
  138. package/dist/workspace-projection/types.js.map +1 -0
  139. package/package.json +3 -3
  140. package/dist/sandbox/firecracker.d.ts +0 -18
  141. package/dist/sandbox/firecracker.d.ts.map +0 -1
  142. package/dist/sandbox/firecracker.js +0 -221
  143. package/dist/sandbox/firecracker.js.map +0 -1
  144. package/dist/sandbox/gondolin-bootstrap.d.ts +0 -26
  145. package/dist/sandbox/gondolin-bootstrap.d.ts.map +0 -1
  146. package/dist/sandbox/gondolin-bootstrap.js +0 -27
  147. package/dist/sandbox/gondolin-bootstrap.js.map +0 -1
  148. package/dist/sandbox/gondolin-contract.d.ts +0 -125
  149. package/dist/sandbox/gondolin-contract.d.ts.map +0 -1
  150. package/dist/sandbox/gondolin-contract.js +0 -155
  151. package/dist/sandbox/gondolin-contract.js.map +0 -1
  152. package/dist/sandbox/gondolin-fleet.d.ts +0 -104
  153. package/dist/sandbox/gondolin-fleet.d.ts.map +0 -1
  154. package/dist/sandbox/gondolin-fleet.js +0 -330
  155. package/dist/sandbox/gondolin-fleet.js.map +0 -1
  156. package/dist/sandbox/gondolin-gateway.d.ts +0 -86
  157. package/dist/sandbox/gondolin-gateway.d.ts.map +0 -1
  158. package/dist/sandbox/gondolin-gateway.js +0 -407
  159. package/dist/sandbox/gondolin-gateway.js.map +0 -1
  160. package/dist/sandbox/gondolin-inventory.d.ts +0 -75
  161. package/dist/sandbox/gondolin-inventory.d.ts.map +0 -1
  162. package/dist/sandbox/gondolin-inventory.js +0 -257
  163. package/dist/sandbox/gondolin-inventory.js.map +0 -1
  164. package/dist/sandbox/gondolin-join.d.ts +0 -62
  165. package/dist/sandbox/gondolin-join.d.ts.map +0 -1
  166. package/dist/sandbox/gondolin-join.js +0 -261
  167. package/dist/sandbox/gondolin-join.js.map +0 -1
  168. package/dist/sandbox/gondolin-nfs-advisory.d.ts +0 -15
  169. package/dist/sandbox/gondolin-nfs-advisory.d.ts.map +0 -1
  170. package/dist/sandbox/gondolin-nfs-advisory.js +0 -60
  171. package/dist/sandbox/gondolin-nfs-advisory.js.map +0 -1
  172. package/dist/sandbox/gondolin-placement.d.ts +0 -30
  173. package/dist/sandbox/gondolin-placement.d.ts.map +0 -1
  174. package/dist/sandbox/gondolin-placement.js +0 -77
  175. package/dist/sandbox/gondolin-placement.js.map +0 -1
  176. package/dist/sandbox/gondolin-recovery.d.ts +0 -33
  177. package/dist/sandbox/gondolin-recovery.d.ts.map +0 -1
  178. package/dist/sandbox/gondolin-recovery.js +0 -39
  179. package/dist/sandbox/gondolin-recovery.js.map +0 -1
  180. package/dist/sandbox/gondolin-remote.d.ts +0 -70
  181. package/dist/sandbox/gondolin-remote.d.ts.map +0 -1
  182. package/dist/sandbox/gondolin-remote.js +0 -325
  183. package/dist/sandbox/gondolin-remote.js.map +0 -1
  184. package/dist/sandbox/gondolin-worker-client.d.ts +0 -135
  185. package/dist/sandbox/gondolin-worker-client.d.ts.map +0 -1
  186. package/dist/sandbox/gondolin-worker-client.js +0 -323
  187. package/dist/sandbox/gondolin-worker-client.js.map +0 -1
  188. package/dist/sandbox/gondolin-worker-main.d.ts +0 -2
  189. package/dist/sandbox/gondolin-worker-main.d.ts.map +0 -1
  190. package/dist/sandbox/gondolin-worker-main.js +0 -22
  191. package/dist/sandbox/gondolin-worker-main.js.map +0 -1
  192. package/dist/sandbox/gondolin-worker.d.ts +0 -17
  193. package/dist/sandbox/gondolin-worker.d.ts.map +0 -1
  194. package/dist/sandbox/gondolin-worker.js +0 -201
  195. package/dist/sandbox/gondolin-worker.js.map +0 -1
  196. package/dist/sandbox/gondolin.d.ts +0 -53
  197. package/dist/sandbox/gondolin.d.ts.map +0 -1
  198. package/dist/sandbox/gondolin.js +0 -429
  199. package/dist/sandbox/gondolin.js.map +0 -1
package/dist/agent.js CHANGED
@@ -172,12 +172,12 @@ function buildEnvDescription(sandboxType, workspaceRoot) {
172
172
  - Bash commands start in: ${workspaceRoot}
173
173
  - Install tools with the container's package manager
174
174
  - Your changes persist across sessions`;
175
- case "firecracker":
176
- return `You are running inside a Firecracker microVM.
175
+ case "agent-sandbox":
176
+ return `You are running inside a Kata-isolated Agent Sandbox microVM.
177
177
  - Runtime workspace root: ${workspaceRoot}
178
- - Use cd or absolute paths; project files are under ${workspaceRoot}
179
- - Install tools with: apt-get install <package> (Debian-based)
180
- - Your changes persist across sessions`;
178
+ - Bash commands start in: ${workspaceRoot}
179
+ - The workspace is shared with the mikan control plane
180
+ - Your sandbox is released after its idle timeout`;
181
181
  case "cloudflare":
182
182
  return `You are running through a Cloudflare Sandbox bridge.
183
183
  - Runtime workspace root: ${workspaceRoot}
@@ -205,8 +205,7 @@ export function resolveTriggerAttribution(message) {
205
205
  function buildSystemPrompt(workspacePath, conversationId, conversationKind, currentUserId, memory, sandboxConfig, platform, skills) {
206
206
  const { workspaceRoot, conversationPath, scratchPath } = buildRuntimePaths(workspacePath, conversationId);
207
207
  const sandboxType = sandboxConfig.type;
208
- const isContainerLike = sandboxType === "container" || sandboxType === "image";
209
- const isFirecracker = sandboxType === "firecracker";
208
+ const isContainerLike = sandboxType === "container" || sandboxType === "image" || sandboxType === "agent-sandbox";
210
209
  // Format channel mappings
211
210
  const channelMappings = platform.channels.length > 0
212
211
  ? platform.channels.map((c) => `${c.id}\t#${c.name}`).join("\n")
@@ -325,7 +324,7 @@ Update this file whenever you modify the environment. On fresh container, read i
325
324
  Format: \`{"date":"...","ts":"...","user":"...","userName":"...","text":"...","isMessagingBot":false}\`
326
325
  The log contains user messages and your final responses (not tool calls/results).
327
326
  Use \`log.jsonl\` for quick grep-style history. Use \`${conversationPath}/sessions/\` when you need structured turns, tool outputs, or thread/session lineage.
328
- ${isContainerLike || isFirecracker ? "Install jq: apt-get install jq" : ""}
327
+ ${isContainerLike ? "Install jq using the runtime image's package manager." : ""}
329
328
  \`\`\`bash
330
329
  # Recent messages
331
330
  tail -30 log.jsonl | jq -c '{date: .date[0:19], user: (.userName // .user), text}'
@@ -695,7 +694,7 @@ function buildThreadSessionName(message) {
695
694
  }
696
695
  function createRunnerExecutionContext(sandboxConfig, vaultManager, provisioner, workspaceDir, hostWorkspacePath) {
697
696
  const executionResolver = vaultManager && sandboxConfig.type !== "host"
698
- ? new ActorExecutionResolver(sandboxConfig, vaultManager, provisioner, workspaceDir, hostWorkspacePath)
697
+ ? new ActorExecutionResolver(sandboxConfig, vaultManager, provisioner, workspaceDir)
699
698
  : undefined;
700
699
  // activeExecutor is replaced at the start of each run() call when executionResolver
701
700
  // is present, so the stable `executor` wrapper always delegates to the latest resolved value.
@@ -770,6 +769,7 @@ async function createConfiguredAgentSession(params) {
770
769
  // Host-only dirs under the state dir: extension code runs in the mikan
771
770
  // process, so it must never load from workspace paths — those are mounted
772
771
  // into sandbox containers and agent-writable (sandbox escape otherwise).
772
+ let session;
773
773
  const extensionsResult = await loadExtensions({
774
774
  dirs: defaultExtensionDirs(conversationId, effectiveStateDir()),
775
775
  context: { conversationId, workspaceDir, model, thinkingLevel },
@@ -779,14 +779,24 @@ async function createConfiguredAgentSession(params) {
779
779
  platformNotifier,
780
780
  platformReactor,
781
781
  platformUploader,
782
- runSubagentService: (request, extensionTools) => runSubagent({
783
- request,
784
- defaultModel: model,
785
- thinkingLevel,
786
- models,
787
- workspaceDir,
788
- availableTools: [...tools, ...extensionTools],
789
- }),
782
+ runSubagentService: (request, extensionTools) => {
783
+ const activeParent = session?.isActiveRun ? session : undefined;
784
+ return runSubagent({
785
+ request,
786
+ defaultModel: model,
787
+ thinkingLevel,
788
+ models,
789
+ workspaceDir,
790
+ availableTools: [...tools, ...extensionTools],
791
+ slots: globalSubagentSlots,
792
+ ...(activeParent
793
+ ? {
794
+ parentMessages: [...activeParent.messages],
795
+ onUsage: (usage) => activeParent.foldExternalUsage(usage),
796
+ }
797
+ : {}),
798
+ });
799
+ },
790
800
  }),
791
801
  });
792
802
  const contributedTools = extensionsResult.registry.getContributedTools();
@@ -803,12 +813,11 @@ async function createConfiguredAgentSession(params) {
803
813
  models,
804
814
  workspaceDir,
805
815
  availableTools: [...tools, ...contributedTools],
806
- // `session` is the const below: the tool only executes inside that
807
- // session's own prompt loop, and the temporal dead zone turns any
808
- // earlier call into a loud error instead of a silently dropped fold.
816
+ slots: globalSubagentSlots,
817
+ parentMessages: [...session.messages],
809
818
  onUsage: (usage) => session.foldExternalUsage(usage),
810
- }), globalSubagentSlots);
811
- const session = new MikanAgentSession({
819
+ }));
820
+ session = new MikanAgentSession({
812
821
  systemPrompt,
813
822
  model,
814
823
  thinkingLevel,
@@ -817,12 +826,13 @@ async function createConfiguredAgentSession(params) {
817
826
  sessionStore,
818
827
  extensions: extensionsResult.registry,
819
828
  });
820
- const reloaded = session.reloadFromSession();
829
+ const activeSession = session;
830
+ const reloaded = activeSession.reloadFromSession();
821
831
  if (reloaded > 0) {
822
832
  log.logInfo(`[${conversationId}] Reloaded ${reloaded} messages from session context`);
823
833
  }
824
834
  return {
825
- session,
835
+ session: activeSession,
826
836
  extensionSkills: extensionsResult.skills,
827
837
  extensionRegistry: extensionsResult.registry,
828
838
  disposeExtensions: extensionsResult.dispose,