github / github/copilot-sdk

FLEET: resumeSession() with customAgents errors with malformed timeout message "[object Object]ms"

未关闭
#915 1 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Java
星标
10.5k
派生
1.5k
平均合并
1 天 14 小时
30 天内合并 PR
129

描述

## Summary

Calling `client.resumeSession(sessionId, { customAgents: [...] })` on a live session produces a timeout error with a malformed message: `"Timeout after [object Object]ms"`. This reveals two bugs: (1) `resumeSession` with `customAgents` fails, and (2) the timeout value is being stringified via implicit `.toString()` instead of extracting the numeric value.

## Steps to Reproduce

```javascript
import { CopilotClient, approveAll } from '@github/copilot-sdk';

const client = new CopilotClient();
await client.start();

const session = await client.createSession({ onPermissionRequest: approveAll });
const sessionId = session.id;
await session.destroy();

try {
const resumed = await client.resumeSession(sessionId, {
onPermissionRequest: approveAll,
customAgents: [{
name: 'post-creation-agent',
displayName: 'Post Creation Agent',
description: 'Added during resume',
prompt: 'You are a post-creation agent.',
tools: ['view'],
infer: false,
}],
});
} catch (err) {
console.error(err.message);
// → "Timeout after [object Object]ms waiting for session.idle"
}
```

## Observed Behaviour

Spike data (2026-03-17):

```json
{
"resumeSucceeded": false,
"resumeError": "Timeout after [object Object]ms waiting for session.idle",
"answer": "NO/ERROR"
}
```

## Bug 1: resumeSession with customAgents fails

The TypeScript type `ResumeSessionConfig` accepts `customAgents`, but the CLI backend appears to reject or ignore it and the session never reaches `idle`. Either:
- `customAgents` is not supported on resume (the type should exclude it), or
- There is a backend defect handling `customAgents` in `session.resume`

## Bug 2: Malformed timeout error message

`"Timeout after [object Object]ms"` is a string formatting bug. The timeout config value (likely `{ ms: number }` or similar) is being coerced to string via `.toString()` instead of extracting the numeric value.

Expected: `"Timeout after 30000ms waiting for session.idle"`

## Workaround

Only set `customAgents` at initial `createSession` time. Do not attempt to add agents via `resumeSession`:

```javascript
// ✅ Works
const session = await client.createSession({
onPermissionRequest: approveAll,
customAgents: [{ name: 'my-agent', ... }],
});

// ❌ Errors with malformed timeout
const session = await client.resumeSession(id, {
customAgents: [{ name: 'my-agent', ... }],
});
```

## Environment

- SDK: `@github/copilot-sdk` v0.1.32
- CLI: latest
- Node: v24.13.1

贡献指南

打开贡献指南

调研方向

从 TypeScript ResumeSessionConfig 和 resumeSession(sessionId, ...) 入口点开始,然后将其对 customAgents 的处理与 createSession 进行比较。跟踪 session.resume 路径和超时错误的格式化方式。完成标准是:支持恢复时的 customAgents 行为,或明确拒绝该行为,并且超时消息显示数值而不是 [object Object]。

由索引模型根据 Issue 内容生成。

评估

技术栈
javascript, typescript
领域
api, backend
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。