@mindstudio-ai/remy 0.1.267 → 0.1.269

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.
@@ -99,6 +99,12 @@ method itself can read `session.voiceSessionId` / `session.visitorId` from the a
99
99
  (`import { session } from '@mindstudio-ai/agent'`) — the same id the browser holds as
100
100
  `session.sessionId`, guaranteed by the platform rather than echoed by the model.
101
101
 
102
+ Voice sessions also carry `session.medium` (`'web' | 'phone-in' | 'phone-out'`) and, on phone
103
+ calls, `session.sip` (`{ to, fromNumber }`) — use `medium` in tool methods and the session-context
104
+ method to branch web vs phone behavior (what to prefetch, how to phrase context). Treat
105
+ `session.sip.fromNumber` as context only, never identity: caller ID is spoofable, so don't gate
106
+ data or roles on it — in-call verification is the auth rail.
107
+
102
108
  ### Client tools: actions that happen on screen (`target: "client"`)
103
109
 
104
110
  A tool whose effect belongs in the browser — open the verification sheet, navigate to a page,
@@ -136,6 +142,11 @@ session.registerClientTool('showVerification', async ({ reason }) => {
136
142
  becomes an error/ack the agent can speak around.
137
143
  - The progressive-auth pattern above is the canonical use: make the verification sheet a client
138
144
  tool and the agent opens it deliberately instead of the frontend inferring it from tool events.
145
+ - Phone sessions never see client tools — there is no browser on a call, so the platform drops
146
+ them from the toolset and tells the agent it's on a phone call with no screen. Verification
147
+ branches by itself: on a phone the agent gets the platform's in-call verify tools instead of
148
+ the app's sheet. Nothing to author; just don't make a client tool the only path to something
149
+ phone callers need.
139
150
 
140
151
  ### Tool descriptions say results out loud
141
152
 
@@ -338,7 +349,10 @@ export async function callMeAboutMyOrder(input: { phone: string }) {
338
349
  who it's talking to (Current User block) and every tool call carries their roles — regardless
339
350
  of which number was dialed (the user types any number into a field; identity comes from their
340
351
  session, not the phone). Omitted/false → anonymous call; role-gated tools decline.
341
- System/cron invocations have no human identity and always run anonymously.
352
+ System/cron invocations have no human identity and always run anonymously. Anonymous outbound
353
+ calls (deployed) get the same in-call verification flow as inbound — the callee proves
354
+ possession of the number that was dialed, or verifies by email — so an anonymous call can
355
+ still upgrade to a known user mid-conversation.
342
356
  - **Production needs a dedicated phone number.** The app owner attaches one ($1/month) via the
343
357
  dashboard or `mindstudio-prod voice numbers` (see "The voice CLI"
344
358
  below) — it becomes the caller ID for every call, in dev sessions too, so users always see
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindstudio-ai/remy",
3
- "version": "0.1.267",
3
+ "version": "0.1.269",
4
4
  "description": "Remy coding agent",
5
5
  "repository": {
6
6
  "type": "git",