Skip to content

docs(calling): Spark 787604 call flow specs#4780

Open
Kesari3008 wants to merge 11 commits intowebex:nextfrom
Kesari3008:SPARK-787604-Call-Flow-Specs
Open

docs(calling): Spark 787604 call flow specs#4780
Kesari3008 wants to merge 11 commits intowebex:nextfrom
Kesari3008:SPARK-787604-Call-Flow-Specs

Conversation

@Kesari3008
Copy link
Copy Markdown
Contributor

@Kesari3008 Kesari3008 commented Mar 16, 2026

COMPLETES #https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-787604

This pull request addresses

Adding specs(.md files) for calling folder.

by making the following changes

Added AGENTS.md and ARCHITECTURE.md under calling folder for call.ts and callManager.ts. Covers call flows (incoming, outgoing, hold/resume, transfer, disconnect), state machine design, transitions, and events, call management.

Change Type

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Tooling change
  • Internal code refactor

The following scenarios were tested

The GAI Coding Policy And Copyright Annotation Best Practices

  • GAI was not used (or, no additional notation is required)
  • Code was generated entirely by GAI
  • GAI was used to create a draft that was subsequently customized or modified
  • Coder created a draft manually that was non-substantively modified by GAI (e.g., refactoring was performed by GAI on manually written code)
  • Tool used for AI assistance (GitHub Copilot / Other - specify)
    • Github Copilot
    • Other - Please Specify
  • This PR is related to
    • Feature
    • Defect fix
    • Tech Debt
    • Automation

I certified that

  • I have read and followed contributing guidelines
  • I discussed changes with code owners prior to submitting this pull request
  • I have not skipped any automated checks
  • All existing and new tests passed
  • I have updated the documentation accordingly

Make sure to have followed the contributing guidelines before submitting.

@Kesari3008 Kesari3008 added the validated If the pull request is validated for automation. label Mar 16, 2026
@Kesari3008 Kesari3008 requested a review from a team as a code owner March 16, 2026 07:19
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bc9c0e0e1d

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@@ -0,0 +1,120 @@
# Calling Package - Agent Specification
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Rename agent spec file to AGENTS.md

This document is added as Agents.md, but the repository’s agent-discovery convention uses the exact filename AGENTS.md; on case-sensitive environments this file will not be discovered, so the new guidance under packages/calling/src is effectively ignored. Renaming it to AGENTS.md is required for the instructions to take effect.

Useful? React with 👍 / 👎.


| Module | Scope / Keywords | Location | ai-docs |
|---|---|---|---|
| **CallingClient** | line, register, call, dial, answer, hold, transfer, mute, media | `src/CallingClient/` | [`src/CallingClient/ai-docs/`](src/CallingClient/ai-docs/AGENTS.md) |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Point CallingClient routing link to the actual docs path

The routing table directs readers to src/CallingClient/ai-docs/AGENTS.md, but this commit only adds CallingClient docs under src/CallingClient/calling/ai-docs/. Following the documented Quick Start workflow therefore fails at the first module lookup for CallingClient tasks, preventing agents from loading the intended context.

Useful? React with 👍 / 👎.

