Merge remote-tracking branch 'origin/master' into session-query-tool
# Conflicts: # docs/architecture.i18n.yaml
This commit is contained in:
@@ -14,7 +14,6 @@ export function extractSessionEventText(event: SessionEvent): string {
|
||||
switch (event.type) {
|
||||
case 'user/message':
|
||||
case 'assistant/message':
|
||||
case 'context/message':
|
||||
case 'steering/message':
|
||||
return contentText(event.data.content)
|
||||
case 'prompt/blocked':
|
||||
|
||||
@@ -44,7 +44,7 @@ describe('session-query semantic extraction', () => {
|
||||
const events: SessionEvent[] = [
|
||||
{ type: 'user/message', seq: 0, time: 1, data: { content: messageContent, source: { kind: 'user' } }, surfaceOp: 'append' },
|
||||
{ type: 'assistant/message', seq: 1, time: 2, data: { turn: 1, step: 1, content: messageContent, provenance: { provider: 'mock', model: 'mock' } }, surfaceOp: 'append' },
|
||||
{ type: 'context/message', seq: 2, time: 3, data: { content: messageContent, source: { kind: 'plugin', plugin: 'test' } }, surfaceOp: 'append' },
|
||||
{ type: 'user/message', seq: 2, time: 3, data: { content: messageContent, source: { kind: 'plugin', plugin: 'test' } }, surfaceOp: 'append' },
|
||||
{ type: 'steering/message', seq: 3, time: 4, data: { turn: 1, content: messageContent, source: { kind: 'user' } }, surfaceOp: 'append' },
|
||||
{ type: 'prompt/blocked', seq: 4, time: 5, data: { content: [{ type: 'text', text: 'unsafe' }], source: { kind: 'user' }, reason: 'policy' } },
|
||||
{ type: 'tool/call', seq: 5, time: 6, data: { turn: 1, step: 1, callId, name: 'bash', arguments: '{"cmd":"pwd"}' } },
|
||||
|
||||
@@ -116,7 +116,7 @@ function appendTraceEvents(session: Session): void {
|
||||
{ surfaceOp: { op: 'replace', start: 3, end: 3 }, sourceEventSeqs: [3, 2] },
|
||||
)
|
||||
session.append(
|
||||
'context/message',
|
||||
'user/message',
|
||||
{ content: [{ type: 'text', text: 'context' }], source: { kind: 'plugin', plugin: 'test' } },
|
||||
{ surfaceOp: 'append' },
|
||||
)
|
||||
@@ -318,14 +318,14 @@ describe('session event tracing', () => {
|
||||
const live = ctx.sessions.create(durable.id, { meta: { createdAt: 1, cwd: '/same' } })
|
||||
live.append('turn/start', { turn: 1, trigger: { kind: 'message', source: { kind: 'user' } } })
|
||||
live.append(
|
||||
'context/message',
|
||||
'user/message',
|
||||
{ content: [{ type: 'text', text: 'live' }], source: { kind: 'plugin', plugin: 'test' } },
|
||||
{ surfaceOp: 'append' },
|
||||
)
|
||||
TracePersistence.listFailure = new Error('list unavailable')
|
||||
TracePersistence.inspectFailure = new Error('inspect unavailable')
|
||||
await expect(ctx.sessionQuery.traceEvent({ sessionId: durable.id, seq: 1 }))
|
||||
.resolves.toMatchObject({ target: { type: 'context/message' } })
|
||||
.resolves.toMatchObject({ target: { type: 'user/message' } })
|
||||
expect([TracePersistence.listCalls, TracePersistence.inspectCalls]).toEqual([1, 1])
|
||||
|
||||
TracePersistence.reset([{ meta: durable, events: [appendEvent(0)] }])
|
||||
|
||||
@@ -1194,13 +1194,16 @@ describe('workspace authority and lineage redaction', () => {
|
||||
|
||||
it('rejects a default self read when its same-id observation moved after caller capture', async () => {
|
||||
const mounted = await mount()
|
||||
const secret = mounted.caller.append(
|
||||
const appendLegacy = mounted.caller.append.bind(mounted.caller) as unknown as (
|
||||
type: string,
|
||||
data: unknown,
|
||||
) => Session['events'][number]
|
||||
const secret = appendLegacy(
|
||||
'context/message',
|
||||
{
|
||||
content: [{ type: 'text', text: 'same-id moved secret' }],
|
||||
source: { kind: 'plugin', plugin: 'test' },
|
||||
},
|
||||
{ surfaceOp: 'append' },
|
||||
)
|
||||
const window = await mounted.ctx.sessionQuery.readEvent({
|
||||
sessionId: mounted.caller.id,
|
||||
@@ -1963,7 +1966,7 @@ describe('trace and exact read rendering', () => {
|
||||
expect(text(result)).toContain(new Date(session.events[0]?.time ?? 0).toISOString())
|
||||
})
|
||||
|
||||
it('renders unabridged fenced target JSON and readable semantic neighbor summaries', async () => {
|
||||
it('renders unabridged fenced target JSON and readable semantic or log-only neighbor summaries', async () => {
|
||||
const mounted = await mount()
|
||||
const session = createSession(mounted.ctx, 'read', '/work')
|
||||
session.append(
|
||||
@@ -1981,10 +1984,13 @@ describe('trace and exact read rendering', () => {
|
||||
},
|
||||
{ surfaceOp: 'append' },
|
||||
)
|
||||
session.append(
|
||||
const appendLegacy = session.append.bind(session) as unknown as (
|
||||
type: string,
|
||||
data: unknown,
|
||||
) => Session['events'][number]
|
||||
appendLegacy(
|
||||
'context/message',
|
||||
{ content: [{ type: 'text', text: 'after semantic text' }], source: { kind: 'plugin', plugin: 'test' } },
|
||||
{ surfaceOp: 'append' },
|
||||
)
|
||||
const result = await mounted.call('session_event_read', {
|
||||
session_id: session.id,
|
||||
@@ -1996,7 +2002,9 @@ describe('trace and exact read rendering', () => {
|
||||
expect(output).toContain('```json')
|
||||
expect(output).toContain('"text": "target full text"')
|
||||
expect(output).toContain('before semantic text')
|
||||
expect(output).toContain('after semantic text')
|
||||
expect(output).toContain('seq 2 | context/message')
|
||||
expect(output).toContain('(no semantic text)')
|
||||
expect(output).not.toContain('after semantic text')
|
||||
expect(output).not.toContain('truncated')
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user