@cydm/happy-elves 0.1.0-beta.31 → 0.1.0-beta.310
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/apps/cli/dist/commands/app.js +10 -0
- package/apps/cli/dist/commands/daemon.js +92 -4
- package/apps/cli/dist/commands/gateway.d.ts +2 -0
- package/apps/cli/dist/commands/gateway.js +429 -0
- package/apps/cli/dist/commands/lib/args.js +49 -0
- package/apps/cli/dist/commands/lib/bootstrap-daemon.d.ts +2 -2
- package/apps/cli/dist/commands/lib/bootstrap-daemon.js +2 -2
- package/apps/cli/dist/commands/lib/doctor.d.ts +11 -0
- package/apps/cli/dist/commands/lib/doctor.js +276 -11
- package/apps/cli/dist/commands/lib/gateway-store.d.ts +38 -0
- package/apps/cli/dist/commands/lib/gateway-store.js +33 -0
- package/apps/cli/dist/commands/lib/index.d.ts +4 -2
- package/apps/cli/dist/commands/lib/index.js +2 -0
- package/apps/cli/dist/commands/lib/json.d.ts +2 -2
- package/apps/cli/dist/commands/lib/json.js +5 -2
- package/apps/cli/dist/commands/lib/local-daemon.d.ts +1 -0
- package/apps/cli/dist/commands/lib/local-daemon.js +14 -0
- package/apps/cli/dist/commands/lib/paths.d.ts +2 -0
- package/apps/cli/dist/commands/lib/paths.js +2 -0
- package/apps/cli/dist/commands/lib/relay-db-audit.d.ts +37 -0
- package/apps/cli/dist/commands/lib/relay-db-audit.js +300 -0
- package/apps/cli/dist/commands/lib/relay-http.d.ts +1 -1
- package/apps/cli/dist/commands/lib/scope.d.ts +1 -1
- package/apps/cli/dist/commands/lib/session-output.d.ts +15 -1
- package/apps/cli/dist/commands/lib/session-output.js +214 -6
- package/apps/cli/dist/commands/lib/session-view.d.ts +2 -2
- package/apps/cli/dist/commands/lib/status.js +5 -1
- package/apps/cli/dist/commands/lib/types.d.ts +4 -2
- package/apps/cli/dist/commands/lib/usage.js +123 -10
- package/apps/cli/dist/commands/lib/workspace.d.ts +2 -2
- package/apps/cli/dist/commands/lib/workspace.js +63 -10
- package/apps/cli/dist/commands/machine.js +50 -9
- package/apps/cli/dist/commands/memory.d.ts +2 -0
- package/apps/cli/dist/commands/memory.js +179 -0
- package/apps/cli/dist/commands/relay.js +29 -2
- package/apps/cli/dist/commands/release.d.ts +2 -0
- package/apps/cli/dist/commands/release.js +197 -0
- package/apps/cli/dist/commands/remote.js +10 -2
- package/apps/cli/dist/commands/schedule.d.ts +2 -0
- package/apps/cli/dist/commands/schedule.js +273 -0
- package/apps/cli/dist/commands/session.js +517 -5
- package/apps/cli/dist/commands/turn.js +225 -9
- package/apps/cli/dist/commands/workspace.d.ts +2 -0
- package/apps/cli/dist/commands/workspace.js +68 -0
- package/apps/cli/package.json +6 -0
- package/apps/daemon/dist/gateway/adapters.d.ts +38 -0
- package/apps/daemon/dist/gateway/adapters.js +2 -0
- package/apps/daemon/dist/gateway/feishu.d.ts +65 -0
- package/apps/daemon/dist/gateway/feishu.js +493 -0
- package/apps/daemon/dist/gateway/format.d.ts +2 -0
- package/apps/daemon/dist/gateway/format.js +19 -0
- package/apps/daemon/dist/gateway/handler.d.ts +7 -0
- package/apps/daemon/dist/gateway/handler.js +151 -0
- package/apps/daemon/dist/gateway/runtime.d.ts +33 -0
- package/apps/daemon/dist/gateway/runtime.js +850 -0
- package/apps/daemon/dist/gateway/store.d.ts +92 -0
- package/apps/daemon/dist/gateway/store.js +268 -0
- package/apps/daemon/dist/memory/handler.d.ts +7 -0
- package/apps/daemon/dist/memory/handler.js +105 -0
- package/apps/daemon/dist/memory/manager.d.ts +44 -0
- package/apps/daemon/dist/memory/manager.js +359 -0
- package/apps/daemon/dist/paths.d.ts +3 -0
- package/apps/daemon/dist/paths.js +3 -0
- package/apps/daemon/dist/relay/admission.d.ts +30 -0
- package/apps/daemon/dist/relay/admission.js +31 -0
- package/apps/daemon/dist/relay/connection.js +37 -1
- package/apps/daemon/dist/relay/devtools.d.ts +1 -1
- package/apps/daemon/dist/relay/register.js +2 -0
- package/apps/daemon/dist/relay/send.d.ts +2 -2
- package/apps/daemon/dist/relay/send.js +2 -0
- package/apps/daemon/dist/relay-http.d.ts +1 -1
- package/apps/daemon/dist/runtime/external-provider.d.ts +1 -1
- package/apps/daemon/dist/runtime/external-provider.js +187 -17
- package/apps/daemon/dist/runtime.d.ts +1 -2
- package/apps/daemon/dist/runtime.js +0 -3
- package/apps/daemon/dist/schedule/handler.d.ts +9 -0
- package/apps/daemon/dist/schedule/handler.js +148 -0
- package/apps/daemon/dist/schedule/runner.d.ts +21 -0
- package/apps/daemon/dist/schedule/runner.js +547 -0
- package/apps/daemon/dist/schedule/store.d.ts +9 -0
- package/apps/daemon/dist/schedule/store.js +143 -0
- package/apps/daemon/dist/session/create-session.d.ts +1 -1
- package/apps/daemon/dist/session/directory.d.ts +1 -1
- package/apps/daemon/dist/session/events.d.ts +15 -2
- package/apps/daemon/dist/session/events.js +76 -24
- package/apps/daemon/dist/session/file-preview.d.ts +1 -1
- package/apps/daemon/dist/session/lifecycle.d.ts +26 -3
- package/apps/daemon/dist/session/lifecycle.js +161 -22
- package/apps/daemon/dist/session/metadata.d.ts +2 -2
- package/apps/daemon/dist/session/metadata.js +42 -1
- package/apps/daemon/dist/session/primitives.d.ts +1 -1
- package/apps/daemon/dist/session/primitives.js +37 -6
- package/apps/daemon/dist/session/prompt.d.ts +28 -1
- package/apps/daemon/dist/session/prompt.js +340 -5
- package/apps/daemon/dist/session/reconcile.d.ts +3 -0
- package/apps/daemon/dist/session/reconcile.js +235 -0
- package/apps/daemon/dist/session/runtime-handle.d.ts +1 -1
- package/apps/daemon/dist/start.js +5 -1
- package/apps/daemon/dist/state.d.ts +2 -2
- package/apps/daemon/dist/turn-coordinator.d.ts +1 -0
- package/apps/daemon/dist/turn-coordinator.js +4 -0
- package/apps/daemon/dist/types.d.ts +16 -1
- package/apps/daemon/package.json +3 -25
- package/apps/relay/dist/connections.d.ts +2 -0
- package/apps/relay/dist/controller-handlers.d.ts +42 -2
- package/apps/relay/dist/controller-handlers.js +349 -37
- package/apps/relay/dist/db.js +296 -2
- package/apps/relay/dist/errors.d.ts +2 -1
- package/apps/relay/dist/errors.js +3 -1
- package/apps/relay/dist/http-routes.js +659 -33
- package/apps/relay/dist/http-schemas.d.ts +156 -0
- package/apps/relay/dist/http-schemas.js +85 -0
- package/apps/relay/dist/index.js +31 -1
- package/apps/relay/dist/machine-handlers.d.ts +15 -7
- package/apps/relay/dist/machine-handlers.js +567 -27
- package/apps/relay/dist/projections.d.ts +1 -1
- package/apps/relay/dist/projections.js +13 -0
- package/apps/relay/dist/relay-context.d.ts +41 -3
- package/apps/relay/dist/relay-context.js +244 -19
- package/apps/relay/dist/repositories.d.ts +2 -2
- package/apps/relay/dist/repositories.js +28 -1
- package/apps/relay/dist/runtime-bindings.d.ts +25 -0
- package/apps/relay/dist/runtime-bindings.js +49 -0
- package/apps/relay/dist/scope.d.ts +1 -1
- package/apps/relay/dist/types.d.ts +71 -1
- package/apps/relay/dist/websocket.js +2 -0
- package/package.json +5 -11
- package/packages/agent-sdk/dist/index.d.ts +80 -0
- package/packages/agent-sdk/dist/index.js +16 -0
- package/packages/client/dist/account.d.ts +35 -2
- package/packages/client/dist/account.js +98 -1
- package/packages/client/dist/client.d.ts +59 -6
- package/packages/client/dist/client.js +312 -58
- package/packages/client/dist/index.d.ts +1 -1
- package/packages/client/dist/parsers.d.ts +28 -2
- package/packages/client/dist/parsers.js +167 -0
- package/packages/client/dist/transport.d.ts +21 -1
- package/packages/client/dist/transport.js +69 -6
- package/packages/client/dist/types.d.ts +177 -1
- package/packages/client/dist/validation.d.ts +1 -1
- package/packages/runtime/dist/index.d.ts +66 -0
- package/packages/runtime-acpx/dist/index.d.ts +1 -1
- package/packages/runtime-acpx/dist/index.js +8 -0
- package/packages/runtime-cli/dist/claude-history.d.ts +1 -2
- package/packages/runtime-cli/dist/claude-history.js +0 -3
- package/packages/runtime-cli/dist/claude-session-store.d.ts +0 -1
- package/packages/runtime-cli/dist/claude-session-store.js +1 -1
- package/packages/runtime-cli/dist/claude-turn.d.ts +2 -1
- package/packages/runtime-cli/dist/claude-turn.js +29 -9
- package/packages/runtime-cli/dist/codex-app-server.d.ts +8 -3
- package/packages/runtime-cli/dist/codex-app-server.js +122 -25
- package/packages/runtime-cli/dist/codex-history.d.ts +1 -2
- package/packages/runtime-cli/dist/codex-history.js +11 -5
- package/packages/runtime-cli/dist/codex-protocol.d.ts +2 -2
- package/packages/runtime-cli/dist/codex-protocol.js +4 -4
- package/packages/runtime-cli/dist/history-merge.d.ts +1 -1
- package/packages/runtime-cli/dist/index.d.ts +1 -1
- package/packages/runtime-cli/dist/index.js +108 -2
- package/packages/runtime-cli/dist/permissions.d.ts +1 -1
- package/packages/runtime-cli/dist/session-store.d.ts +2 -1
- package/packages/runtime-cli/dist/session-store.js +9 -8
- package/packages/shared/dist/index.d.ts +2 -0
- package/packages/shared/dist/index.js +2 -0
- package/packages/shared/dist/protocol-schemas.d.ts +1077 -0
- package/packages/shared/dist/protocol-schemas.js +273 -0
- package/packages/shared/dist/protocol-types.d.ts +371 -3
- package/packages/shared/dist/protocol.d.ts +181 -2
- package/packages/shared/dist/protocol.js +197 -1
- package/packages/shared/dist/session-tags.d.ts +12 -0
- package/packages/shared/dist/session-tags.js +50 -0
- package/apps/cli/dist/commands/account.js.map +0 -1
- package/apps/cli/dist/commands/app.js.map +0 -1
- package/apps/cli/dist/commands/collect.js.map +0 -1
- package/apps/cli/dist/commands/command.js.map +0 -1
- package/apps/cli/dist/commands/config.js.map +0 -1
- package/apps/cli/dist/commands/daemon.js.map +0 -1
- package/apps/cli/dist/commands/lib/args.js.map +0 -1
- package/apps/cli/dist/commands/lib/audit.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap-config.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap-daemon.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap-output.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap.js.map +0 -1
- package/apps/cli/dist/commands/lib/config.js.map +0 -1
- package/apps/cli/dist/commands/lib/doctor.js.map +0 -1
- package/apps/cli/dist/commands/lib/exit.js.map +0 -1
- package/apps/cli/dist/commands/lib/index.js.map +0 -1
- package/apps/cli/dist/commands/lib/json.js.map +0 -1
- package/apps/cli/dist/commands/lib/local-daemon.js.map +0 -1
- package/apps/cli/dist/commands/lib/loop-store.js.map +0 -1
- package/apps/cli/dist/commands/lib/paths.js.map +0 -1
- package/apps/cli/dist/commands/lib/relay-http.js.map +0 -1
- package/apps/cli/dist/commands/lib/scope.js.map +0 -1
- package/apps/cli/dist/commands/lib/session-output.js.map +0 -1
- package/apps/cli/dist/commands/lib/session-view.js.map +0 -1
- package/apps/cli/dist/commands/lib/status.js.map +0 -1
- package/apps/cli/dist/commands/lib/types.js.map +0 -1
- package/apps/cli/dist/commands/lib/usage.js.map +0 -1
- package/apps/cli/dist/commands/lib/workspace.js.map +0 -1
- package/apps/cli/dist/commands/loop.js.map +0 -1
- package/apps/cli/dist/commands/machine.js.map +0 -1
- package/apps/cli/dist/commands/relay.js.map +0 -1
- package/apps/cli/dist/commands/remote.js.map +0 -1
- package/apps/cli/dist/commands/session.js.map +0 -1
- package/apps/cli/dist/commands/token.js.map +0 -1
- package/apps/cli/dist/commands/turn.js.map +0 -1
- package/apps/cli/dist/errors.js.map +0 -1
- package/apps/cli/dist/index.js.map +0 -1
- package/apps/daemon/dist/app.js.map +0 -1
- package/apps/daemon/dist/args.js.map +0 -1
- package/apps/daemon/dist/audit.js.map +0 -1
- package/apps/daemon/dist/cli.js.map +0 -1
- package/apps/daemon/dist/config.js.map +0 -1
- package/apps/daemon/dist/errors.js.map +0 -1
- package/apps/daemon/dist/loop/runner.js.map +0 -1
- package/apps/daemon/dist/loop/store.js.map +0 -1
- package/apps/daemon/dist/pair.js.map +0 -1
- package/apps/daemon/dist/paths.js.map +0 -1
- package/apps/daemon/dist/process.js.map +0 -1
- package/apps/daemon/dist/relay/connection.js.map +0 -1
- package/apps/daemon/dist/relay/devtools.js.map +0 -1
- package/apps/daemon/dist/relay/register.js.map +0 -1
- package/apps/daemon/dist/relay/send.js.map +0 -1
- package/apps/daemon/dist/relay-http.js.map +0 -1
- package/apps/daemon/dist/runtime/external-provider.js.map +0 -1
- package/apps/daemon/dist/runtime.js.map +0 -1
- package/apps/daemon/dist/session/create-session.js.map +0 -1
- package/apps/daemon/dist/session/directory.js.map +0 -1
- package/apps/daemon/dist/session/events.js.map +0 -1
- package/apps/daemon/dist/session/file-preview.js.map +0 -1
- package/apps/daemon/dist/session/lifecycle.js.map +0 -1
- package/apps/daemon/dist/session/metadata.js.map +0 -1
- package/apps/daemon/dist/session/primitives.js.map +0 -1
- package/apps/daemon/dist/session/prompt.js.map +0 -1
- package/apps/daemon/dist/session/runtime-handle.js.map +0 -1
- package/apps/daemon/dist/start.js.map +0 -1
- package/apps/daemon/dist/state.js.map +0 -1
- package/apps/daemon/dist/turn-coordinator.js.map +0 -1
- package/apps/daemon/dist/types.js.map +0 -1
- package/apps/daemon/dist/utils.js.map +0 -1
- package/apps/relay/dist/auth.js.map +0 -1
- package/apps/relay/dist/connections.js.map +0 -1
- package/apps/relay/dist/controller-handlers.js.map +0 -1
- package/apps/relay/dist/db.js.map +0 -1
- package/apps/relay/dist/errors.js.map +0 -1
- package/apps/relay/dist/http-routes.js.map +0 -1
- package/apps/relay/dist/http-schemas.js.map +0 -1
- package/apps/relay/dist/index.js.map +0 -1
- package/apps/relay/dist/machine-handlers.js.map +0 -1
- package/apps/relay/dist/projections.js.map +0 -1
- package/apps/relay/dist/relay-context.js.map +0 -1
- package/apps/relay/dist/repositories.js.map +0 -1
- package/apps/relay/dist/retention.js.map +0 -1
- package/apps/relay/dist/scope.js.map +0 -1
- package/apps/relay/dist/security.js.map +0 -1
- package/apps/relay/dist/types.js.map +0 -1
- package/apps/relay/dist/websocket.js.map +0 -1
- package/apps/relay/package.json +0 -29
- package/packages/agent-sdk/dist/index.d.ts.map +0 -1
- package/packages/agent-sdk/dist/index.js.map +0 -1
- package/packages/agent-sdk/package.json +0 -20
- package/packages/client/dist/account.d.ts.map +0 -1
- package/packages/client/dist/account.js.map +0 -1
- package/packages/client/dist/client.d.ts.map +0 -1
- package/packages/client/dist/client.js.map +0 -1
- package/packages/client/dist/errors.d.ts.map +0 -1
- package/packages/client/dist/errors.js.map +0 -1
- package/packages/client/dist/http.d.ts.map +0 -1
- package/packages/client/dist/http.js.map +0 -1
- package/packages/client/dist/index.d.ts.map +0 -1
- package/packages/client/dist/index.js.map +0 -1
- package/packages/client/dist/parsers.d.ts.map +0 -1
- package/packages/client/dist/parsers.js.map +0 -1
- package/packages/client/dist/transport.d.ts.map +0 -1
- package/packages/client/dist/transport.js.map +0 -1
- package/packages/client/dist/types.d.ts.map +0 -1
- package/packages/client/dist/types.js.map +0 -1
- package/packages/client/dist/validation.d.ts.map +0 -1
- package/packages/client/dist/validation.js.map +0 -1
- package/packages/client/package.json +0 -22
- package/packages/pie-provider/dist/index.d.ts.map +0 -1
- package/packages/pie-provider/dist/index.js.map +0 -1
- package/packages/pie-provider/package.json +0 -26
- package/packages/runtime/dist/index.d.ts.map +0 -1
- package/packages/runtime/dist/index.js.map +0 -1
- package/packages/runtime/package.json +0 -19
- package/packages/runtime-acpx/dist/index.d.ts.map +0 -1
- package/packages/runtime-acpx/dist/index.js.map +0 -1
- package/packages/runtime-acpx/package.json +0 -23
- package/packages/runtime-cli/dist/async-queue.d.ts.map +0 -1
- package/packages/runtime-cli/dist/async-queue.js.map +0 -1
- package/packages/runtime-cli/dist/claude-history.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-history.js.map +0 -1
- package/packages/runtime-cli/dist/claude-json.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-json.js.map +0 -1
- package/packages/runtime-cli/dist/claude-rename.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-rename.js.map +0 -1
- package/packages/runtime-cli/dist/claude-session-store.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-session-store.js.map +0 -1
- package/packages/runtime-cli/dist/claude-turn.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-turn.js.map +0 -1
- package/packages/runtime-cli/dist/codex-app-server.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-app-server.js.map +0 -1
- package/packages/runtime-cli/dist/codex-approvals.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-approvals.js.map +0 -1
- package/packages/runtime-cli/dist/codex-history.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-history.js.map +0 -1
- package/packages/runtime-cli/dist/codex-json-rpc.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-json-rpc.js.map +0 -1
- package/packages/runtime-cli/dist/codex-lifecycle.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-lifecycle.js.map +0 -1
- package/packages/runtime-cli/dist/codex-protocol.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-protocol.js.map +0 -1
- package/packages/runtime-cli/dist/command-resolver.d.ts.map +0 -1
- package/packages/runtime-cli/dist/command-resolver.js.map +0 -1
- package/packages/runtime-cli/dist/history-merge.d.ts.map +0 -1
- package/packages/runtime-cli/dist/history-merge.js.map +0 -1
- package/packages/runtime-cli/dist/index.d.ts.map +0 -1
- package/packages/runtime-cli/dist/index.js.map +0 -1
- package/packages/runtime-cli/dist/permissions.d.ts.map +0 -1
- package/packages/runtime-cli/dist/permissions.js.map +0 -1
- package/packages/runtime-cli/dist/session-store.d.ts.map +0 -1
- package/packages/runtime-cli/dist/session-store.js.map +0 -1
- package/packages/runtime-cli/package.json +0 -22
- package/packages/shared/dist/args.d.ts.map +0 -1
- package/packages/shared/dist/args.js.map +0 -1
- package/packages/shared/dist/crypto.d.ts.map +0 -1
- package/packages/shared/dist/crypto.js.map +0 -1
- package/packages/shared/dist/ids.d.ts.map +0 -1
- package/packages/shared/dist/ids.js.map +0 -1
- package/packages/shared/dist/index.d.ts.map +0 -1
- package/packages/shared/dist/index.js.map +0 -1
- package/packages/shared/dist/protocol-schemas.d.ts.map +0 -1
- package/packages/shared/dist/protocol-schemas.js.map +0 -1
- package/packages/shared/dist/protocol-types.d.ts.map +0 -1
- package/packages/shared/dist/protocol-types.js.map +0 -1
- package/packages/shared/dist/protocol.d.ts.map +0 -1
- package/packages/shared/dist/protocol.js.map +0 -1
- package/packages/shared/dist/session-name.d.ts.map +0 -1
- package/packages/shared/dist/session-name.js.map +0 -1
- package/packages/shared/dist/session-state.d.ts.map +0 -1
- package/packages/shared/dist/session-state.js.map +0 -1
- package/packages/shared/package.json +0 -24
|
@@ -44,11 +44,67 @@ function compactTurn(turn) {
|
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
46
|
async function readTurnSummary(client, sessionId, turnId) {
|
|
47
|
-
|
|
47
|
+
rejectEventPrimitiveId(turnId);
|
|
48
|
+
return findTurnSummaryByAnyId(summarizeTurns(await client.history(sessionId, 1000)), turnId);
|
|
48
49
|
}
|
|
49
50
|
async function resolveTurnOrCheckpointId(client, sessionId, turnOrCheckpointId) {
|
|
51
|
+
rejectEventPrimitiveId(turnOrCheckpointId);
|
|
50
52
|
const turn = await readTurnSummary(client, sessionId, turnOrCheckpointId);
|
|
51
|
-
|
|
53
|
+
if (!turn)
|
|
54
|
+
return turnOrCheckpointId;
|
|
55
|
+
if (turn.checkpointId && !turn.checkpointId.startsWith("event:"))
|
|
56
|
+
return turn.checkpointId;
|
|
57
|
+
if (turn.runtimeTurnId && !turn.runtimeTurnId.startsWith("event:"))
|
|
58
|
+
return turn.runtimeTurnId;
|
|
59
|
+
if (!turn.turnId.startsWith("event:"))
|
|
60
|
+
return turn.turnId;
|
|
61
|
+
throw new CliError("No provider-safe checkpoint or turn id is available for this turn.", "CHECKPOINT_UNAVAILABLE");
|
|
62
|
+
}
|
|
63
|
+
function rejectEventPrimitiveId(value) {
|
|
64
|
+
if (value.startsWith("event:")) {
|
|
65
|
+
throw new CliError("event:* ids are transcript implementation details, not turn/checkpoint/provider ids.", "INVALID_TURN_ID");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function findTurnSummaryByAnyId(turns, id) {
|
|
69
|
+
return turns.find((turn) => turn.turnId === id ||
|
|
70
|
+
turn.runtimeTurnId === id ||
|
|
71
|
+
turn.checkpointId === id);
|
|
72
|
+
}
|
|
73
|
+
function recoveryPromptWithContext(turns, inputTurnId, continuation) {
|
|
74
|
+
const chronological = [...turns].reverse();
|
|
75
|
+
const selected = [];
|
|
76
|
+
for (const turn of chronological) {
|
|
77
|
+
if (inputTurnId && (turn.turnId === inputTurnId || turn.runtimeTurnId === inputTurnId || turn.checkpointId === inputTurnId))
|
|
78
|
+
break;
|
|
79
|
+
if (turn.status === "running")
|
|
80
|
+
break;
|
|
81
|
+
selected.push(turn);
|
|
82
|
+
}
|
|
83
|
+
const blocks = selected.map((turn) => {
|
|
84
|
+
const lines = [`Turn ${turn.turnId} (${turn.status})`];
|
|
85
|
+
if (turn.prompt.trim())
|
|
86
|
+
lines.push(`User:\n${turn.prompt.trim()}`);
|
|
87
|
+
const output = (turn.output || turn.terminalText).trim();
|
|
88
|
+
if (output)
|
|
89
|
+
lines.push(`Assistant:\n${output}`);
|
|
90
|
+
return lines.join("\n");
|
|
91
|
+
});
|
|
92
|
+
const context = clampEnd(blocks.join("\n\n---\n\n"), 32 * 1024);
|
|
93
|
+
if (!context.trim())
|
|
94
|
+
return continuation;
|
|
95
|
+
return [
|
|
96
|
+
"Recovered context from the original Happy Elves session. The previous turn could not be confirmed, so do not assume it completed and do not replay its original prompt.",
|
|
97
|
+
"",
|
|
98
|
+
context,
|
|
99
|
+
"",
|
|
100
|
+
"User continuation:",
|
|
101
|
+
continuation,
|
|
102
|
+
].join("\n");
|
|
103
|
+
}
|
|
104
|
+
function clampEnd(value, maxChars) {
|
|
105
|
+
if (value.length <= maxChars)
|
|
106
|
+
return value;
|
|
107
|
+
return value.slice(value.length - maxChars);
|
|
52
108
|
}
|
|
53
109
|
async function waitForTurn(client, sessionId, turnId, timeoutMs) {
|
|
54
110
|
const startedAt = Date.now();
|
|
@@ -104,7 +160,125 @@ export async function handleTurn({ domain, action, positional, flags }) {
|
|
|
104
160
|
const turn = await readTurnSummary(client, sessionId, turnId);
|
|
105
161
|
if (!turn)
|
|
106
162
|
throw new CliError(`Turn not found: ${turnId}`, "TURN_NOT_FOUND");
|
|
107
|
-
|
|
163
|
+
const compact = compactTurn(turn);
|
|
164
|
+
const structured = structuredOutputForTurn(sessionId, turn);
|
|
165
|
+
ok("turn.status", wantsVerbose(flags)
|
|
166
|
+
? { ...structured, inputTurnId: turnId, ...compact, turn }
|
|
167
|
+
: { ...structured, inputTurnId: turnId, ...compact }, { sessionId, turnId: turn.turnId });
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
if (action === "reconcile") {
|
|
171
|
+
const sessionId = requirePositional(positional[0], "sessionId");
|
|
172
|
+
const turnId = positional[1] ?? (typeof flags.turn === "string" ? flags.turn : undefined);
|
|
173
|
+
if (turnId)
|
|
174
|
+
rejectEventPrimitiveId(turnId);
|
|
175
|
+
const result = await client.reconcileTurn(sessionId, turnId);
|
|
176
|
+
if (wantsJson(flags)) {
|
|
177
|
+
ok("turn.reconcile", result, { requestId: result.requestId, sessionId, turnId: result.turnId ?? turnId });
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
console.log(`Reconcile: ${result.status}${result.terminalStatus ? ` (${result.terminalStatus})` : ""}`);
|
|
181
|
+
if (result.turnId)
|
|
182
|
+
console.log(`Turn: ${result.turnId}`);
|
|
183
|
+
if (result.providerTurnId)
|
|
184
|
+
console.log(`Provider turn: ${result.providerTurnId}`);
|
|
185
|
+
if (result.reason)
|
|
186
|
+
console.log(`Reason: ${result.reason}`);
|
|
187
|
+
if (result.status !== "terminal" && result.status !== "active") {
|
|
188
|
+
console.log("Unable to confirm whether the previous execution finished. Use turn recover with --confirm-risk before sending a continuation.");
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
if (action === "recover") {
|
|
194
|
+
const sessionId = requirePositional(positional[0], "sessionId");
|
|
195
|
+
const inputTurnId = positional[1] ?? (typeof flags.turn === "string" ? flags.turn : undefined);
|
|
196
|
+
if (inputTurnId)
|
|
197
|
+
rejectEventPrimitiveId(inputTurnId);
|
|
198
|
+
if (flags["confirm-risk"] !== true) {
|
|
199
|
+
throw new CliError("Recovery can duplicate external side effects if the original turn later completes. Re-run with --confirm-risk to create a Recovery Session.", "RECOVERY_CONFIRMATION_REQUIRED");
|
|
200
|
+
}
|
|
201
|
+
const continuation = typeof flags.text === "string"
|
|
202
|
+
? flags.text
|
|
203
|
+
: typeof flags["text-file"] === "string"
|
|
204
|
+
? await readPromptTextFile(flags["text-file"])
|
|
205
|
+
: "";
|
|
206
|
+
if (!continuation.trim())
|
|
207
|
+
throw new CliError("Missing --text or --text-file", "MISSING_ARGUMENT");
|
|
208
|
+
const permissionMode = parsePermissionMode(flags["permission-mode"] ?? flags.permission);
|
|
209
|
+
const model = typeof flags.model === "string" && flags.model.trim() ? flags.model.trim() : undefined;
|
|
210
|
+
const sourceSession = await requireProjectedSession(client, sessionId, "turn.recover");
|
|
211
|
+
const sourceMetadata = await client.decodeSessionMetadata(sourceSession);
|
|
212
|
+
const sourceName = sourceMetadata.name ?? sourceSession.name;
|
|
213
|
+
const recoveryName = `${sourceName} Recovery`;
|
|
214
|
+
const turns = summarizeTurns(await client.history(sessionId, 1000));
|
|
215
|
+
const targetTurn = inputTurnId ? findTurnSummaryByAnyId(turns, inputTurnId) : turns[0];
|
|
216
|
+
let recoverySessionId;
|
|
217
|
+
let recoveryMode = "new-session-context";
|
|
218
|
+
let forkError;
|
|
219
|
+
const checkpoint = targetTurn?.checkpointId && !targetTurn.checkpointId.startsWith("event:") ? targetTurn.checkpointId : undefined;
|
|
220
|
+
if (checkpoint) {
|
|
221
|
+
try {
|
|
222
|
+
const fork = await client.fork(sessionId, { from: checkpoint, name: recoveryName });
|
|
223
|
+
recoverySessionId = fork.sessionId;
|
|
224
|
+
recoveryMode = "checkpoint-fork";
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
forkError = error instanceof Error ? error.message : String(error);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
let promptText = continuation;
|
|
231
|
+
if (!recoverySessionId) {
|
|
232
|
+
const created = await client.createSession({
|
|
233
|
+
machineId: sourceSession.machineId,
|
|
234
|
+
agent: sourceMetadata.agent ?? sourceSession.agent,
|
|
235
|
+
cwd: sourceMetadata.cwd ?? sourceSession.cwd,
|
|
236
|
+
name: recoveryName,
|
|
237
|
+
createdFrom: "turn.recover",
|
|
238
|
+
permissionMode,
|
|
239
|
+
model,
|
|
240
|
+
});
|
|
241
|
+
if (!created.sessionId)
|
|
242
|
+
throw new CliError("Recovery session create was acknowledged without sessionId", "RELAY_RESPONSE_INVALID");
|
|
243
|
+
recoverySessionId = created.sessionId;
|
|
244
|
+
promptText = recoveryPromptWithContext(turns, inputTurnId, continuation);
|
|
245
|
+
}
|
|
246
|
+
await client.wait(recoverySessionId, { timeoutMs: 120_000 });
|
|
247
|
+
const wait = flags.detach !== true && flags["no-wait"] !== true;
|
|
248
|
+
const memoryMode = parseMemoryModeFlag(flags["memory-mode"] ?? flags.memory) ?? "readonly";
|
|
249
|
+
const recoverySession = await client.getSession(recoverySessionId);
|
|
250
|
+
const memoryProject = typeof flags["memory-project"] === "string"
|
|
251
|
+
? flags["memory-project"]
|
|
252
|
+
: recoverySession
|
|
253
|
+
? `${recoverySession.machineId}:${recoverySession.cwd}`
|
|
254
|
+
: undefined;
|
|
255
|
+
const result = await client.run(recoverySessionId, promptText, {
|
|
256
|
+
wait,
|
|
257
|
+
permissionMode,
|
|
258
|
+
memoryMode,
|
|
259
|
+
model,
|
|
260
|
+
...(memoryProject ? { memoryProjectKey: memoryProject } : {}),
|
|
261
|
+
memoryTopN: 3,
|
|
262
|
+
waitTimeoutMs: parseDurationMs(flags.timeout, DEFAULT_COMMAND_TIMEOUT_MS),
|
|
263
|
+
ackTimeoutMs: 15_000,
|
|
264
|
+
});
|
|
265
|
+
if (wantsJson(flags)) {
|
|
266
|
+
ok("turn.recover", {
|
|
267
|
+
sourceSessionId: sessionId,
|
|
268
|
+
sourceTurnId: targetTurn?.turnId ?? inputTurnId,
|
|
269
|
+
recoverySessionId,
|
|
270
|
+
recoveryTurnId: result.turnId,
|
|
271
|
+
recoveryMode,
|
|
272
|
+
...(forkError ? { forkError } : {}),
|
|
273
|
+
}, { requestId: result.requestId, sessionId: recoverySessionId, turnId: result.turnId });
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
console.log(`Recovery session: ${recoverySessionId}`);
|
|
277
|
+
console.log(`Recovery mode: ${recoveryMode}`);
|
|
278
|
+
if (forkError)
|
|
279
|
+
console.log(`Checkpoint fork fallback: ${forkError}`);
|
|
280
|
+
console.log(`Turn: ${result.turnId}`);
|
|
281
|
+
}
|
|
108
282
|
return true;
|
|
109
283
|
}
|
|
110
284
|
if (action === "run") {
|
|
@@ -120,8 +294,29 @@ export async function handleTurn({ domain, action, positional, flags }) {
|
|
|
120
294
|
const wait = flags.detach !== true && flags["no-wait"] !== true;
|
|
121
295
|
const watchTimeoutMs = parseDurationMs(flags.timeout, DEFAULT_COMMAND_TIMEOUT_MS);
|
|
122
296
|
const ackTimeoutMs = 15_000;
|
|
123
|
-
const
|
|
124
|
-
const
|
|
297
|
+
const inactivityTimeoutMs = parseDurationMs(flags["inactivity-timeout"] ?? flags["runtime-timeout"], DEFAULT_COMMAND_TIMEOUT_MS);
|
|
298
|
+
const memoryMode = parseMemoryModeFlag(flags["memory-mode"] ?? flags.memory) ?? "readonly";
|
|
299
|
+
const model = typeof flags.model === "string" && flags.model.trim() ? flags.model.trim() : undefined;
|
|
300
|
+
const session = await client.getSession(sessionId);
|
|
301
|
+
const memoryProject = typeof flags["memory-project"] === "string"
|
|
302
|
+
? flags["memory-project"]
|
|
303
|
+
: session
|
|
304
|
+
? `${session.machineId}:${session.cwd}`
|
|
305
|
+
: undefined;
|
|
306
|
+
const memoryTopN = typeof flags["memory-top-n"] === "string" ? Number(flags["memory-top-n"]) : 3;
|
|
307
|
+
if (!Number.isInteger(memoryTopN) || memoryTopN <= 0)
|
|
308
|
+
throw new CliError("Invalid --memory-top-n", "INVALID_ARGUMENT");
|
|
309
|
+
const result = await client.run(sessionId, text, {
|
|
310
|
+
wait,
|
|
311
|
+
permissionMode,
|
|
312
|
+
memoryMode,
|
|
313
|
+
model,
|
|
314
|
+
...(memoryProject ? { memoryProjectKey: memoryProject } : {}),
|
|
315
|
+
memoryTopN,
|
|
316
|
+
waitTimeoutMs: watchTimeoutMs,
|
|
317
|
+
ackTimeoutMs,
|
|
318
|
+
inactivityTimeoutMs,
|
|
319
|
+
});
|
|
125
320
|
const events = await client.decodeEvents(result.events);
|
|
126
321
|
const output = wait && result.turnId ? await writeTurnOutput(sessionId, result.turnId, events) : undefined;
|
|
127
322
|
if (wantsJson(flags)) {
|
|
@@ -132,10 +327,14 @@ export async function handleTurn({ domain, action, positional, flags }) {
|
|
|
132
327
|
: { state: "accepted", sessionId };
|
|
133
328
|
ok("turn.run", {
|
|
134
329
|
...structured,
|
|
330
|
+
memoryMode,
|
|
331
|
+
...(memoryProject ? { memoryProjectKey: memoryProject } : {}),
|
|
135
332
|
...(wantsVerbose(flags) ? { events, output } : {}),
|
|
136
333
|
}, { requestId: result.requestId, sessionId, turnId: result.turnId });
|
|
137
334
|
}
|
|
138
335
|
else if (wait) {
|
|
336
|
+
if (memoryMode !== "off")
|
|
337
|
+
console.log(`Memory mode: ${memoryMode}${memoryProject ? ` (${memoryProject})` : ""}`);
|
|
139
338
|
printConciseEvents(events);
|
|
140
339
|
if (output) {
|
|
141
340
|
const label = output.status === "completed" ? "Completed" : output.status[0]?.toUpperCase() + output.status.slice(1);
|
|
@@ -145,6 +344,8 @@ export async function handleTurn({ domain, action, positional, flags }) {
|
|
|
145
344
|
}
|
|
146
345
|
}
|
|
147
346
|
else {
|
|
347
|
+
if (memoryMode !== "off")
|
|
348
|
+
console.log(`Memory mode: ${memoryMode}${memoryProject ? ` (${memoryProject})` : ""}`);
|
|
148
349
|
console.log(`Turn started: ${result.turnId}`);
|
|
149
350
|
}
|
|
150
351
|
return true;
|
|
@@ -158,7 +359,7 @@ export async function handleTurn({ domain, action, positional, flags }) {
|
|
|
158
359
|
...structuredOutputForTurn(sessionId, turn),
|
|
159
360
|
until: "turn",
|
|
160
361
|
...(wantsVerbose(flags) ? { turn } : {}),
|
|
161
|
-
}, { sessionId, turnId });
|
|
362
|
+
}, { sessionId, turnId: turn.turnId });
|
|
162
363
|
}
|
|
163
364
|
else {
|
|
164
365
|
console.log(`Turn ${turn.turnId} ${turn.status}`);
|
|
@@ -167,8 +368,11 @@ export async function handleTurn({ domain, action, positional, flags }) {
|
|
|
167
368
|
}
|
|
168
369
|
if (action === "result") {
|
|
169
370
|
const sessionId = requirePositional(positional[0], "sessionId");
|
|
170
|
-
const
|
|
171
|
-
const
|
|
371
|
+
const inputTurnId = positional[1] ?? (typeof flags.turn === "string" ? flags.turn : undefined);
|
|
372
|
+
const turn = inputTurnId ? await readTurnSummary(client, sessionId, inputTurnId) : undefined;
|
|
373
|
+
if (inputTurnId && !turn)
|
|
374
|
+
throw new CliError(`Turn not found: ${inputTurnId}`, "TURN_NOT_FOUND");
|
|
375
|
+
const result = await rebuildTurnOutput(client, sessionId, turn?.turnId);
|
|
172
376
|
if (wantsJson(flags)) {
|
|
173
377
|
ok("turn.result", {
|
|
174
378
|
...structuredOutputForStoredTurn(result),
|
|
@@ -225,7 +429,10 @@ export async function handleTurn({ domain, action, positional, flags }) {
|
|
|
225
429
|
const inputTarget = requirePositional(positional[1], "turnOrCheckpointId");
|
|
226
430
|
const from = await resolveTurnOrCheckpointId(client, sessionId, inputTarget);
|
|
227
431
|
const name = requireString(flags, "name");
|
|
228
|
-
const
|
|
432
|
+
const sourceTags = flags["copy-tags"] === true
|
|
433
|
+
? (await client.decodeSessionMetadata(await requireProjectedSession(client, sessionId, "turn.fork"))).tags
|
|
434
|
+
: undefined;
|
|
435
|
+
const result = await client.fork(sessionId, { from, name, tags: sourceTags });
|
|
229
436
|
if (!result.sessionId) {
|
|
230
437
|
throw new CliError("turn.fork was acknowledged without a target session id", "RELAY_RESPONSE_INVALID");
|
|
231
438
|
}
|
|
@@ -239,9 +446,18 @@ export async function handleTurn({ domain, action, positional, flags }) {
|
|
|
239
446
|
currentHead: forkedSession?.currentHead,
|
|
240
447
|
sourceCheckpointId: forkedSession?.sourceCheckpointId,
|
|
241
448
|
name: forkedMetadata.name ?? forkedSession?.name,
|
|
449
|
+
...(sourceTags && sourceTags.length > 0 ? { copiedTags: sourceTags } : {}),
|
|
242
450
|
}, { requestId: result.requestId, sessionId: result.sessionId });
|
|
243
451
|
return true;
|
|
244
452
|
}
|
|
245
453
|
return false;
|
|
246
454
|
}
|
|
455
|
+
function parseMemoryModeFlag(value) {
|
|
456
|
+
if (typeof value !== "string" || !value.trim())
|
|
457
|
+
return undefined;
|
|
458
|
+
const normalized = value.trim().toLowerCase().replace(/-/g, "");
|
|
459
|
+
if (normalized === "off" || normalized === "readonly" || normalized === "readwrite")
|
|
460
|
+
return normalized;
|
|
461
|
+
throw new CliError("Invalid --memory-mode; expected off|readonly|readwrite|read-only|read-write", "INVALID_ARGUMENT");
|
|
462
|
+
}
|
|
247
463
|
//# sourceMappingURL=turn.js.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { CliError, ControllerClient, ok, readConfig, requirePositional, requireString, wantsJson } from "./lib/index.js";
|
|
2
|
+
export async function handleWorkspace({ domain, action, positional, flags }) {
|
|
3
|
+
if (domain !== "workspace")
|
|
4
|
+
return false;
|
|
5
|
+
const config = await readConfig(flags);
|
|
6
|
+
const client = new ControllerClient(config);
|
|
7
|
+
if (action === "state") {
|
|
8
|
+
const state = await client.workspaceSync();
|
|
9
|
+
if (!wantsJson(flags)) {
|
|
10
|
+
console.log(`Stars: ${state.stars.length}`);
|
|
11
|
+
console.log(`Recent sessions: ${state.recentSessions.length}`);
|
|
12
|
+
console.log(`Pinned workspaces: ${state.cwdPins.length}`);
|
|
13
|
+
console.log(`Project preferences: ${state.projectPreferences.length}`);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
ok("workspace.state", state);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
if (action === "star") {
|
|
20
|
+
const sessionId = requirePositional(positional[0], "sessionId");
|
|
21
|
+
ok("workspace.star", await client.starSession(sessionId));
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
if (action === "unstar") {
|
|
25
|
+
const sessionId = requirePositional(positional[0], "sessionId");
|
|
26
|
+
ok("workspace.unstar", await client.unstarSession(sessionId));
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
if (action === "recent") {
|
|
30
|
+
const sessionId = requirePositional(positional[0], "sessionId");
|
|
31
|
+
ok("workspace.recent", await client.markSessionRecent(sessionId));
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if (action === "pin-cwd") {
|
|
35
|
+
const machineId = requireString(flags, "machine");
|
|
36
|
+
const cwd = requireString(flags, "cwd");
|
|
37
|
+
const label = typeof flags.label === "string" ? flags.label : undefined;
|
|
38
|
+
ok("workspace.pin-cwd", await client.pinWorkspaceCwd({ machineId, cwd, label }));
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (action === "unpin-cwd") {
|
|
42
|
+
const machineId = requireString(flags, "machine");
|
|
43
|
+
const cwd = requireString(flags, "cwd");
|
|
44
|
+
ok("workspace.unpin-cwd", await client.unpinWorkspaceCwd({ machineId, cwd }));
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
if (action === "prefer") {
|
|
48
|
+
const projectKey = requireString(flags, "project");
|
|
49
|
+
const machineId = typeof flags.machine === "string" ? flags.machine : undefined;
|
|
50
|
+
const cwd = typeof flags.cwd === "string" ? flags.cwd : undefined;
|
|
51
|
+
const agent = typeof flags.agent === "string" ? flags.agent : undefined;
|
|
52
|
+
const memoryMode = parseMemoryMode(flags["memory-mode"] ?? flags.memory);
|
|
53
|
+
ok("workspace.prefer", await client.setWorkspaceProjectPreference({ projectKey, machineId, cwd, agent, ...(memoryMode ? { memoryMode } : {}) }));
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
function parseMemoryMode(value) {
|
|
59
|
+
if (value === undefined || value === false)
|
|
60
|
+
return undefined;
|
|
61
|
+
if (typeof value !== "string" || !value.trim())
|
|
62
|
+
return undefined;
|
|
63
|
+
const normalized = value.trim().toLowerCase().replace(/-/g, "");
|
|
64
|
+
if (normalized === "off" || normalized === "readonly" || normalized === "readwrite")
|
|
65
|
+
return normalized;
|
|
66
|
+
throw new CliError("Invalid --memory-mode; expected off|readonly|readwrite|read-only|read-write", "INVALID_ARGUMENT");
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { GatewayDestination, GatewayEventPayload } from "../../../../packages/shared/dist/index.js";
|
|
2
|
+
import type { DaemonConfig } from "../types.js";
|
|
3
|
+
import type { GatewayChannelConfig } from "./store.js";
|
|
4
|
+
export type GatewayDeliveryInput = {
|
|
5
|
+
deliveryId: string;
|
|
6
|
+
destination: GatewayDestination;
|
|
7
|
+
payload: GatewayEventPayload;
|
|
8
|
+
};
|
|
9
|
+
export type GatewayDeliveryResult = {
|
|
10
|
+
platformMessageId?: string;
|
|
11
|
+
};
|
|
12
|
+
export type GatewayInboundResult = {
|
|
13
|
+
accepted: boolean;
|
|
14
|
+
duplicate?: boolean;
|
|
15
|
+
queued?: boolean;
|
|
16
|
+
};
|
|
17
|
+
type GatewayInboundSender = (input: {
|
|
18
|
+
gatewayId: string;
|
|
19
|
+
platform: "feishu" | "fake";
|
|
20
|
+
platformEventId: string;
|
|
21
|
+
platformMessageId: string;
|
|
22
|
+
senderPlatformUserId: string;
|
|
23
|
+
senderDisplayName?: string;
|
|
24
|
+
destination: GatewayDestination;
|
|
25
|
+
text: string;
|
|
26
|
+
}) => Promise<GatewayInboundResult>;
|
|
27
|
+
export type GatewayAdapter = {
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
stop(): Promise<void>;
|
|
30
|
+
send(input: GatewayDeliveryInput): Promise<GatewayDeliveryResult>;
|
|
31
|
+
};
|
|
32
|
+
export type GatewayAdapterContext = {
|
|
33
|
+
config: DaemonConfig;
|
|
34
|
+
channel: GatewayChannelConfig;
|
|
35
|
+
readChannel: () => Promise<GatewayChannelConfig | undefined>;
|
|
36
|
+
sendInbound: GatewayInboundSender;
|
|
37
|
+
};
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { GatewayDestination } from "../../../../packages/shared/dist/index.js";
|
|
2
|
+
import type { GatewayAdapter, GatewayAdapterContext, GatewayInboundResult } from "./adapters.js";
|
|
3
|
+
type LarkClient = {
|
|
4
|
+
request?: (input: unknown) => Promise<unknown>;
|
|
5
|
+
im?: {
|
|
6
|
+
v1?: {
|
|
7
|
+
message?: {
|
|
8
|
+
create?: (input: unknown) => Promise<unknown>;
|
|
9
|
+
reply?: (input: unknown) => Promise<unknown>;
|
|
10
|
+
};
|
|
11
|
+
messageReaction?: {
|
|
12
|
+
create?: (input: unknown) => Promise<unknown>;
|
|
13
|
+
delete?: (input: unknown) => Promise<unknown>;
|
|
14
|
+
};
|
|
15
|
+
message_reaction?: {
|
|
16
|
+
create?: (input: unknown) => Promise<unknown>;
|
|
17
|
+
delete?: (input: unknown) => Promise<unknown>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
message?: {
|
|
21
|
+
create?: (input: unknown) => Promise<unknown>;
|
|
22
|
+
reply?: (input: unknown) => Promise<unknown>;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
type FeishuMention = {
|
|
27
|
+
key?: string;
|
|
28
|
+
openId?: string;
|
|
29
|
+
userId?: string;
|
|
30
|
+
unionId?: string;
|
|
31
|
+
appId?: string;
|
|
32
|
+
name?: string;
|
|
33
|
+
isBot?: boolean;
|
|
34
|
+
};
|
|
35
|
+
type FeishuBotIdentity = {
|
|
36
|
+
openId?: string;
|
|
37
|
+
userId?: string;
|
|
38
|
+
unionId?: string;
|
|
39
|
+
appId?: string;
|
|
40
|
+
};
|
|
41
|
+
type NormalizedFeishuInbound = Omit<Parameters<GatewayAdapterContext["sendInbound"]>[0], "gatewayId" | "platform"> & {
|
|
42
|
+
chatType?: string;
|
|
43
|
+
mentions: FeishuMention[];
|
|
44
|
+
};
|
|
45
|
+
export declare function createFeishuGatewayAdapter(context: GatewayAdapterContext): Promise<GatewayAdapter>;
|
|
46
|
+
export declare function shouldCompleteProcessingReaction(result: GatewayInboundResult, input?: {
|
|
47
|
+
startedReaction?: boolean;
|
|
48
|
+
}): boolean;
|
|
49
|
+
export declare function createFeishuProcessingReactionTracker(client: LarkClient, input?: {
|
|
50
|
+
emojiType?: string;
|
|
51
|
+
maxTracked?: number;
|
|
52
|
+
now?: () => number;
|
|
53
|
+
}): {
|
|
54
|
+
start(messageId: string): Promise<boolean>;
|
|
55
|
+
complete(messageId: string): Promise<void>;
|
|
56
|
+
clear(): Promise<void>;
|
|
57
|
+
pendingCount(): number;
|
|
58
|
+
};
|
|
59
|
+
export declare function normalizeFeishuMessage(data: unknown): NormalizedFeishuInbound | undefined;
|
|
60
|
+
export declare function shouldHandleFeishuInbound(profile: {
|
|
61
|
+
inboundMode: "mention" | "all";
|
|
62
|
+
}, inbound: Pick<NormalizedFeishuInbound, "chatType" | "mentions">, botIdentity: string | FeishuBotIdentity | undefined): boolean;
|
|
63
|
+
export declare function sendFeishuText(client: LarkClient, destination: GatewayDestination, text: string, deliveryId?: string): Promise<unknown>;
|
|
64
|
+
export declare function stripFeishuBotMention(text: string, mentions: FeishuMention[], botIdentity: string | FeishuBotIdentity | undefined): string;
|
|
65
|
+
export {};
|