1. **Classify the task** - Determine if it's a new module, new method, bug fix, feature enhancement, or architecture question.
2. **Load context** - Use the [Module Routing Table](#module-routing-table) to find and read the target module's `ai-docs/AGENTS.md` and `ARCHITECTURE.md`.
3. **Load rules** - Read [`ai-docs/RULES.md`](ai-docs/RULES.md) for coding standards.
4. **Load patterns** - Read relevant patterns from [`ai-docs/patterns/`](ai-docs/patterns/).
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Add or remove references to missing patterns docs

The Quick Start workflow mandates loading ai-docs/patterns/, but this commit does not include a patterns/ directory or any of the referenced pattern files. As written, agents following the prescribed process hit dead links and cannot complete the documented workflow without manual guesswork.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 73e787eba1

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".


Before generating code, read:
1. [`../../patterns/typescript-patterns.md`](../../patterns/typescript-patterns.md) - Type conventions, factory pattern, singleton pattern
2. [`../../patterns/event-driven-patterns.md`](../../patterns/event-driven-patterns.md) - Event and WebSocket patterns
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Replace non-existent event-driven patterns link

This template sends agents to ../../patterns/event-driven-patterns.md, but that file is not in packages/calling/ai-docs/patterns (the existing file is event-patterns.md), so the documented workflow breaks at the context-loading step. The same broken target also appears in templates/new-method/00-master.md, so generated tasks that follow either master template will fail to load the intended event guidance.

Useful? React with 👍 / 👎.

* ModuleName module implementation.
* [Description]
*/
export class ModuleName implements IModuleName {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make no-event class satisfy the generated interface

The "Simple Module (no events)" example defines ModuleName as implements IModuleName, but earlier in the same template IModuleName is defined as extending Eventing<ModuleNameEventTypes>. If an engineer or agent follows this template literally, the generated class will not satisfy the interface contract (missing event-emitter members) and will fail TypeScript checks.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 49e6e882e2

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".


class ICallerId {
<<interface>>
+fetchCallerDetails(callerInfo) Promise~DisplayInformation~
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Describe CallerId contract as synchronous

The class diagram currently documents ICallerId.fetchCallerDetails(callerInfo) as returning Promise<DisplayInformation>, but the real interface in src/CallingClient/calling/CallerId/types.ts returns DisplayInformation synchronously. If implementers follow this spec, they can incorrectly introduce async behavior into caller-ID resolution even though Call relies on an immediate return plus callback-based enrichment, which can break expected call-flow timing.

Useful? React with 👍 / 👎.


| Event Key | Payload | Emitted When |
|-----------|---------|--------------|
| `CALL_EVENT_KEYS.ALERTING` | `correlationId` | Remote side is alerting |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove unsupported ALERTING emission from event list

This emitted-events table says CALL_EVENT_KEYS.ALERTING is published to consumers, but Call does not emit that key anywhere (call-progress signaling emits CALL_EVENT_KEYS.PROGRESS instead). Consumers or agents that wire UI transitions to ALERTING based on this spec will wait on an event that never arrives, causing incorrect call-state handling.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This event is never used, so maybe we can remove this

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bd0725c08d

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +99 to +103
this.metricManager.submitCallMetric(
METRIC_EVENT.CALL,
'newMethod',
METRIC_TYPE.BEHAVIORAL,
this.callId,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Generalize new-method template beyond Call-only APIs

This template is routed for adding methods to many existing modules (e.g. CallingClient, Line, CallHistory), but the core implementation example hardcodes Call-specific members (submitCallMetric, this.callId, this.correlationId, createCallError, CALL_EVENT_KEYS.CALL_ERROR). If an engineer/agent follows it for non-Call modules, the generated code will not match those module contracts and can fail type checks or wire the wrong metrics/events.

Useful? React with 👍 / 👎.


| Event | Enum Key | Payload | When Emitted |
|-------|----------|---------|-------------|
| `alerting` | `CALL_EVENT_KEYS.ALERTING` | `CorrelationId` | Outgoing call alerting at remote |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove ALERTING from emitted event contract

The emitted-events table states that CALL_EVENT_KEYS.ALERTING is emitted, but call.ts never publishes that event (it emits PROGRESS for call progress). This can cause consumers to subscribe to an event that never fires and stall UI state transitions. Fresh evidence: this newly added AGENTS spec repeats the same incorrect ALERTING contract in its own event table.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bfd7a8f2e7

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

- On each tick, `Call` sends `POST /devices/{deviceId}/calls/{callId}/status`.
- Success resets keepalive retry tracking and schedules the next keepalive cycle.
- Failure increments `callKeepaliveRetryCount` and schedules retry via `RetryCallBack`.
- After max retries (4), the call is force-disconnected by sending `E_SEND_CALL_DISCONNECT`.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Describe keepalive max-retry behavior accurately

This section says the call is force-disconnected after 4 keepalive retries, but the implementation does not do that in the retry-limit path: callKeepaliveRetryCallback exits when callKeepaliveRetryCount === MAX_CALL_KEEPALIVE_RETRY_COUNT and does not send E_SEND_CALL_DISCONNECT (call.ts). This mismatch matters when repeated keepalive failures (for example 500/503 flows that use retry callbacks) occur, because readers and generated changes will assume a disconnect transition/event that never happens.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

@rarajes2 rarajes2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed AGENTS.md files under src/


### 2. Mobius Event Intake and Routing
- Subscribes to `event:mobius` via `SDKConnector` and processes signaling/media events.
- Routes each event to the correct `Call` object based on `correlationId` and `callId` matching.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it should be based on mobiusEvent

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is based on mobiusEvent, that's what the first line is about but if the call object already exisits we do a match using these ids. We maintain a callCollection so we need to fetch the call object from ther and that is done based on coorrelationId


## CallManager

### Purpose
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### Purpose
### Key Capabilities

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a sub heading not the main headings. Documentation does have Overview and Key Capabilities at the start and when we are decribing each of the class present inide this folder that's where it says purpose to describe the reason behind the class existence. if you still feel we need to change this, let me know

`CallManager` is a **singleton** that serves as the central hub for all call-related operations. It:
- Maintains the collection of active `Call` objects keyed by `correlationId`
- Listens for Mobius WebSocket events (`event:mobius`) via the `SDKConnector`
- Routes incoming Mobius events to the correct `Call` instance
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is incorrect I think

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not incorrect but I have updated to add one more step where it talks about checking eventType before matching the call object

- Emits `ALL_CALLS_CLEARED` when the last call is removed from the collection
- Emits `INCOMING_CALL` to signal the Line about new incoming calls

### Singleton Pattern
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we keep it here or patterns/ should take care of this ?

Copy link
Copy Markdown
Contributor Author

@Kesari3008 Kesari3008 Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Patterns does have detail for singleton patterns. Here it's just mentioned in context of how complete CallManager module is designed so that's why can have it here to give reference on how this object is consumed


| Property | Type | Description |
|----------|------|-------------|
| `callCollection` | `Record<CorrelationId, ICall>` | Active calls keyed by client-side correlation ID |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Q. Why are we not keeping the callManger under Line. Each Line could have one CallManager which will subsequently have map of calls. Just curious about the current implementation

~~ NOT IN THE SCOPE OF THIS PR ~~

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its a singleton instance, same instance gets used across all the lines even we create multiple lines

Comment on lines +24 to +30
| Module | Main Class | Factory Function | Interface | Description |
|--------|-----------|-----------------|-----------|-------------|
| **CallingClient** | `CallingClient` | `createClient()` | `ICallingClient` | Core module for line registration and call management |
| **CallHistory** | `CallHistory` | `createCallHistoryClient()` | `ICallHistory` | Retrieval, update, and deletion of call history records |
| **CallSettings** | `CallSettings` | `createCallSettingsClient()` | `ICallSettings` | Call waiting, DND, call forwarding, voicemail settings |
| **Contacts** | `ContactsClient` | `createContactsClient()` | `IContacts` | Contact and contact group management |
| **Voicemail** | `Voicemail` | `createVoicemailClient()` | `IVoicemail` | Voicemail list, content, summary, read/unread, delete, transcripts |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should cover NoiseReductionEffect, Logger etc as well. Please check

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file will be removed, it got added initially when I creating .md file

Comment on lines +55 to +57
Each `ai-docs/` folder contains:
- **Agents.md** - Module purpose, key capabilities, and high-level behavior
- **Architecture.md** - Low-level specifications including state machines, events, APIs, and architectural diagrams
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this info be inside the README.md ?

| Mercury WebSocket| | ROAP Media (via |
| (event:mobius) | | @webex/internal- |
| | | media-core) |
+------------------+ +-------------------+
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could be mermaid flowchart

|--------|---------|
| **Errors** | Hierarchical error classes: `ExtendedError` -> `CallingClientError`, `LineError`, `CallError` |
| **Events** | `Eventing<T>` base class (typed `EventEmitter`) and all event enums/types |
| **Logger** | Logging singleton with configurable levels (`ERROR`, `WARN`, `LOG`, `INFO`, `TRACE`) |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Logger methods' order seems incorrect here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Order doesn't matter here because we are just trying to show what all levels are there to be configued but in detailed information about logging it is mentioned by order

@@ -0,0 +1,175 @@
# CallerId Sub-Module - Agent Specification
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to create separate AGENTS.md for CallerId since it's pretty small ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's why I have not added ARCHITECTURE.md for this. But method details and how this component is designed has to be added somewhere so keeping AGENTS.md file for that reason

| Component | Primary Responsibility | Key Interactions |
|-----------|------------------------|------------------|
| `CallManager` | Owns active call collection, resolves/routs backend events | `SDKConnector` (`event:mobius`), `Call`, `Line` |
| `Call` | Executes call lifecycle operations and state machines | `Mobius` REST APIs, `RoapMediaConnection`, `CallerId`, app listeners |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you think it would be better to mention this is a Call

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't understand this, could you please elaborate

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean to say this is a class can we mention that.

Comment on lines +599 to +600
K --> L[Subscribe EFFECT_ADDED to onEffectEnabled]
K --> M[Subscribe EFFECT_REMOVED to onEffectDisabled]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Doc Claims: "Subscribe EFFECT_ADDED to onEffectEnabled" and "Subscribe EFFECT_REMOVED to onEffectDisabled"
  • Actual State: call.ts:2786 subscribes EffectAdded to this.registerEffectListener (which is a different method that checks for noise reduction effect and then subscribes Enabled/Disabled). EffectRemoved is not subscribed at all.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: be44aad880

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +240 to +244
## Step 5: Export from `src/api.ts`

```typescript
// Add to src/api.ts

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Export new public modules from src/index.ts as well

This template routes new-module work to export only through src/api.ts, but @webex/calling’s runtime and type entrypoint is src/index.ts (main/types resolve to dist/.../index), so following this guidance for a public module will compile internally yet ship an API that consumers cannot import. Please include src/index.ts export steps/checks alongside src/api.ts so generated modules are actually reachable to SDK users.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1602b12c88

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines 204 to 206
export type CallEventTypes = {
[CALL_EVENT_KEYS.ALERTING]: (callId: CallId) => void;
[CALL_EVENT_KEYS.CALL_ERROR]: (error: CallError) => void;
[CALL_EVENT_KEYS.CALLER_ID]: (display: CallerIdDisplay) => void;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep ALERTING type mapping or remove enum key together

This change removes CALL_EVENT_KEYS.ALERTING from the exported CallEventTypes map while CALL_EVENT_KEYS.ALERTING remains in the public enum, creating an inconsistent API contract. Because ICall/ICallManager event methods are typed from CallEventTypes, existing TypeScript consumers using call.on(CALL_EVENT_KEYS.ALERTING, ...) will now fail to compile even though the enum still advertises the key. Either keep the mapping for compatibility (with deprecation) or remove the enum key in the same change as an explicit breaking update.

Useful? React with 👍 / 👎.

Comment on lines +197 to +200
```typescript
// In src/api.ts - add new public types
export { NewType } from './ModuleName/types';
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Export new public types through the package entrypoint

This template tells authors to export newly added public types only from src/api.ts, but @webex/calling publishes src/index.ts as its main/types entrypoint and index.ts does not re-export api.ts. Following this guidance for a new public method/type will produce code that appears complete internally yet is not importable by SDK consumers from @webex/calling.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: abe58dc416

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

|--------|-----------|-------------|
| `scheduleCallKeepaliveInterval` | `private scheduleCallKeepaliveInterval = (): void` | Schedules periodic `postStatus()` call to Mobius |
| `callKeepaliveRetryCallback` | `private callKeepaliveRetryCallback = (interval: number): void` | Retries keepalive POST after error with given interval |
| `handleCallKeepaliveError` | `private handleCallKeepaliveError = async (err: unknown): Promise<void>` | Handles keepalive errors, increments retry count, force-disconnects after max retries |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Correct keepalive retry description in calling AGENTS guide

This row says keepalive handling force-disconnects after max retries, but the implementation does not do that on retry exhaustion: callKeepaliveRetryCallback returns immediately when callKeepaliveRetryCount === MAX_CALL_KEEPALIVE_RETRY_COUNT (call.ts), and disconnect is only triggered in a separate abort path inside handleCallKeepaliveError. Keeping this statement as-is will cause agents/readers to design behavior and tests around a disconnect transition that is not guaranteed to occur.

Useful? React with 👍 / 👎.

@Shreyas281299
Copy link
Copy Markdown
Contributor

There are some comments that are not addressed. Please address them before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

validated If the pull request is validated for automation.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants