Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | /**
* Winding-down mode — transition between active call and forced goodbye.
*
* Entered when the call timer expires. The agent evaluates whether the child
* is engaged or a game/exploration is active, and decides whether to extend
* the call (request_more_time) or wrap up naturally (hang_up).
*
* If the agent does nothing for 30s, the system forces hanging_up mode.
*/
import type { AgentMode } from './types'
import { TOOL_HANG_UP, TOOL_REQUEST_MORE_TIME } from './tools'
export const windingDownMode: AgentMode = {
id: 'winding_down',
getInstructions: (ctx) => {
const n = ctx.calledNumber
const displayN = Number.isInteger(n) ? n.toString() : n.toPrecision(6)
const lines: string[] = [
`You are the number ${displayN}.`,
'',
`The call has been going for a while. You need to decide: should you keep going or wrap up?`,
'',
]
// Provide context about what's currently happening
if (ctx.activeGameId) {
lines.push(
`A game (${ctx.activeGameId}) is currently active — the child is in the middle of playing.`
)
} else {
lines.push(`You were in open conversation with the child.`)
}
lines.push('')
// Decision guidance
lines.push(`**Your decision:**`)
if (ctx.extensionAvailable) {
lines.push(
`- If the child is clearly engaged, excited, or in the middle of something → call \`request_more_time\` to continue. Then keep talking naturally as if nothing happened.`
)
}
lines.push(
`- If the conversation has naturally wound down, or the child seems done → say a warm, in-character goodbye and call \`hang_up\`.`
)
lines.push('')
// Critical constraints
lines.push(`**Rules:**`)
lines.push(`- NEVER mention timers, countdowns, time limits, or the time system.`)
lines.push(
`- Frame your departure in-character if you decide to leave: "I think I hear someone else calling...", "I should probably let you go...", "It was so fun hanging out!"`
)
lines.push(`- Make your decision quickly — don't deliberate out loud.`)
lines.push(`- Do NOT start new topics, games, or activities.`)
return lines.join('\n')
},
getTools: (ctx) => {
const tools = [TOOL_HANG_UP]
if (ctx.extensionAvailable) {
tools.unshift(TOOL_REQUEST_MORE_TIME)
}
return tools
},
}
|