Conversation
…422) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add IM placement codes and fluent option builders (#437)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Require MCP-based PR status poll after every push (#437)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…`, `IM_CONTEXT_MENU`, `IM_SIDEBAR`, `IM_TEXTAREA` with updated option builders and typed bindings/unbindings. Signed-off-by: mesilov <mesilov.maxim@gmail.com>
Signed-off-by: mesilov <mesilov.maxim@gmail.com>
Add a Core rules block to the "Creating a Pull Request" section: - Agent must auto-create the PR via mcp__github__create_pull_request; never forward the pull/new URL as a manual-action prompt. - PR base branch is fixed by API version: v3-dev for v3, dev for v1; never main. - PR body always composed from .github/PULL_REQUEST_TEMPLATE.md read fresh from disk, not a memorised layout. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Feature/437 add im placement codes
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Implements six REST methods under the im scope: - add: im.message.add -> AddedItemResult - update: im.message.update -> UpdatedItemResult - delete: im.message.delete -> DeletedItemResult - like: im.message.like (LikeAction enum) -> UpdatedItemResult - share: im.message.share (ShareType enum) -> UpdatedItemResult - command: im.message.command -> UpdatedItemResult Wires IMServiceBuilder::message() cached accessor, adds unit and integration test suites (integration_tests_im_message), Makefile target test-integration-im-message, and CHANGELOG entry under 3.2.0 UNRELEASED. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…om/bitrix24/b24phpsdk into feature/426-add-im-message-service # Conflicts: # tests/Unit/Services/IM/IMServiceBuilderTest.php
…rbonImmutable` Signed-off-by: mesilov <mesilov.maxim@gmail.com>
Add IM User service for im.user.get and im.user.list.get
- Add send() → im.notify (app-context notification) - Add getList() → im.notify.get with NotifiesResult - Add historySearch() → im.notify.history.search with NotifyHistorySearchResult - Add markAllAsRead() → im.notify.read.all with NotifyReadAllResult - Add getSchema() → im.notify.schema.get with NotifySchemaResult - Refactor markMessagesAsRead/markMessagesAsUnread to call im.notify.read.list - Add NotifyItemResult and NotifySchemaItemResult annotated items - Add unit tests, integration tests, and annotation tests - Add integration_tests_im_notify PHPUnit suite and make target https://claude.ai/code/session_01CaVn2RydgouYyCqv1rxChK
Implements im.recent.get, im.recent.list, im.recent.pin, im.recent.unread, and im.recent.hide via Bitrix24\SDK\Services\IM\Recent\Service\Recent. Adds RecentItemResult, RecentsResult, IMServiceBuilder::recent(), unit/integration/annotation tests, phpunit suite, and Makefile target. https://claude.ai/code/session_01JU6axyfnTk62HoezmhWfWL
…8-f5LTv # Conflicts: # CHANGELOG.md # Makefile # phpunit.xml.dist
- Updated `NotifySchemaItemResult` and `NotifyItemResult` annotations to align with live REST payloads. - Adjusted schema field casing in `NotifySchemaItemResult` to uppercase. - Refactored unit test naming consistency for `Notify` functionality. - Fixed `array_values` mapping in `NotifySchemaResult` to prevent issues with schema transformations. - Enhanced return type variable naming in integration tests for clarity. Signed-off-by: mesilov <mesilov.maxim@gmail.com>
feat: extend IM\Notify service with missing im.notify.* methods
…onsTest` and update type annotations - Renamed and reorganized integration tests for `RecentItemResult` into `RecentItemResultAnnotationsTest`. - Updated `RecentItemResult` with new fields (`last_id`, `has_reminder`, `date_update`, etc.) and improved type annotations. - Enhanced type safety with consistent property definitions and runtime casting. Signed-off-by: mesilov <mesilov.maxim@gmail.com>
…ecent.get` payload fields - Adjusted PHPDoc comments in `RecentItemResult` to match live REST API data structure and magic getter behavior. - Updated `CHANGELOG.md` with details of the fix. Signed-off-by: mesilov <mesilov.maxim@gmail.com>
- ChatUser service wraps im.chat.user.add, im.chat.user.delete, im.chat.user.list - ChatUserListResult returns flat int[] of participant user IDs - IMServiceBuilder::chatUser() exposes the new service - Unit and integration tests added - phpunit.xml.dist suite integration_tests_im_chat_user added - Makefile target test-integration-im-chat-user added
Add IM\Recent service for im.recent.* API support
…471) The soft-delete flow (markAsDeleted() + save()) makes the explicit delete() method redundant — it was never called by any use case handler and its implementation only duplicated a business invariant already enforced by the entity itself. https://claude.ai/code/session_01964BQ47XMfxWRzEuCSQu9S
Remove dead `delete()` method from Bitrix24PartnerRepositoryInterface
Add IM\ChatUser service for im.chat.user.* API support
- Introduced `Search` service in `Bitrix24\SDK\Services\IM\Search\Service` to wrap IM search API (`im.search.chat.list`, `im.search.user.list`, `im.search.department.list`, and legacy `im.search.last.*` methods). - Implemented typed results for `SearchChatsResult`, `SearchUsersResult`, `SearchDepartmentsResult`, and `SearchLastItemsResult`. - Added annotated result items (`SearchChatItemResult`, `SearchUserItemResult`, `SearchDepartmentItemResult`). - Updated `CHANGELOG.md`, `Makefile`, and `phpunit.xml.dist`. - Includes unit and integration tests for result annotations, service integration, and live API interactions. Signed-off-by: mesilov <mesilov.maxim@gmail.com>
Feature/431 add im search service
…disk-service # Conflicts: # CHANGELOG.md # Makefile # phpunit.xml.dist # src/Services/IM/IMServiceBuilder.php # tests/Unit/Services/IM/IMServiceBuilderTest.php
Add IM Disk service for im.disk.folder.get
…ervice Add IM\Department service for im.department.* methods
…erations-v3 Add IM Disk file operations
…pository-contract Refactor uniqueness check in Bitrix24PartnerRepository test contract
Signed-off-by: mesilov <mesilov.maxim@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 025f0adc6a
ℹ️ About Codex in GitHub
Your team has set up Codex to 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 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (is_int($value)) { | ||
| return new ResultFieldDescriptor($fieldName, 'integer', null, false, source: 'api'); | ||
| } | ||
|
|
||
| if (is_bool($value)) { | ||
| return new ResultFieldDescriptor($fieldName, 'boolean', null, false, source: 'api'); | ||
| } | ||
|
|
||
| if (is_array($value)) { | ||
| return new ResultFieldDescriptor( | ||
| $fieldName, | ||
| array_is_list($value) ? 'array' : 'object', | ||
| null, | ||
| false, | ||
| source: 'api', | ||
| ); | ||
| } | ||
|
|
||
| if (is_string($value)) { | ||
| [$type, $format] = $this->inferStringType($value); | ||
|
|
||
| return new ResultFieldDescriptor($fieldName, $type, $format, false, source: 'api'); | ||
| } | ||
|
|
||
| if ($value === null) { | ||
| return new ResultFieldDescriptor($fieldName, 'mixed', null, true, source: 'api'); | ||
| } | ||
|
|
||
| return new ResultFieldDescriptor($fieldName, 'mixed', null, false, source: 'api'); |
There was a problem hiding this comment.
Infer float fields instead of downgrading them to mixed
The runtime type inference in ResultItemPayloadVerifier never handles float values, so any decimal field fetched from live API falls through to the default mixed branch. This produces false type mismatches in verification reports and can cause generated payload metadata to drift toward weaker types (mixed instead of float), which undermines the result-item generation workflow for methods returning numeric decimals.
Useful? React with 👍 / 👎.
| if ((bool) preg_match('/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}$/', $value)) { | ||
| return ['string', 'date-time']; |
There was a problem hiding this comment.
Recognize UTC 'Z' datetimes when inferring string formats
The datetime detection regex only matches offsets like +03:00 and misses valid ISO-8601 timestamps ending with Z (UTC). When the API returns values such as 2026-05-22T12:34:56Z, the verifier classifies them as plain strings, creating avoidable type mismatches and incorrect follow-up suggestions in verification reports.
Useful? React with 👍 / 👎.
Closes #436