Merge remote-tracking branch 'origin/master' into worktree/web-file-session-references

# Conflicts:
#	.agents/notes/implemented/architecture/2026-07-25-web-command-surfaces-and-assembly.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-25-web-command-surfaces-and-assembly.zh.md
#	.agents/notes/implemented/feature/2026-07-21-cross-session-references.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-21-cross-session-references.md
#	.agents/notes/implemented/feature/2026-07-21-cross-session-references.zh.md
#	apps/web/tests/scaffold.ts
#	apps/web/tsconfig.json
#	docs/event-producer-consumer.md
#	docs/module-graph.md
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/README.md
#	packages/client/ui-conversation/README.zh.md
#	packages/client/ui-conversation/src/client/chat/MessageItem.tsx
#	packages/client/ui-slash/README.i18n.yaml
#	packages/client/ui-subagent/README.i18n.yaml
#	packages/client/ui-subagent/README.zh.md
#	packages/client/ui-subagent/src/client/index.ts
#	packages/client/ui-subagent/tests/browser-plugin.spec.ts
#	packages/context/session-reference/README.i18n.yaml
#	packages/context/session-reference/README.md
#	packages/context/session-reference/README.zh.md
#	packages/core/session/README.i18n.yaml
#	packages/core/session/README.md
#	packages/core/session/README.zh.md
#	packages/host/apiproxy/README.i18n.yaml
#	packages/host/apiproxy/README.md
#	packages/host/apiproxy/README.zh.md
#	packages/host/apiproxy/src/api-proxy.ts
#	packages/host/apiproxy/src/api/rpc.ts
#	packages/host/apiproxy/src/fetch/handler.ts
#	tsconfig.host.json
This commit is contained in:
Yichen Jiang
2026-08-06 16:59:44 +08:00
2659 changed files with 60184 additions and 26439 deletions
@@ -97,25 +97,19 @@ function appendConversation(session: Session): void {
{ surfaceOp: 'append' },
)
session.append(
'steering/message',
{
turn: 2,
message: createUserMessage({
content: [{ type: 'text', text: 'human steer' }],
source: { kind: 'user' },
}),
},
'user/message',
createUserMessage({
content: [{ type: 'text', text: 'human steer' }],
source: { kind: 'user' },
}),
{ surfaceOp: 'append' },
)
session.append(
'steering/message',
{
turn: 2,
message: createUserMessage({
content: [{ type: 'text', text: 'plugin steer' }],
source: { kind: 'plugin', plugin: 'goal' },
}),
},
'user/message',
createUserMessage({
content: [{ type: 'text', text: 'plugin steer' }],
source: { kind: 'plugin', plugin: 'goal' },
}),
{ surfaceOp: 'append' },
)
session.append(
@@ -161,14 +155,11 @@ function appendConversation(session: Session): void {
{ surfaceOp: 'append' },
)
session.append(
'steering/message',
{
turn: 2,
message: createUserMessage({
content: [{ type: 'reasoning', text: 'empty projected steering' }],
source: { kind: 'user' },
}),
},
'user/message',
createUserMessage({
content: [{ type: 'reasoning', text: 'empty projected steering' }],
source: { kind: 'user' },
}),
{ surfaceOp: 'append' },
)
session.append(
@@ -379,6 +370,7 @@ describe('session reference discovery and preparation', () => {
content: [{ type: 'text', text: 'nested referenced snapshot must not propagate' }],
source: {
kind: 'session-reference',
form: 'recall',
version: 1,
references: [],
},
@@ -643,7 +635,7 @@ describe('session reference discovery and preparation', () => {
expect(JSON.stringify(before)).toContain('durable referenced fact')
expect(JSON.stringify(before)).toContain('use @source')
expect(JSON.stringify(before)).not.toContain('later source mutation')
expect(new Session(SessionId('replayed-target'), target.events).deriveMessages()).toEqual(before)
expect(Session.create(SessionId('replayed-target'), target.events).deriveMessages()).toEqual(before)
})
it('rejects direct invalid configuration before service publication', async () => {