@geminixiang/mikan 1.0.0-beta.2 → 1.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +388 -0
- package/README.md +49 -16
- package/dist/adapter.d.ts +1 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/buffered-responder.d.ts +60 -0
- package/dist/adapters/buffered-responder.d.ts.map +1 -0
- package/dist/adapters/buffered-responder.js +201 -0
- package/dist/adapters/buffered-responder.js.map +1 -0
- package/dist/adapters/discord/bot.d.ts +1 -0
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +36 -67
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +44 -204
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +86 -0
- package/dist/adapters/github/bot.d.ts.map +1 -0
- package/dist/adapters/github/bot.js +640 -0
- package/dist/adapters/github/bot.js.map +1 -0
- package/dist/adapters/github/client.d.ts +122 -0
- package/dist/adapters/github/client.d.ts.map +1 -0
- package/dist/adapters/github/client.js +314 -0
- package/dist/adapters/github/client.js.map +1 -0
- package/dist/adapters/github/cloudbuild.d.ts +24 -0
- package/dist/adapters/github/cloudbuild.d.ts.map +1 -0
- package/dist/adapters/github/cloudbuild.js +71 -0
- package/dist/adapters/github/cloudbuild.js.map +1 -0
- package/dist/adapters/github/context.d.ts +9 -0
- package/dist/adapters/github/context.d.ts.map +1 -0
- package/dist/adapters/github/context.js +103 -0
- package/dist/adapters/github/context.js.map +1 -0
- package/dist/adapters/github/gcp-auth.d.ts +31 -0
- package/dist/adapters/github/gcp-auth.d.ts.map +1 -0
- package/dist/adapters/github/gcp-auth.js +196 -0
- package/dist/adapters/github/gcp-auth.js.map +1 -0
- package/dist/adapters/github/github-ops.d.ts +90 -0
- package/dist/adapters/github/github-ops.d.ts.map +1 -0
- package/dist/adapters/github/github-ops.js +405 -0
- package/dist/adapters/github/github-ops.js.map +1 -0
- package/dist/adapters/github/ids.d.ts +34 -0
- package/dist/adapters/github/ids.d.ts.map +1 -0
- package/dist/adapters/github/ids.js +53 -0
- package/dist/adapters/github/ids.js.map +1 -0
- package/dist/adapters/github/repo.d.ts +32 -0
- package/dist/adapters/github/repo.d.ts.map +1 -0
- package/dist/adapters/github/repo.js +141 -0
- package/dist/adapters/github/repo.js.map +1 -0
- package/dist/adapters/github/tool-pack.d.ts +14 -0
- package/dist/adapters/github/tool-pack.d.ts.map +1 -0
- package/dist/adapters/github/tool-pack.js +56 -0
- package/dist/adapters/github/tool-pack.js.map +1 -0
- package/dist/adapters/github/tools/checks.d.ts +24 -0
- package/dist/adapters/github/tools/checks.d.ts.map +1 -0
- package/dist/adapters/github/tools/checks.js +105 -0
- package/dist/adapters/github/tools/checks.js.map +1 -0
- package/dist/adapters/github/tools/issue.d.ts +22 -0
- package/dist/adapters/github/tools/issue.d.ts.map +1 -0
- package/dist/adapters/github/tools/issue.js +48 -0
- package/dist/adapters/github/tools/issue.js.map +1 -0
- package/dist/adapters/github/tools/pr.d.ts +22 -0
- package/dist/adapters/github/tools/pr.d.ts.map +1 -0
- package/dist/adapters/github/tools/pr.js +48 -0
- package/dist/adapters/github/tools/pr.js.map +1 -0
- package/dist/adapters/github/tools/read.d.ts +22 -0
- package/dist/adapters/github/tools/read.d.ts.map +1 -0
- package/dist/adapters/github/tools/read.js +141 -0
- package/dist/adapters/github/tools/read.js.map +1 -0
- package/dist/adapters/github/tools/review-reply.d.ts +19 -0
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
- package/dist/adapters/github/tools/review-reply.js +38 -0
- package/dist/adapters/github/tools/review-reply.js.map +1 -0
- package/dist/adapters/github/tools/sync.d.ts +17 -0
- package/dist/adapters/github/tools/sync.d.ts.map +1 -0
- package/dist/adapters/github/tools/sync.js +34 -0
- package/dist/adapters/github/tools/sync.js.map +1 -0
- package/dist/adapters/github/types.d.ts +350 -0
- package/dist/adapters/github/types.d.ts.map +1 -0
- package/dist/adapters/github/types.js +2 -0
- package/dist/adapters/github/types.js.map +1 -0
- package/dist/adapters/intake.d.ts +16 -5
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js +79 -22
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +8 -6
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +82 -134
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +3 -14
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +14 -17
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js +5 -8
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/streaming.d.ts +4 -0
- package/dist/adapters/streaming.d.ts.map +1 -1
- package/dist/adapters/streaming.js +11 -0
- package/dist/adapters/streaming.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +1 -2
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +27 -62
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +37 -174
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +28 -2
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/agent.d.ts +37 -14
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +359 -229
- package/dist/agent.js.map +1 -1
- package/dist/cli/arg-grammar.d.ts +25 -0
- package/dist/cli/arg-grammar.d.ts.map +1 -0
- package/dist/cli/arg-grammar.js +59 -0
- package/dist/cli/arg-grammar.js.map +1 -0
- package/dist/cli/boot.d.ts +16 -0
- package/dist/cli/boot.d.ts.map +1 -0
- package/dist/cli/boot.js +119 -0
- package/dist/cli/boot.js.map +1 -0
- package/dist/cli/download.d.ts.map +1 -0
- package/dist/cli/download.js.map +1 -0
- package/dist/cli/ext-git.d.ts +22 -0
- package/dist/cli/ext-git.d.ts.map +1 -0
- package/dist/cli/ext-git.js +76 -0
- package/dist/cli/ext-git.js.map +1 -0
- package/dist/cli/ext.d.ts +2 -0
- package/dist/cli/ext.d.ts.map +1 -0
- package/dist/cli/ext.js +215 -0
- package/dist/cli/ext.js.map +1 -0
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +2 -1
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/auto-reply.d.ts.map +1 -1
- package/dist/commands/auto-reply.js +2 -6
- package/dist/commands/auto-reply.js.map +1 -1
- package/dist/commands/extensions.d.ts.map +1 -1
- package/dist/commands/extensions.js +18 -8
- package/dist/commands/extensions.js.map +1 -1
- package/dist/commands/login.d.ts +2 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +35 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manifest.d.ts +72 -0
- package/dist/commands/manifest.d.ts.map +1 -0
- package/dist/commands/manifest.js +121 -0
- package/dist/commands/manifest.js.map +1 -0
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +11 -9
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +2 -1
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +23 -17
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/commands/text.d.ts +2 -0
- package/dist/commands/text.d.ts.map +1 -0
- package/dist/commands/text.js +16 -0
- package/dist/commands/text.js.map +1 -0
- package/dist/commands/types.d.ts +14 -1
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js.map +1 -1
- package/dist/config.d.ts +1 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +98 -95
- package/dist/config.js.map +1 -1
- package/dist/env-manifest.d.ts +35 -0
- package/dist/env-manifest.d.ts.map +1 -0
- package/dist/env-manifest.js +225 -0
- package/dist/env-manifest.js.map +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +9 -73
- package/dist/events.js.map +1 -1
- package/dist/execution-resolver.d.ts +4 -2
- package/dist/execution-resolver.d.ts.map +1 -1
- package/dist/execution-resolver.js +54 -41
- package/dist/execution-resolver.js.map +1 -1
- package/dist/harness/event-format.d.ts +66 -0
- package/dist/harness/event-format.d.ts.map +1 -0
- package/dist/harness/event-format.js +112 -0
- package/dist/harness/event-format.js.map +1 -0
- package/dist/harness/extensions/loader.d.ts +44 -11
- package/dist/harness/extensions/loader.d.ts.map +1 -1
- package/dist/harness/extensions/loader.js +273 -84
- package/dist/harness/extensions/loader.js.map +1 -1
- package/dist/harness/extensions/registry.d.ts +48 -1
- package/dist/harness/extensions/registry.d.ts.map +1 -1
- package/dist/harness/extensions/registry.js +146 -0
- package/dist/harness/extensions/registry.js.map +1 -1
- package/dist/harness/extensions/types.d.ts +165 -22
- package/dist/harness/extensions/types.d.ts.map +1 -1
- package/dist/harness/extensions/types.js.map +1 -1
- package/dist/harness/index.d.ts +6 -5
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +3 -2
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/models.d.ts +5 -0
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +10 -0
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/runner.d.ts +37 -2
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +107 -23
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session-store.d.ts +4 -1
- package/dist/harness/session-store.d.ts.map +1 -1
- package/dist/harness/session-store.js +11 -2
- package/dist/harness/session-store.js.map +1 -1
- package/dist/harness/subagent-runner.d.ts +34 -0
- package/dist/harness/subagent-runner.d.ts.map +1 -0
- package/dist/harness/subagent-runner.js +339 -0
- package/dist/harness/subagent-runner.js.map +1 -0
- package/dist/harness/types.d.ts +53 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/main.js +260 -109
- package/dist/main.js.map +1 -1
- package/dist/observability/instrument.js +6 -4
- package/dist/observability/instrument.js.map +1 -1
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +3 -2
- package/dist/observability/sentry.js.map +1 -1
- package/dist/provisioner.d.ts.map +1 -1
- package/dist/provisioner.js +2 -5
- package/dist/provisioner.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +276 -43
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/types.d.ts +36 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts +3 -0
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +10 -0
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts +4 -0
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +11 -2
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/firecracker.d.ts +3 -0
- package/dist/sandbox/firecracker.d.ts.map +1 -1
- package/dist/sandbox/firecracker.js +10 -1
- package/dist/sandbox/firecracker.js.map +1 -1
- package/dist/sandbox/gondolin-bootstrap.d.ts +26 -0
- package/dist/sandbox/gondolin-bootstrap.d.ts.map +1 -0
- package/dist/sandbox/gondolin-bootstrap.js +27 -0
- package/dist/sandbox/gondolin-bootstrap.js.map +1 -0
- package/dist/sandbox/gondolin-contract.d.ts +125 -0
- package/dist/sandbox/gondolin-contract.d.ts.map +1 -0
- package/dist/sandbox/gondolin-contract.js +155 -0
- package/dist/sandbox/gondolin-contract.js.map +1 -0
- package/dist/sandbox/gondolin-fleet.d.ts +104 -0
- package/dist/sandbox/gondolin-fleet.d.ts.map +1 -0
- package/dist/sandbox/gondolin-fleet.js +330 -0
- package/dist/sandbox/gondolin-fleet.js.map +1 -0
- package/dist/sandbox/gondolin-gateway.d.ts +86 -0
- package/dist/sandbox/gondolin-gateway.d.ts.map +1 -0
- package/dist/sandbox/gondolin-gateway.js +407 -0
- package/dist/sandbox/gondolin-gateway.js.map +1 -0
- package/dist/sandbox/gondolin-inventory.d.ts +75 -0
- package/dist/sandbox/gondolin-inventory.d.ts.map +1 -0
- package/dist/sandbox/gondolin-inventory.js +257 -0
- package/dist/sandbox/gondolin-inventory.js.map +1 -0
- package/dist/sandbox/gondolin-join.d.ts +62 -0
- package/dist/sandbox/gondolin-join.d.ts.map +1 -0
- package/dist/sandbox/gondolin-join.js +261 -0
- package/dist/sandbox/gondolin-join.js.map +1 -0
- package/dist/sandbox/gondolin-nfs-advisory.d.ts +15 -0
- package/dist/sandbox/gondolin-nfs-advisory.d.ts.map +1 -0
- package/dist/sandbox/gondolin-nfs-advisory.js +60 -0
- package/dist/sandbox/gondolin-nfs-advisory.js.map +1 -0
- package/dist/sandbox/gondolin-placement.d.ts +30 -0
- package/dist/sandbox/gondolin-placement.d.ts.map +1 -0
- package/dist/sandbox/gondolin-placement.js +77 -0
- package/dist/sandbox/gondolin-placement.js.map +1 -0
- package/dist/sandbox/gondolin-recovery.d.ts +33 -0
- package/dist/sandbox/gondolin-recovery.d.ts.map +1 -0
- package/dist/sandbox/gondolin-recovery.js +39 -0
- package/dist/sandbox/gondolin-recovery.js.map +1 -0
- package/dist/sandbox/gondolin-remote.d.ts +70 -0
- package/dist/sandbox/gondolin-remote.d.ts.map +1 -0
- package/dist/sandbox/gondolin-remote.js +325 -0
- package/dist/sandbox/gondolin-remote.js.map +1 -0
- package/dist/sandbox/gondolin-worker-client.d.ts +135 -0
- package/dist/sandbox/gondolin-worker-client.d.ts.map +1 -0
- package/dist/sandbox/gondolin-worker-client.js +323 -0
- package/dist/sandbox/gondolin-worker-client.js.map +1 -0
- package/dist/sandbox/gondolin-worker-main.d.ts +2 -0
- package/dist/sandbox/gondolin-worker-main.d.ts.map +1 -0
- package/dist/sandbox/gondolin-worker-main.js +22 -0
- package/dist/sandbox/gondolin-worker-main.js.map +1 -0
- package/dist/sandbox/gondolin-worker.d.ts +17 -0
- package/dist/sandbox/gondolin-worker.d.ts.map +1 -0
- package/dist/sandbox/gondolin-worker.js +201 -0
- package/dist/sandbox/gondolin-worker.js.map +1 -0
- package/dist/sandbox/gondolin.d.ts +53 -0
- package/dist/sandbox/gondolin.d.ts.map +1 -0
- package/dist/sandbox/gondolin.js +429 -0
- package/dist/sandbox/gondolin.js.map +1 -0
- package/dist/sandbox/host.d.ts +3 -0
- package/dist/sandbox/host.d.ts.map +1 -1
- package/dist/sandbox/host.js +14 -0
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +21 -0
- package/dist/sandbox/identity.d.ts.map +1 -0
- package/dist/sandbox/identity.js +36 -0
- package/dist/sandbox/identity.js.map +1 -0
- package/dist/sandbox/index.d.ts +13 -4
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +19 -3
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/types.d.ts +31 -1
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts +12 -0
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +38 -0
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +32 -0
- package/dist/sessions/chat-history-sync.d.ts.map +1 -0
- package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +40 -113
- package/dist/sessions/chat-history-sync.js.map +1 -0
- package/dist/sessions/conversation-log.d.ts +13 -0
- package/dist/sessions/conversation-log.d.ts.map +1 -0
- package/dist/sessions/conversation-log.js +47 -0
- package/dist/sessions/conversation-log.js.map +1 -0
- package/dist/sessions/history-line.d.ts +20 -0
- package/dist/sessions/history-line.d.ts.map +1 -0
- package/dist/sessions/history-line.js +24 -0
- package/dist/sessions/history-line.js.map +1 -0
- package/dist/sessions/policy.d.ts.map +1 -1
- package/dist/sessions/policy.js +5 -3
- package/dist/sessions/policy.js.map +1 -1
- package/dist/sessions/rotation.d.ts +2 -0
- package/dist/sessions/rotation.d.ts.map +1 -0
- package/dist/sessions/rotation.js +39 -0
- package/dist/sessions/rotation.js.map +1 -0
- package/dist/sessions/session-key.d.ts +31 -0
- package/dist/sessions/session-key.d.ts.map +1 -0
- package/dist/sessions/session-key.js +44 -0
- package/dist/sessions/session-key.js.map +1 -0
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +6 -12
- package/dist/sessions/store.js.map +1 -1
- package/dist/sessions/types.d.ts +2 -2
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings-mutation.d.ts +23 -0
- package/dist/settings-mutation.d.ts.map +1 -0
- package/dist/settings-mutation.js +42 -0
- package/dist/settings-mutation.js.map +1 -0
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +24 -17
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +9 -12
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/event.d.ts +1 -1
- package/dist/tools/event.d.ts.map +1 -1
- package/dist/tools/event.js +53 -43
- package/dist/tools/event.js.map +1 -1
- package/dist/tools/generate-image.d.ts +17 -0
- package/dist/tools/generate-image.d.ts.map +1 -0
- package/dist/tools/generate-image.js +63 -0
- package/dist/tools/generate-image.js.map +1 -0
- package/dist/tools/host-fn-tool.d.ts +21 -0
- package/dist/tools/host-fn-tool.d.ts.map +1 -0
- package/dist/tools/host-fn-tool.js +32 -0
- package/dist/tools/host-fn-tool.js.map +1 -0
- package/dist/tools/index.d.ts +17 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +28 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/react.d.ts +15 -0
- package/dist/tools/react.d.ts.map +1 -0
- package/dist/tools/react.js +29 -0
- package/dist/tools/react.js.map +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +7 -26
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/sandbox.d.ts +2 -2
- package/dist/tools/sandbox.d.ts.map +1 -1
- package/dist/tools/sandbox.js +13 -9
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/tools/subagent-slots.d.ts +28 -0
- package/dist/tools/subagent-slots.d.ts.map +1 -0
- package/dist/tools/subagent-slots.js +57 -0
- package/dist/tools/subagent-slots.js.map +1 -0
- package/dist/tools/subagent.d.ts +74 -0
- package/dist/tools/subagent.d.ts.map +1 -0
- package/dist/tools/subagent.js +335 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/types.d.ts +40 -6
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +1 -8
- package/dist/tools/write.js.map +1 -1
- package/dist/trigger.d.ts.map +1 -1
- package/dist/trigger.js +1 -2
- package/dist/trigger.js.map +1 -1
- package/dist/types.d.ts +144 -31
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/date.d.ts +1 -1
- package/dist/utils/date.js +1 -1
- package/dist/utils/date.js.map +1 -1
- package/dist/vault/disabled.d.ts +9 -0
- package/dist/vault/disabled.d.ts.map +1 -0
- package/dist/vault/disabled.js +22 -0
- package/dist/vault/disabled.js.map +1 -0
- package/dist/vault/index.d.ts +0 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +1 -32
- package/dist/vault/index.js.map +1 -1
- package/dist/vault/injection.d.ts +20 -0
- package/dist/vault/injection.d.ts.map +1 -0
- package/dist/vault/injection.js +27 -0
- package/dist/vault/injection.js.map +1 -0
- package/dist/vault/policy.d.ts +20 -0
- package/dist/vault/policy.d.ts.map +1 -0
- package/dist/vault/policy.js +20 -0
- package/dist/vault/policy.js.map +1 -0
- package/dist/vault/types.d.ts +0 -2
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/dist/web/admin/portal.d.ts +27 -0
- package/dist/web/admin/portal.d.ts.map +1 -1
- package/dist/web/admin/portal.js +117 -154
- package/dist/web/admin/portal.js.map +1 -1
- package/dist/web/admin/types.d.ts +6 -0
- package/dist/web/admin/types.d.ts.map +1 -1
- package/dist/web/admin/types.js.map +1 -1
- package/dist/web/agent-events/portal.d.ts.map +1 -1
- package/dist/web/agent-events/portal.js +2 -1
- package/dist/web/agent-events/portal.js.map +1 -1
- package/dist/web/login/oauth.d.ts +2 -3
- package/dist/web/login/oauth.d.ts.map +1 -1
- package/dist/web/login/oauth.js +0 -31
- package/dist/web/login/oauth.js.map +1 -1
- package/dist/web/login/portal.js +1 -1
- package/dist/web/login/portal.js.map +1 -1
- package/dist/web/login/types.d.ts +0 -11
- package/dist/web/login/types.d.ts.map +1 -1
- package/dist/web/login/types.js.map +1 -1
- package/dist/web/portal-shell.d.ts +4 -0
- package/dist/web/portal-shell.d.ts.map +1 -0
- package/dist/{portal-shell.js → web/portal-shell.js} +2 -2
- package/dist/web/portal-shell.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +7 -0
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-view/command.d.ts.map +1 -1
- package/dist/web/session-view/command.js +4 -1
- package/dist/web/session-view/command.js.map +1 -1
- package/dist/web/session-view/portal.d.ts.map +1 -1
- package/dist/web/session-view/portal.js +4 -3
- package/dist/web/session-view/portal.js.map +1 -1
- package/dist/web/session-view/service.d.ts.map +1 -1
- package/dist/web/session-view/service.js +2 -1
- package/dist/web/session-view/service.js.map +1 -1
- package/dist/web/session-view/types.d.ts +2 -1
- package/dist/web/session-view/types.d.ts.map +1 -1
- package/dist/web/session-view/types.js.map +1 -1
- package/package.json +7 -4
- package/dist/download.d.ts.map +0 -1
- package/dist/download.js.map +0 -1
- package/dist/model-registry.d.ts +0 -4
- package/dist/model-registry.d.ts.map +0 -1
- package/dist/model-registry.js +0 -7
- package/dist/model-registry.js.map +0 -1
- package/dist/portal-shell.d.ts +0 -4
- package/dist/portal-shell.d.ts.map +0 -1
- package/dist/portal-shell.js.map +0 -1
- package/dist/runtime/agent-run-controller.d.ts +0 -31
- package/dist/runtime/agent-run-controller.d.ts.map +0 -1
- package/dist/runtime/agent-run-controller.js +0 -195
- package/dist/runtime/agent-run-controller.js.map +0 -1
- package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
- package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
- package/dist/sessions/agent-memory-file-manager.js.map +0 -1
- package/dist/vault/routing.d.ts +0 -3
- package/dist/vault/routing.d.ts.map +0 -1
- package/dist/vault/routing.js +0 -13
- package/dist/vault/routing.js.map +0 -1
- /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
- /package/dist/{download.js → cli/download.js} +0 -0
package/dist/web/admin/portal.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { existsSync, readdirSync, readFileSync,
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "fs";
|
|
2
2
|
import { basename, join, resolve as pathResolve, sep as pathSep } from "path";
|
|
3
|
-
import { MikanModels, SessionStore } from "../../harness/index.js";
|
|
4
|
-
import { loadConversationAutoReplyConfig, loadGlobalSettings, resolveConversationSettings, saveConversationAutoReplyConfig,
|
|
3
|
+
import { MikanModels, parseFrontmatter, SessionStore } from "../../harness/index.js";
|
|
4
|
+
import { loadConversationAutoReplyConfig, loadGlobalSettings, resolveConversationSettings, saveConversationAutoReplyConfig, } from "../../config.js";
|
|
5
|
+
import { applyConversationSettings, applyGlobalSettings } from "../../settings-mutation.js";
|
|
5
6
|
import { escapeHtml } from "../../utils/html.js";
|
|
6
7
|
import { readRawBody } from "../../utils/http-body.js";
|
|
7
|
-
import { renderPortalShell } from "
|
|
8
|
+
import { renderPortalShell } from "../portal-shell.js";
|
|
8
9
|
import { resolveExistingSessionFile } from "../session-view/service.js";
|
|
9
10
|
import { PRODUCT_NAME } from "../../platform-messages.js";
|
|
10
|
-
import {
|
|
11
|
+
import { actorKey } from "../../sandbox/identity.js";
|
|
11
12
|
import { sharedVaultKey } from "../../vault/index.js";
|
|
12
13
|
import { modelKey, resolveAdminModelAccessStatuses } from "./provider-models.js";
|
|
13
14
|
// ── Handler ────────────────────────────────────────────────────────────────────
|
|
@@ -88,7 +89,7 @@ async function routeApiRequest(req, res, url, services) {
|
|
|
88
89
|
return;
|
|
89
90
|
}
|
|
90
91
|
if (url.pathname === "/admin/api/events") {
|
|
91
|
-
serveEventsList(res, services);
|
|
92
|
+
await serveEventsList(res, services);
|
|
92
93
|
return;
|
|
93
94
|
}
|
|
94
95
|
if (url.pathname === "/admin/api/events/file") {
|
|
@@ -96,7 +97,7 @@ async function routeApiRequest(req, res, url, services) {
|
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
98
99
|
if (url.pathname === "/admin/api/conversations/events") {
|
|
99
|
-
serveConversationEventsList(res, url, services, token);
|
|
100
|
+
await serveConversationEventsList(res, url, services, token);
|
|
100
101
|
return;
|
|
101
102
|
}
|
|
102
103
|
jsonRes(res, 404, { error: "Not found" });
|
|
@@ -140,19 +141,19 @@ async function routeApiRequest(req, res, url, services) {
|
|
|
140
141
|
return;
|
|
141
142
|
}
|
|
142
143
|
if (url.pathname === "/admin/api/conversations/events/delete") {
|
|
143
|
-
serveConversationEventDelete(res, body, services, token);
|
|
144
|
+
await serveConversationEventDelete(res, body, services, token);
|
|
144
145
|
return;
|
|
145
146
|
}
|
|
146
147
|
if (url.pathname === "/admin/api/settings/model") {
|
|
147
|
-
serveGlobalModelUpdate(res, body);
|
|
148
|
+
serveGlobalModelUpdate(res, body, services);
|
|
148
149
|
return;
|
|
149
150
|
}
|
|
150
151
|
if (url.pathname === "/admin/api/settings/sandbox") {
|
|
151
|
-
serveGlobalSandboxUpdate(res, body);
|
|
152
|
+
serveGlobalSandboxUpdate(res, body, services);
|
|
152
153
|
return;
|
|
153
154
|
}
|
|
154
155
|
if (url.pathname === "/admin/api/settings/slack") {
|
|
155
|
-
serveGlobalSlackUpdate(res, body);
|
|
156
|
+
serveGlobalSlackUpdate(res, body, services);
|
|
156
157
|
return;
|
|
157
158
|
}
|
|
158
159
|
jsonRes(res, 404, { error: "Not found" });
|
|
@@ -465,8 +466,8 @@ function serveConversationState(res, url, services, token) {
|
|
|
465
466
|
globalProvider: globalConfig.provider,
|
|
466
467
|
globalModel: globalConfig.model,
|
|
467
468
|
globalThinkingLevel: globalConfig.thinkingLevel,
|
|
468
|
-
sandboxImageWorkspaceMount: conversationConfig.
|
|
469
|
-
globalSandboxImageWorkspaceMount: globalConfig.
|
|
469
|
+
sandboxImageWorkspaceMount: conversationConfig.sandbox?.image?.workspaceMount ?? null,
|
|
470
|
+
globalSandboxImageWorkspaceMount: globalConfig.sandbox?.image?.workspaceMount ?? null,
|
|
470
471
|
autoReplyEnabled: autoReply.enabled,
|
|
471
472
|
autoReplyRules: autoReply.rules,
|
|
472
473
|
slack: {
|
|
@@ -482,12 +483,12 @@ function serveGlobalSettings(res) {
|
|
|
482
483
|
provider: config.provider,
|
|
483
484
|
model: config.model,
|
|
484
485
|
thinkingLevel: config.thinkingLevel,
|
|
485
|
-
sandboxCpus: config.
|
|
486
|
-
sandboxMemory: config.
|
|
487
|
-
sandboxBoostCpus: config.
|
|
488
|
-
sandboxBoostMemory: config.
|
|
489
|
-
sandboxImageWorkspaceMount: config.
|
|
490
|
-
defaultSharedVault: config.defaultSharedVault ?? null,
|
|
486
|
+
sandboxCpus: config.sandbox?.cpus ?? null,
|
|
487
|
+
sandboxMemory: config.sandbox?.memory ?? null,
|
|
488
|
+
sandboxBoostCpus: config.sandbox?.boost?.cpus ?? null,
|
|
489
|
+
sandboxBoostMemory: config.sandbox?.boost?.memory ?? null,
|
|
490
|
+
sandboxImageWorkspaceMount: config.sandbox?.image?.workspaceMount ?? null,
|
|
491
|
+
defaultSharedVault: config.sandbox?.defaultSharedVault ?? null,
|
|
491
492
|
slack: {
|
|
492
493
|
replyMode: config.slack?.replyMode ?? "top-level",
|
|
493
494
|
},
|
|
@@ -518,7 +519,7 @@ async function serveModelsList(res) {
|
|
|
518
519
|
jsonRes(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
519
520
|
}
|
|
520
521
|
}
|
|
521
|
-
const VALID_THINKING_LEVELS = new Set(["off", "minimal", "low", "medium", "high", "xhigh"]);
|
|
522
|
+
const VALID_THINKING_LEVELS = new Set(["off", "minimal", "low", "medium", "high", "xhigh", "max"]);
|
|
522
523
|
function serveConversationModelUpdate(res, body, services, token) {
|
|
523
524
|
const provider = typeof body.provider === "string" ? body.provider.trim() : "";
|
|
524
525
|
const model = typeof body.model === "string" ? body.model.trim() : "";
|
|
@@ -537,18 +538,19 @@ function serveConversationModelUpdate(res, body, services, token) {
|
|
|
537
538
|
const workingDir = requireAdminWorkingDir(res, services);
|
|
538
539
|
if (!workingDir)
|
|
539
540
|
return;
|
|
540
|
-
const dir = join(workingDir, scope.conversationId);
|
|
541
541
|
try {
|
|
542
|
-
|
|
542
|
+
const result = applyConversationSettings(services.runtime, workingDir, scope.conversationId, {
|
|
543
543
|
provider,
|
|
544
544
|
model,
|
|
545
545
|
...(thinkingLevel ? { thinkingLevel } : {}),
|
|
546
546
|
});
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
547
|
+
if (!result.ok) {
|
|
548
|
+
jsonRes(res, 409, {
|
|
549
|
+
error: "Conversation has a running job; retry after it finishes (or /stop it).",
|
|
550
|
+
});
|
|
551
|
+
return;
|
|
550
552
|
}
|
|
551
|
-
jsonRes(res, 200, { ok: true, runtimeSwitched });
|
|
553
|
+
jsonRes(res, 200, { ok: true, runtimeSwitched: result.runtimeSwitched });
|
|
552
554
|
}
|
|
553
555
|
catch (err) {
|
|
554
556
|
jsonRes(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
@@ -568,9 +570,10 @@ function serveConversationSandboxUpdate(res, body, services, token) {
|
|
|
568
570
|
const workingDir = requireAdminWorkingDir(res, services);
|
|
569
571
|
if (!workingDir)
|
|
570
572
|
return;
|
|
571
|
-
const dir = join(workingDir, scope.conversationId);
|
|
572
573
|
try {
|
|
573
|
-
|
|
574
|
+
applyConversationSettings(services.runtime, workingDir, scope.conversationId, {
|
|
575
|
+
sandbox: { image: { workspaceMount } },
|
|
576
|
+
});
|
|
574
577
|
jsonRes(res, 200, { ok: true });
|
|
575
578
|
}
|
|
576
579
|
catch (err) {
|
|
@@ -591,9 +594,10 @@ function serveConversationSlackUpdate(res, body, services, token) {
|
|
|
591
594
|
const workingDir = requireAdminWorkingDir(res, services);
|
|
592
595
|
if (!workingDir)
|
|
593
596
|
return;
|
|
594
|
-
const dir = join(workingDir, scope.conversationId);
|
|
595
597
|
try {
|
|
596
|
-
|
|
598
|
+
applyConversationSettings(services.runtime, workingDir, scope.conversationId, {
|
|
599
|
+
slack: { replyMode },
|
|
600
|
+
});
|
|
597
601
|
jsonRes(res, 200, { ok: true });
|
|
598
602
|
}
|
|
599
603
|
catch (err) {
|
|
@@ -688,7 +692,10 @@ function serveConversationLoginLink(res, body, services, token) {
|
|
|
688
692
|
}
|
|
689
693
|
else {
|
|
690
694
|
try {
|
|
691
|
-
vaultId =
|
|
695
|
+
vaultId = actorKey(services.sandbox, {
|
|
696
|
+
userId: token.platformUserId,
|
|
697
|
+
conversationId: scope.conversationId,
|
|
698
|
+
});
|
|
692
699
|
}
|
|
693
700
|
catch (err) {
|
|
694
701
|
jsonRes(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
@@ -704,7 +711,7 @@ function serveConversationLoginLink(res, body, services, token) {
|
|
|
704
711
|
jsonRes(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
705
712
|
}
|
|
706
713
|
}
|
|
707
|
-
function serveGlobalModelUpdate(res, body) {
|
|
714
|
+
function serveGlobalModelUpdate(res, body, services) {
|
|
708
715
|
const provider = typeof body.provider === "string" ? body.provider.trim() : "";
|
|
709
716
|
const model = typeof body.model === "string" ? body.model.trim() : "";
|
|
710
717
|
const thinkingLevel = typeof body.thinkingLevel === "string" && VALID_THINKING_LEVELS.has(body.thinkingLevel)
|
|
@@ -715,55 +722,57 @@ function serveGlobalModelUpdate(res, body) {
|
|
|
715
722
|
return;
|
|
716
723
|
}
|
|
717
724
|
try {
|
|
718
|
-
|
|
725
|
+
const result = applyGlobalSettings(services.runtime, {
|
|
719
726
|
provider,
|
|
720
727
|
model,
|
|
721
728
|
...(thinkingLevel ? { thinkingLevel } : {}),
|
|
722
729
|
});
|
|
723
|
-
jsonRes(res, 200, { ok: true });
|
|
730
|
+
jsonRes(res, 200, { ok: true, staleConversations: result.staleConversations });
|
|
724
731
|
}
|
|
725
732
|
catch (err) {
|
|
726
733
|
jsonRes(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
727
734
|
}
|
|
728
735
|
}
|
|
729
|
-
function serveGlobalSlackUpdate(res, body) {
|
|
736
|
+
function serveGlobalSlackUpdate(res, body, services) {
|
|
730
737
|
const replyMode = body.replyMode;
|
|
731
738
|
if (replyMode !== "top-level" && replyMode !== "thread") {
|
|
732
739
|
jsonRes(res, 400, { error: "replyMode must be 'top-level' or 'thread'" });
|
|
733
740
|
return;
|
|
734
741
|
}
|
|
735
742
|
try {
|
|
736
|
-
|
|
743
|
+
applyGlobalSettings(services.runtime, { slack: { replyMode } });
|
|
737
744
|
jsonRes(res, 200, { ok: true });
|
|
738
745
|
}
|
|
739
746
|
catch (err) {
|
|
740
747
|
jsonRes(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
741
748
|
}
|
|
742
749
|
}
|
|
743
|
-
function serveGlobalSandboxUpdate(res, body) {
|
|
750
|
+
function serveGlobalSandboxUpdate(res, body, services) {
|
|
744
751
|
const cpus = typeof body.cpus === "string" ? body.cpus.trim() : "";
|
|
745
752
|
const memory = typeof body.memory === "string" ? body.memory.trim() : "";
|
|
746
753
|
const boostCpus = typeof body.boostCpus === "string" ? body.boostCpus.trim() : "";
|
|
747
754
|
const boostMemory = typeof body.boostMemory === "string" ? body.boostMemory.trim() : "";
|
|
748
755
|
const workspaceMount = body.workspaceMount;
|
|
749
756
|
const validMount = workspaceMount === "private" || workspaceMount === "full";
|
|
750
|
-
const update = {
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
757
|
+
const update = {
|
|
758
|
+
...(cpus ? { cpus } : {}),
|
|
759
|
+
...(memory ? { memory } : {}),
|
|
760
|
+
...(boostCpus || boostMemory
|
|
761
|
+
? {
|
|
762
|
+
boost: {
|
|
763
|
+
...(boostCpus ? { cpus: boostCpus } : {}),
|
|
764
|
+
...(boostMemory ? { memory: boostMemory } : {}),
|
|
765
|
+
},
|
|
766
|
+
}
|
|
767
|
+
: {}),
|
|
768
|
+
...(validMount ? { image: { workspaceMount: workspaceMount } } : {}),
|
|
769
|
+
};
|
|
761
770
|
if (Object.keys(update).length === 0) {
|
|
762
771
|
jsonRes(res, 400, { error: "No valid sandbox fields provided" });
|
|
763
772
|
return;
|
|
764
773
|
}
|
|
765
774
|
try {
|
|
766
|
-
|
|
775
|
+
applyGlobalSettings(services.runtime, { sandbox: update });
|
|
767
776
|
jsonRes(res, 200, { ok: true });
|
|
768
777
|
}
|
|
769
778
|
catch (err) {
|
|
@@ -994,7 +1003,12 @@ function serveWorkspaceFile(res, url, services, token) {
|
|
|
994
1003
|
}
|
|
995
1004
|
servePreviewFile(res, safe.absolute, { path: requestedPath }, "File not found");
|
|
996
1005
|
}
|
|
997
|
-
|
|
1006
|
+
/**
|
|
1007
|
+
* Read skill metadata via the harness frontmatter parser (the owning module).
|
|
1008
|
+
* The portal historically accepted frontmatter keys case-insensitively, so
|
|
1009
|
+
* the lookup — not the parser — preserves that leniency.
|
|
1010
|
+
*/
|
|
1011
|
+
function readSkillMeta(filePath) {
|
|
998
1012
|
let text;
|
|
999
1013
|
try {
|
|
1000
1014
|
text = readFileSync(filePath, "utf-8");
|
|
@@ -1002,31 +1016,18 @@ function parseSkillFrontmatter(filePath) {
|
|
|
1002
1016
|
catch {
|
|
1003
1017
|
return {};
|
|
1004
1018
|
}
|
|
1005
|
-
|
|
1006
|
-
return {};
|
|
1007
|
-
const end = text.indexOf("\n---", 3);
|
|
1008
|
-
if (end < 0)
|
|
1009
|
-
return {};
|
|
1010
|
-
const block = text.slice(3, end);
|
|
1019
|
+
const { values } = parseFrontmatter(text);
|
|
1011
1020
|
const out = {};
|
|
1012
|
-
for (const
|
|
1013
|
-
const
|
|
1014
|
-
if (
|
|
1015
|
-
continue;
|
|
1016
|
-
const key = line.slice(0, colon).trim().toLowerCase();
|
|
1017
|
-
let value = line.slice(colon + 1).trim();
|
|
1018
|
-
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
1019
|
-
(value.startsWith("'") && value.endsWith("'"))) {
|
|
1020
|
-
value = value.slice(1, -1);
|
|
1021
|
-
}
|
|
1022
|
-
if (key === "name")
|
|
1021
|
+
for (const [key, value] of Object.entries(values)) {
|
|
1022
|
+
const normalized = key.toLowerCase();
|
|
1023
|
+
if (normalized === "name")
|
|
1023
1024
|
out.name = value;
|
|
1024
|
-
if (
|
|
1025
|
+
if (normalized === "description")
|
|
1025
1026
|
out.description = value;
|
|
1026
1027
|
}
|
|
1027
1028
|
return out;
|
|
1028
1029
|
}
|
|
1029
|
-
function readSkillsFromDir(skillsDir, source) {
|
|
1030
|
+
export function readSkillsFromDir(skillsDir, source) {
|
|
1030
1031
|
if (!existsSync(skillsDir))
|
|
1031
1032
|
return [];
|
|
1032
1033
|
const out = [];
|
|
@@ -1043,7 +1044,7 @@ function readSkillsFromDir(skillsDir, source) {
|
|
|
1043
1044
|
const skillMd = join(skillsDir, entry.name, "SKILL.md");
|
|
1044
1045
|
if (!existsSync(skillMd))
|
|
1045
1046
|
continue;
|
|
1046
|
-
const meta =
|
|
1047
|
+
const meta = readSkillMeta(skillMd);
|
|
1047
1048
|
out.push({
|
|
1048
1049
|
name: meta.name ?? entry.name,
|
|
1049
1050
|
description: meta.description ?? "",
|
|
@@ -1104,75 +1105,53 @@ function serveSkillFile(res, url, services, token) {
|
|
|
1104
1105
|
}
|
|
1105
1106
|
// ── Events ─────────────────────────────────────────────────────────────────────
|
|
1106
1107
|
const EVENTS_FILE_MAX_BYTES = 64 * 1024;
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
return [];
|
|
1117
|
-
}
|
|
1118
|
-
return entries
|
|
1119
|
-
.filter((e) => e.isFile() && e.name.endsWith(".json"))
|
|
1120
|
-
.map((e) => {
|
|
1121
|
-
const filePath = join(dir, e.name);
|
|
1122
|
-
let stats;
|
|
1123
|
-
try {
|
|
1124
|
-
stats = statSync(filePath);
|
|
1125
|
-
}
|
|
1126
|
-
catch {
|
|
1127
|
-
return null;
|
|
1128
|
-
}
|
|
1129
|
-
let parsed = null;
|
|
1130
|
-
try {
|
|
1131
|
-
parsed = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
1132
|
-
}
|
|
1133
|
-
catch {
|
|
1134
|
-
// Keep entry; just omit parsed fields.
|
|
1135
|
-
}
|
|
1136
|
-
const meta = parsed && typeof parsed === "object" ? parsed : {};
|
|
1137
|
-
// events.ts accepts `channelId` as a legacy alias for `conversationId`.
|
|
1138
|
-
const conversationId = typeof meta.conversationId === "string"
|
|
1139
|
-
? meta.conversationId
|
|
1140
|
-
: typeof meta.channelId === "string"
|
|
1141
|
-
? meta.channelId
|
|
1142
|
-
: null;
|
|
1108
|
+
/**
|
|
1109
|
+
* List events through the owning store, whose payloads are validated by the
|
|
1110
|
+
* event-format module (files that fail validation stay visible with a null
|
|
1111
|
+
* payload so operators can delete them).
|
|
1112
|
+
*/
|
|
1113
|
+
export async function listAllEvents(store) {
|
|
1114
|
+
const entries = await store.list();
|
|
1115
|
+
return entries.map((entry) => {
|
|
1116
|
+
const payload = entry.payload;
|
|
1143
1117
|
return {
|
|
1144
|
-
name:
|
|
1145
|
-
size:
|
|
1146
|
-
mtimeMs:
|
|
1147
|
-
type:
|
|
1148
|
-
platform:
|
|
1149
|
-
conversationId,
|
|
1150
|
-
text:
|
|
1151
|
-
at:
|
|
1152
|
-
schedule:
|
|
1153
|
-
timezone:
|
|
1118
|
+
name: entry.filename,
|
|
1119
|
+
size: entry.size,
|
|
1120
|
+
mtimeMs: entry.mtimeMs,
|
|
1121
|
+
type: payload?.type ?? null,
|
|
1122
|
+
platform: payload?.platform ?? null,
|
|
1123
|
+
conversationId: payload?.conversationId ?? null,
|
|
1124
|
+
text: payload?.text ?? null,
|
|
1125
|
+
at: payload?.type === "one-shot" ? payload.at : null,
|
|
1126
|
+
schedule: payload?.type === "periodic" ? payload.schedule : null,
|
|
1127
|
+
timezone: payload?.type === "periodic" ? payload.timezone : null,
|
|
1154
1128
|
};
|
|
1155
|
-
})
|
|
1156
|
-
.filter((e) => e !== null)
|
|
1157
|
-
.toSorted((a, b) => a.name.localeCompare(b.name));
|
|
1129
|
+
});
|
|
1158
1130
|
}
|
|
1159
|
-
function
|
|
1160
|
-
|
|
1161
|
-
|
|
1131
|
+
function requireAdminEventStore(res, services) {
|
|
1132
|
+
if (!services.eventStore) {
|
|
1133
|
+
jsonRes(res, 503, { error: "Working directory not available" });
|
|
1134
|
+
return null;
|
|
1135
|
+
}
|
|
1136
|
+
return services.eventStore;
|
|
1137
|
+
}
|
|
1138
|
+
async function serveEventsList(res, services) {
|
|
1139
|
+
const store = requireAdminEventStore(res, services);
|
|
1140
|
+
if (!store)
|
|
1162
1141
|
return;
|
|
1163
|
-
jsonRes(res, 200, { events: listAllEvents(
|
|
1142
|
+
jsonRes(res, 200, { events: await listAllEvents(store) });
|
|
1164
1143
|
}
|
|
1165
1144
|
/** Per-conversation listing — filter all events by conversationId match. */
|
|
1166
|
-
function serveConversationEventsList(res, url, services, token) {
|
|
1145
|
+
async function serveConversationEventsList(res, url, services, token) {
|
|
1167
1146
|
const scope = resolveConversationFromQuery(url, token);
|
|
1168
1147
|
if (scope.error) {
|
|
1169
1148
|
jsonRes(res, 403, { error: scope.error });
|
|
1170
1149
|
return;
|
|
1171
1150
|
}
|
|
1172
|
-
const
|
|
1173
|
-
if (!
|
|
1151
|
+
const store = requireAdminEventStore(res, services);
|
|
1152
|
+
if (!store)
|
|
1174
1153
|
return;
|
|
1175
|
-
const events = listAllEvents(
|
|
1154
|
+
const events = (await listAllEvents(store)).filter((e) => e.conversationId === scope.conversationId);
|
|
1176
1155
|
jsonRes(res, 200, { conversationId: scope.conversationId, events });
|
|
1177
1156
|
}
|
|
1178
1157
|
function serveEventsFile(res, url, services) {
|
|
@@ -1212,7 +1191,7 @@ function serveEventsFile(res, url, services) {
|
|
|
1212
1191
|
jsonRes(res, 200, { name, content: raw });
|
|
1213
1192
|
}
|
|
1214
1193
|
/** Delete a single event file scoped to the caller's conversation. */
|
|
1215
|
-
function serveConversationEventDelete(res, body, services, token) {
|
|
1194
|
+
async function serveConversationEventDelete(res, body, services, token) {
|
|
1216
1195
|
const scope = resolveTargetConversation(body, token);
|
|
1217
1196
|
if (scope.error) {
|
|
1218
1197
|
jsonRes(res, 403, { error: scope.error });
|
|
@@ -1223,38 +1202,24 @@ function serveConversationEventDelete(res, body, services, token) {
|
|
|
1223
1202
|
jsonRes(res, 400, { error: "Invalid name" });
|
|
1224
1203
|
return;
|
|
1225
1204
|
}
|
|
1226
|
-
const
|
|
1227
|
-
if (!
|
|
1205
|
+
const store = requireAdminEventStore(res, services);
|
|
1206
|
+
if (!store)
|
|
1228
1207
|
return;
|
|
1229
|
-
|
|
1230
|
-
let raw;
|
|
1208
|
+
let payload;
|
|
1231
1209
|
try {
|
|
1232
|
-
|
|
1210
|
+
payload = (await store.read(name)).payload;
|
|
1233
1211
|
}
|
|
1234
1212
|
catch {
|
|
1235
1213
|
jsonRes(res, 404, { error: "Event not found" });
|
|
1236
1214
|
return;
|
|
1237
1215
|
}
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
const j = JSON.parse(raw);
|
|
1241
|
-
if (j && typeof j === "object")
|
|
1242
|
-
parsed = j;
|
|
1243
|
-
}
|
|
1244
|
-
catch {
|
|
1245
|
-
// Malformed events cannot be associated with a conversation below.
|
|
1246
|
-
}
|
|
1247
|
-
const eventConvId = typeof parsed.conversationId === "string"
|
|
1248
|
-
? parsed.conversationId
|
|
1249
|
-
: typeof parsed.channelId === "string"
|
|
1250
|
-
? parsed.channelId
|
|
1251
|
-
: null;
|
|
1252
|
-
if (eventConvId !== scope.conversationId) {
|
|
1216
|
+
// The store normalizes the legacy `channelId` alias into `conversationId`.
|
|
1217
|
+
if (payload?.conversationId !== scope.conversationId) {
|
|
1253
1218
|
jsonRes(res, 403, { error: "Event does not belong to this conversation." });
|
|
1254
1219
|
return;
|
|
1255
1220
|
}
|
|
1256
1221
|
try {
|
|
1257
|
-
|
|
1222
|
+
await store.delete(name);
|
|
1258
1223
|
jsonRes(res, 200, { ok: true });
|
|
1259
1224
|
}
|
|
1260
1225
|
catch (err) {
|
|
@@ -1578,7 +1543,7 @@ function renderAdminPage(token) {
|
|
|
1578
1543
|
}
|
|
1579
1544
|
|
|
1580
1545
|
function renderSettings(data) {
|
|
1581
|
-
const thinking = ['off','minimal','low','medium','high','xhigh'];
|
|
1546
|
+
const thinking = ['off','minimal','low','medium','high','xhigh','max'];
|
|
1582
1547
|
const thinkingOpts = thinking.map((t) =>
|
|
1583
1548
|
'<option value="' + t + '"' + (data.thinkingLevel === t ? ' selected' : '') + '>' + t + '</option>'
|
|
1584
1549
|
).join('');
|
|
@@ -1647,9 +1612,7 @@ function renderAdminPage(token) {
|
|
|
1647
1612
|
conversationId: activeConversationId, provider, model, thinkingLevel,
|
|
1648
1613
|
});
|
|
1649
1614
|
result.style.display = 'block'; result.className = 'inline-result ok';
|
|
1650
|
-
result.textContent =
|
|
1651
|
-
? 'Saved — running session pinned; new model applies on next start.'
|
|
1652
|
-
: 'Saved ✓';
|
|
1615
|
+
result.textContent = 'Saved ✓';
|
|
1653
1616
|
} catch (err) {
|
|
1654
1617
|
result.style.display = 'block'; result.className = 'inline-result err';
|
|
1655
1618
|
result.textContent = err.message;
|
|
@@ -2130,7 +2093,7 @@ function renderAdminPage(token) {
|
|
|
2130
2093
|
}
|
|
2131
2094
|
|
|
2132
2095
|
function renderGlobalSettings(data) {
|
|
2133
|
-
const thinking = ['off','minimal','low','medium','high','xhigh'];
|
|
2096
|
+
const thinking = ['off','minimal','low','medium','high','xhigh','max'];
|
|
2134
2097
|
const thinkingOpts = thinking.map((t) =>
|
|
2135
2098
|
'<option value="' + t + '"' + (data.thinkingLevel === t ? ' selected' : '') + '>' + t + '</option>'
|
|
2136
2099
|
).join('');
|