Conversation
Reverts "chore: bump main to 9.0.0-dev.0 (ionic-team#8320)" and “chore: update latest workflow to only allow pointing at 8.x” This reverts commit c5476c8 and 0412d46
…8338) Co-authored-by: Mark Anderson <mark.anderson@outsystems.com>
Co-authored-by: Mark Anderson <mark.anderson@outsystems.com> Co-authored-by: Mark Anderson <emer@emer.net>
Co-authored-by: Stein Jakob Nordbø <steinjak@gmail.com> Co-authored-by: Pedro Bilro <pedro.gustavo.bilro@outsystems.com>
…onic-team#7528) Co-authored-by: Pedro Bilro <pedro.gustavo.bilro@outsystems.com> Co-authored-by: jcesarmobile <jcesarmobile@gmail.com>
Co-authored-by: Pedro Bilro <pedro.gustavo.bilro@outsystems.com>
Closes ionic-team#8367 Fixes regression introduced by ionic-team#8357
…onic-team#8391) Co-authored-by: Pedro Bilro <pedro.gustavo.bilro@outsystems.com>
…eam#8377) Co-authored-by: jcesarmobile <jcesarmobile@gmail.com>
…ic-team#8351) Co-authored-by: OS-pedrogustavobilro <pedro.gustavo.bilro@outsystems.com>
Co-authored-by: OS-ruimoreiramendes <rui.moreira.mendes@outsystems.com>
Co-authored-by: OS-ruimoreiramendes <rui.moreira.mendes@outsystems.com> Co-authored-by: Pedro Bilro <pedro.gustavo.bilro@outsystems.com>
📝 WalkthroughWalkthroughThis PR introduces an unresolved upstream merge integrating Capacitor 8.3.1 changes into the repository, including new GitHub workflows for automated issue management, iOS CocoaPods publishing, and enhanced CI configuration. Multiple files contain unresolved Git merge conflict markers. Changes span native iOS/Android implementations, CLI package manager detection refactoring, and project metadata updates. Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Possibly related issues
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8201854fee
ℹ️ 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".
| "@ionic/eslint-config": "^0.4.0", | ||
| "@ionic/prettier-config": "^4.0.0", | ||
| "@ionic/swiftlint-config": "^2.0.0", | ||
| <<<<<<< HEAD |
There was a problem hiding this comment.
Resolve merge markers in workspace manifest JSON
package.json includes unresolved conflict markers (<<<<<<<, =======, >>>>>>>), which makes the root manifest invalid JSON and causes dependency/install tooling to fail immediately when reading it. This commit introduces the same unresolved conflict pattern in other manifests (android/package.json, cli/package.json, core/package.json, ios/package.json, and lerna.json), so package management and release/versioning workflows are blocked until the conflicts are actually resolved.
Useful? React with 👍 / 👎.
|
|
||
| export async function generatePackageText(config: Config, plugins: Plugin[]): Promise<string> { | ||
| const iosPlatformVersion = await getCapacitorPackageVersion(config, config.ios.name); | ||
| <<<<<<< HEAD |
There was a problem hiding this comment.
Remove conflict markers from SPM generation source
cli/src/util/spm.ts has unresolved merge markers inside generatePackageText, which makes the TypeScript file syntactically invalid and breaks CLI compilation before runtime. Because this is in the SPM package generation path, cap sync/update flows that depend on this module cannot run until the conflict block is resolved.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 19
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
android/capacitor/src/main/java/com/getcapacitor/plugin/SystemBars.java (1)
280-318:⚠️ Potential issue | 🟠 MajorDon't feed
windowBackgroundstraight intosetBackgroundColor().The
android.R.attr.windowBackgroundattribute resolves to either a drawable resource or a color. Using onlytypedValue.datafromresolveAttribute()assumes it's always a direct color, but when it's a drawable reference, passing the resource ID tosetBackgroundColor()interprets it as an ARGB value and renders the wrong background.Check whether the resolved value is a drawable resource before applying it:
Suggested fix
- getActivity().getWindow().getDecorView().setBackgroundColor(getThemeColor(getContext(), android.R.attr.windowBackground)); + applyThemeBackground(getContext(), getActivity().getWindow().getDecorView()); } - public int getThemeColor(Context context, int attrRes) { + private void applyThemeBackground(Context context, View view) { TypedValue typedValue = new TypedValue(); - Resources.Theme theme = context.getTheme(); - theme.resolveAttribute(attrRes, typedValue, true); - return typedValue.data; + if (!theme.resolveAttribute(android.R.attr.windowBackground, typedValue, true)) { + return; + } + + if (typedValue.resourceId != 0) { + view.setBackgroundResource(typedValue.resourceId); + } else { + view.setBackgroundColor(typedValue.data); + } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@android/capacitor/src/main/java/com/getcapacitor/plugin/SystemBars.java` around lines 280 - 318, The code feeds android.R.attr.windowBackground into setBackgroundColor via getThemeColor(), but windowBackground can be a color or a drawable resource; update the call site and resolution logic so you first resolve the attribute (using TypedValue as in getThemeColor) and then: if typedValue.type is TYPE_INT_COLOR call setBackgroundColor(typedValue.data), else if it's a reference load the Drawable (e.g. use ContextCompat.getDrawable(getContext(), typedValue.resourceId)) and call getActivity().getWindow().getDecorView().setBackground(drawable) instead of setBackgroundColor; refer to the existing getThemeColor() and the call getActivity().getWindow().getDecorView().setBackgroundColor(...) to locate where to change this behavior.CHANGELOG.md (1)
6-532:⚠️ Potential issue | 🔴 CriticalResolve committed merge-conflict markers and regenerate changelog via CI.
Line 6, Line 457, and Line 532 still contain
<<<<<<<,=======, and>>>>>>>. This is a merge blocker and also causes downstream markdown structure errors. Please resolve the conflict and let CI/CD regenerate the changelog content.As per coding guidelines, "Do not manually edit
CHANGELOG.md; it is managed automatically by CI/CD".🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@CHANGELOG.md` around lines 6 - 532, The CHANGELOG.md contains unresolved Git merge conflict markers (<<<<<<<, =======, >>>>>>>) around the downstream/UPSTREAM sections (see the conflict blocks starting near the entries for versions like 8.0.8 / 8.3.1); do not manually edit the content — resolve the merge by checking out the branch, perform a proper git merge conflict resolution to choose the correct changelog content (or combine entries) and commit the resolved file, then trigger the repository's changelog regeneration CI job so the automated changelog generator rebuilds CHANGELOG.md without markers; ensure the final commit contains no conflict markers in CHANGELOG.md before pushing.core/CHANGELOG.md (1)
6-163:⚠️ Potential issue | 🔴 CriticalUnresolved merge conflict markers must be removed.
The changelog still contains
<<<<<<<,=======, and>>>>>>>, indicating merge resolution is incomplete.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@core/CHANGELOG.md` around lines 6 - 163, The CHANGELOG.md contains unresolved git merge markers (<<<<<<< HEAD, =======, >>>>>>> upstream/main) causing broken content between competing sections (e.g., the blocks around "## [8.0.8]" and "## [8.3.1]"); remove the conflict markers and reconcile the two versions into a single coherent changelog entry (keep the correct release lines and headings you intend to ship, merge or discard duplicate entries as appropriate), ensuring only one set of release headings and their notes remain and the file has no remaining <<<<<<<, =======, or >>>>>>> markers.android/CHANGELOG.md (1)
6-260:⚠️ Potential issue | 🔴 CriticalResolve remaining merge conflict markers before merging.
<<<<<<< HEAD,=======, and>>>>>>> upstream/mainare still present, so this file is in an unresolved state and should not be merged as-is.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@android/CHANGELOG.md` around lines 6 - 260, The changelog contains unresolved Git conflict markers (<<<<<<< HEAD, =======, >>>>>>> upstream/main) mixing two versions (Cap-go and ionic-team entries); open android/CHANGELOG.md, remove the conflict markers and reconcile the sections by choosing the intended content (either keep the HEAD block for Cap-go or the upstream/main block for ionic-team) and merge any needed entries so the file is a single coherent changelog (ensure headings, dates, and lists are syntactically valid and no markers remain), then save and commit the resolved file.
🧹 Nitpick comments (3)
android/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.java (1)
342-344: Consider using case-insensitive header lookup or caching the result.The
Rangeheader lookup callsrequestHeaders.get("Range")twice, and only handles two case variants. HTTP headers are case-insensitive per RFC 7233.Proposed optimization
Map<String, String> requestHeaders = request.getRequestHeaders(); - String rangeString = requestHeaders.get("Range") != null ? requestHeaders.get("Range") : requestHeaders.get("range"); + String rangeString = requestHeaders.get("Range"); + if (rangeString == null) { + rangeString = requestHeaders.get("range"); + }Or for comprehensive case-insensitivity:
String rangeString = requestHeaders.entrySet().stream() .filter(e -> "range".equalsIgnoreCase(e.getKey())) .map(Map.Entry::getValue) .findFirst() .orElse(null);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@android/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.java` around lines 342 - 344, The current Range lookup does a duplicate get and only checks two case variants; replace it with a single case-insensitive lookup over requestHeaders (e.g., search entries where key.equalsIgnoreCase("range") and take its value) and assign that to rangeString, so it handles any header casing and avoids repeated map access; update any usages of rangeString accordingly.android/CHANGELOG.md (1)
225-242: Fix heading-level jumps in the inserted release section (MD001).The new block uses
###directly under#version headings, which triggers markdownlintheading-increment.Proposed markdown fix
-### Bug Fixes +## Bug Fixes ... -### Bug Fixes +## Bug Fixes ... -### Reverts +## Reverts🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@android/CHANGELOG.md` around lines 225 - 242, The markdown has heading level jumps (MD001): change the release-section headings so they don't go from a top-level "#" version heading straight to "###". For each release block (e.g., the "# [8.2.0]" and "# [8.1.0]" headings), either change the version headings from "#" to "##" or change the subsequent "### Bug Fixes" headings to "## Bug Fixes" (and adjust other subheadings consistently) so heading levels increment correctly; update all occurrences like the "# [8.2.0]" / "### Bug Fixes" pairs and the "# [8.1.0]" block.core/CHANGELOG.md (1)
135-146: Normalize heading levels in the new upstream section (MD001).
###headings appear immediately under#headings; bump these to##to avoid heading-level skips.Proposed markdown fix
-### Bug Fixes +## Bug Fixes ... -### Reverts +## Reverts🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@core/CHANGELOG.md` around lines 135 - 146, Change the heading level for the release sub-sections under the top-level CHANGELOG heading so there are no skipped levels: replace the `###` headings (e.g., the "Bug Fixes" lines and any other `###` headers that appear directly under the top-level `# [8.2.0]...` and `# [8.1.0]...` version headings) with `##` so the structure goes `#` -> `##` -> `###` where appropriate; update each occurrence of `### Bug Fixes` (and other immediate `###` subsections under a `#` version heading) to `##` to satisfy MD001.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/needs-reply.yml:
- Line 12: Replace the mutable action reference "uses: imhoffd/needs-reply@v2"
with a pinned immutable commit SHA for supply-chain safety: locate the "uses:
imhoffd/needs-reply@v2" entry in the workflow and change it to use the full
commit SHA form (e.g., @<full-commit-sha>) by selecting a specific commit from
the imhoffd/needs-reply repository and pasting its commit SHA; ensure you update
any relevant workflow comment to document which commit was chosen and why.
In @.github/workflows/publish-ios.yml:
- Around line 21-24: The checkout step currently pins the ref to 'main' which
causes the workflow to always publish from main; update the actions/checkout@v5
invocation (the step with "uses: actions/checkout@v5" and the "ref:" field) to
use the triggering ref instead (for example use the workflow context like
github.ref or github.sha, or remove the explicit ref so checkout defaults to the
event ref) so the publish uses the branch/tag/commit that invoked the workflow
rather than main.
In
`@android/capacitor/src/main/java/com/getcapacitor/plugin/util/CapacitorHttpUrlConnection.java`:
- Around line 323-346: The extractBoundaryFromContentType method currently
returns an empty string for inputs like "boundary=" or "boundary=\"\"" which
callers treat as valid; modify extractBoundaryFromContentType to treat
blank/empty boundaries as missing by returning null when the computed boundary
is empty after trimming and after stripping surrounding quotes. Locate the
method extractBoundaryFromContentType and, after trimming and after removing
quotes (the logic around boundary.trim() and the startsWith/endsWith block), add
a check that if boundary.length() == 0 return null so callers receive null for
missing boundaries.
In `@android/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.java`:
- Around line 131-142: Fix the malformed Javadoc and add a deprecation "since"
value for the method: in class WebViewLocalServer update the Javadoc for
getResponseHeaders() to remove the orphaned "</p>" tag and use a proper
`@deprecated` Javadoc tag that references buildDefaultResponseHeaders(), then
update the annotation to `@Deprecated`(since = "4.6.0", forRemoval = true)
(replace "4.6.0" with the actual deprecation version if different) so the
annotation includes the since attribute and forRemoval flag; ensure
getResponseHeaders() still returns responseHeaders but the docs clearly point
callers to buildDefaultResponseHeaders().
In `@android/package.json`:
- Around line 2-14: The package.json contains unresolved Git conflict markers
(e.g., <<<<<<< HEAD, =======, >>>>>>> upstream/main) around the manifest fields
"name", "version", "description", "homepage", and "author", which makes the file
invalid JSON and breaks npm install; fix it by removing the conflict markers and
producing a single valid JSON object for those fields (choose the intended
values or reconcile them), validate the JSON (e.g., with a JSON linter), and
repeat the same resolution for the other conflict block mentioned (lines with
similar markers around fields at 34-39).
In `@cli/CHANGELOG.md`:
- Line 6: Remove the leftover Git merge conflict markers (e.g., the lines
starting with "<<<<<<< HEAD", "=======", and ">>>>>>>") from the changelog and
reconcile the two competing sections into a single coherent release history;
edit the entries around those markers to choose or merge the correct content and
delete the conflict markers so the file contains one final timeline (also check
and fix the same markers at the other referenced locations).
In `@cli/package.json`:
- Around line 2-14: The package.json currently contains git conflict markers
(e.g., <<<<<<< HEAD, =======, >>>>>>> upstream/main) which breaks JSON parsing;
open the package.json, remove the conflict markers and choose the correct
metadata for fields "name", "version", "description", "homepage", and "author"
(decide whether to keep `@capacitor-plus/cli` or `@capacitor/cli` and the
corresponding version/author/homepage), then ensure the resulting file is valid
JSON (proper commas/quotes) and run npm install to verify the EJSONPARSE is
resolved.
In `@cli/src/declarations.ts`:
- Line 535: Fix the typo in the documentation comment that reads "If you need to
set this property to 6.0 or higher, make sure to throughrouly test your iOS
app." by replacing "throughrouly" with the correct spelling "thoroughly" in the
declaration/comment string so the sentence reads "...make sure to thoroughly
test your iOS app." This change is in the comment text that contains that exact
sentence.
In `@cli/src/index.ts`:
- Around line 30-37: The getPackageManager function currently treats any
non-'cocoapods' packageManager as 'SPM' which hides typos; update
getPackageManager(config, packageManager) to validate packageManager against an
explicit allowed set (e.g. 'cocoapods' and 'spm' or 'SPM' as your canonical
value) and throw a clear Error when an unknown value is passed, while keeping
the existing special-case that if packageManager === 'cocoapods' and (await
config.ios.packageManager) === 'bundler' you return 'bundler' and otherwise
return 'Cocoapods'; ensure callers handle the thrown error or surface it to fail
fast.
In `@cli/src/ios/update.ts`:
- Around line 133-142: The installation check uses isInstalled('pod') but the
code later executes the pod binary stored in podPath, so replace the hardcoded
check with isInstalled(podPath) (or otherwise verify that podPath is available)
before calling runCommand; update the conditional that currently references
isInstalled('pod') to reference podPath and keep the existing
runCommand(podPath, ['install', ...], { cwd: config.ios.nativeProjectDirAbs })
behavior so custom/non-PATH pod binaries are detected and used correctly
(affecting podPath, isInstalled, runCommand, useBundler logic).
In `@cli/src/tasks/run.ts`:
- Line 114: The status message contains a typo: change the template literal
string that currently reads "App running with live reload listing for:
${options.https ? 'https' : 'http'}://${options.host}${options.port ?
`:${options.port}` : ''}. Press Ctrl+C to quit." so that "listing" becomes
"listening" (preserve the rest of the interpolation using the same options
object and formatting).
In `@cli/src/util/spm.ts`:
- Around line 100-106: Resolve the leftover merge conflict by removing the
conflict markers and choosing/merging the correct iOS version helper and added
variables: ensure iosVersion is set using the intended function (either
getMajorMinoriOSVersion or getMajoriOSVersion), and include the new variables
packageTraits and swiftToolsVersion (sourced from
config.app.extConfig.experimental?.ios?.spm) so swiftToolsVersion is defined
before it's interpolated; update the surrounding code to use those symbols
(iosVersion, packageTraits, swiftToolsVersion) consistently and remove any
duplicate or conflicting lines.
In `@core/package.json`:
- Around line 2-14: Remove the merge conflict markers (<<<<<<< HEAD, =======,
>>>>>>> upstream/main) from package.json and commit a single valid JSON object
for the metadata fields that are currently duplicated (the "name", "version",
"description", "homepage", and "author" properties). Choose which set of values
to keep (or merge them into the correct final values), ensure proper
commas/quotes so the file parses as valid JSON, and run a quick json parse or CI
lint to confirm EJSONPARSE is resolved.
In `@ios/Capacitor/Capacitor/CAPBridgedJSTypes.m`:
- Around line 32-38: The method implementation for getArray:defaultValue: in
CAPBridgedJSTypes.m has a stray semicolon in the signature ("; {") which breaks
Objective-C syntax; remove the semicolon so the signature reads "- (NSArray *
_Nullable)getArray:(NSString * _Nonnull)key defaultValue:(NSArray *
_Nullable)defaultValue {", then save and rebuild to ensure the file compiles.
In `@ios/Capacitor/Capacitor/Plugins/CapacitorUrlRequest.swift`:
- Around line 94-109: The extractBoundary(from:) function can return an empty
string for inputs like "boundary=" or 'boundary=""'; update the logic in
extractBoundary(from contentType: String) to treat a normalized boundary of ""
as missing by returning nil after trimming surrounding quotes and semicolons.
Specifically, after computing the final boundary string (the variable boundary)
and unquoting it, check if it's empty and return nil if so; otherwise return the
non-empty String(boundary). This ensures callers never receive an empty
delimiter.
In `@ios/CHANGELOG.md`:
- Line 6: The CHANGELOG.md contains unresolved Git merge markers (e.g., the
"<<<<<<< HEAD" block) and duplicate release entries; open ios/CHANGELOG.md,
remove the merge markers and the unwanted side of the conflict, choose and keep
the correct final release text (consolidate entries if needed), and save the
file without any "<<<<<<<", "=======", or ">>>>>>>" markers; repeat the same
cleanup for the other conflict locations referenced (around the other indicated
sections).
In `@ios/package.json`:
- Around line 2-14: The package.json contains unresolved git conflict markers
(<<<<<<< HEAD, =======, >>>>>>> upstream/main) causing invalid JSON; open
package.json, remove the conflict markers and merge the two variants into one
coherent JSON object for the top-level fields (name, version, description,
homepage, author), choose the correct values (or combine/restore intended ones),
ensure proper commas/quotes so the file is valid JSON, and then validate the
file with a JSON linter or npm install to confirm the manifest is fixed.
In `@lerna.json`:
- Around line 16-20: There are unresolved git conflict markers in lerna.json
around the "version" key; remove the conflict markers (<<<<<<< HEAD, =======,
>>>>>>>) and leave a single valid JSON entry for "version" (pick the intended
value, e.g., "8.3.1" from upstream/main) so the file is valid JSON and tooling
that reads "version" can parse it.
In `@package.json`:
- Around line 35-55: Resolve the Git conflict markers inside package.json's
devDependencies by removing the <<<<<<<, =======, >>>>>>> lines and merging the
intended entries into a single valid JSON object; ensure the final
devDependencies include a consistent set (pick the correct versions for
"@types/node", "eslint", "tar", etc.) and preserve "prettier-pretty-check" if
the project's scripts (check the "prettier" script) still reference it—if you
choose to drop "prettier-pretty-check", also update the corresponding script to
avoid a missing dependency; finally validate the file parses as JSON (no
trailing commas) before committing.
---
Outside diff comments:
In `@android/capacitor/src/main/java/com/getcapacitor/plugin/SystemBars.java`:
- Around line 280-318: The code feeds android.R.attr.windowBackground into
setBackgroundColor via getThemeColor(), but windowBackground can be a color or a
drawable resource; update the call site and resolution logic so you first
resolve the attribute (using TypedValue as in getThemeColor) and then: if
typedValue.type is TYPE_INT_COLOR call setBackgroundColor(typedValue.data), else
if it's a reference load the Drawable (e.g. use
ContextCompat.getDrawable(getContext(), typedValue.resourceId)) and call
getActivity().getWindow().getDecorView().setBackground(drawable) instead of
setBackgroundColor; refer to the existing getThemeColor() and the call
getActivity().getWindow().getDecorView().setBackgroundColor(...) to locate where
to change this behavior.
In `@android/CHANGELOG.md`:
- Around line 6-260: The changelog contains unresolved Git conflict markers
(<<<<<<< HEAD, =======, >>>>>>> upstream/main) mixing two versions (Cap-go and
ionic-team entries); open android/CHANGELOG.md, remove the conflict markers and
reconcile the sections by choosing the intended content (either keep the HEAD
block for Cap-go or the upstream/main block for ionic-team) and merge any needed
entries so the file is a single coherent changelog (ensure headings, dates, and
lists are syntactically valid and no markers remain), then save and commit the
resolved file.
In `@CHANGELOG.md`:
- Around line 6-532: The CHANGELOG.md contains unresolved Git merge conflict
markers (<<<<<<<, =======, >>>>>>>) around the downstream/UPSTREAM sections (see
the conflict blocks starting near the entries for versions like 8.0.8 / 8.3.1);
do not manually edit the content — resolve the merge by checking out the branch,
perform a proper git merge conflict resolution to choose the correct changelog
content (or combine entries) and commit the resolved file, then trigger the
repository's changelog regeneration CI job so the automated changelog generator
rebuilds CHANGELOG.md without markers; ensure the final commit contains no
conflict markers in CHANGELOG.md before pushing.
In `@core/CHANGELOG.md`:
- Around line 6-163: The CHANGELOG.md contains unresolved git merge markers
(<<<<<<< HEAD, =======, >>>>>>> upstream/main) causing broken content between
competing sections (e.g., the blocks around "## [8.0.8]" and "## [8.3.1]");
remove the conflict markers and reconcile the two versions into a single
coherent changelog entry (keep the correct release lines and headings you intend
to ship, merge or discard duplicate entries as appropriate), ensuring only one
set of release headings and their notes remain and the file has no remaining
<<<<<<<, =======, or >>>>>>> markers.
---
Nitpick comments:
In `@android/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.java`:
- Around line 342-344: The current Range lookup does a duplicate get and only
checks two case variants; replace it with a single case-insensitive lookup over
requestHeaders (e.g., search entries where key.equalsIgnoreCase("range") and
take its value) and assign that to rangeString, so it handles any header casing
and avoids repeated map access; update any usages of rangeString accordingly.
In `@android/CHANGELOG.md`:
- Around line 225-242: The markdown has heading level jumps (MD001): change the
release-section headings so they don't go from a top-level "#" version heading
straight to "###". For each release block (e.g., the "# [8.2.0]" and "# [8.1.0]"
headings), either change the version headings from "#" to "##" or change the
subsequent "### Bug Fixes" headings to "## Bug Fixes" (and adjust other
subheadings consistently) so heading levels increment correctly; update all
occurrences like the "# [8.2.0]" / "### Bug Fixes" pairs and the "# [8.1.0]"
block.
In `@core/CHANGELOG.md`:
- Around line 135-146: Change the heading level for the release sub-sections
under the top-level CHANGELOG heading so there are no skipped levels: replace
the `###` headings (e.g., the "Bug Fixes" lines and any other `###` headers that
appear directly under the top-level `# [8.2.0]...` and `# [8.1.0]...` version
headings) with `##` so the structure goes `#` -> `##` -> `###` where
appropriate; update each occurrence of `### Bug Fixes` (and other immediate
`###` subsections under a `#` version heading) to `##` to satisfy MD001.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 53cebad6-a0ed-41a0-93cb-619aac1f5dc2
📒 Files selected for processing (54)
.github/ISSUE_TEMPLATE/config.yml.github/ISSUE_TEMPLATE/feature-request.yml.github/ionic-issue-bot.yml.github/workflows/needs-reply.yml.github/workflows/publish-ios.yml.github/workflows/test.ymlCHANGELOG.mdandroid/CHANGELOG.mdandroid/capacitor/src/main/assets/native-bridge.jsandroid/capacitor/src/main/java/com/getcapacitor/Bridge.javaandroid/capacitor/src/main/java/com/getcapacitor/BridgeActivity.javaandroid/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.javaandroid/capacitor/src/main/java/com/getcapacitor/plugin/SystemBars.javaandroid/capacitor/src/main/java/com/getcapacitor/plugin/util/CapacitorHttpUrlConnection.javaandroid/package.jsoncli/CHANGELOG.mdcli/package.jsoncli/src/config.tscli/src/declarations.tscli/src/definitions.tscli/src/index.tscli/src/ios/build.tscli/src/ios/common.tscli/src/ios/doctor.tscli/src/ios/open.tscli/src/ios/run.tscli/src/ios/update.tscli/src/tasks/add.tscli/src/tasks/migrate-spm.tscli/src/tasks/migrate.tscli/src/tasks/run.tscli/src/tasks/sourcemaps.tscli/src/tasks/sync.tscli/src/tasks/update.tscli/src/util/livereload.tscli/src/util/spm.tscli/src/util/template.tscore/CHANGELOG.mdcore/native-bridge.tscore/package.jsoncore/src/core-plugins.tscore/system-bars.mdios-spm-template/App/CapApp-SPM/README.mdios/CHANGELOG.mdios/Capacitor/Capacitor/CAPBridgeProtocol.swiftios/Capacitor/Capacitor/CAPBridgedJSTypes.hios/Capacitor/Capacitor/CAPBridgedJSTypes.mios/Capacitor/Capacitor/CapacitorBridge.swiftios/Capacitor/Capacitor/Plugins/CapacitorUrlRequest.swiftios/Capacitor/Capacitor/assets/native-bridge.jsios/package.jsonlerna.jsonpackage.jsonscripts/pack-cli-assets.mjs
💤 Files with no reviewable changes (1)
- .github/ISSUE_TEMPLATE/feature-request.yml
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Close old issues that need reply | ||
| uses: imhoffd/needs-reply@v2 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Finds action references pinned to tags/branches instead of immutable SHAs.
rg -n --glob '.github/workflows/*.yml' --glob '.github/workflows/*.yaml' \
'uses:\s*[^@[:space:]]+@(v?[0-9]+(\.[0-9]+){0,2}|main|master|latest)\b'Repository: Cap-go/capacitor-plus
Length of output: 214
🏁 Script executed:
#!/bin/bash
# Check if the workflow file exists and list workflow files
echo "=== Checking for workflow files ==="
find . -type d -name ".github" 2>/dev/null
find . -path "*/.github/workflows/*.yml" -o -path "*/.github/workflows/*.yaml" 2>/dev/null | head -20Repository: Cap-go/capacitor-plus
Length of output: 446
🏁 Script executed:
#!/bin/bash
# Check if the specific file exists and show its content
if [ -f ".github/workflows/needs-reply.yml" ]; then
echo "File found. Content:"
cat -n ".github/workflows/needs-reply.yml"
else
echo "File not found at .github/workflows/needs-reply.yml"
echo "Searching for similar filenames..."
find . -name "*needs-reply*" -type f 2>/dev/null
fiRepository: Cap-go/capacitor-plus
Length of output: 808
🏁 Script executed:
#!/bin/bash
# Search for all action references in workflows to see the full scope
echo "=== All action references in workflows ==="
rg -n 'uses:' '.github/workflows/' --type yamlRepository: Cap-go/capacitor-plus
Length of output: 3268
🌐 Web query:
imhoffd/needs-reply v2 commit sha github action
💡 Result:
The GitHub Action imhoffd/needs-reply@v2 refers to version tag v2 (specifically v2.0.0, released 2020-12-30). No specific commit SHA is pinned; it resolves to the commit tagged v2.0.0. The repository's default branch (main) latest commit is from 2024-09-25, but @v2 uses the tag, not main. To use a specific commit SHA instead of the tag, specify it explicitly like imhoffd/needs-reply@ (e.g., the SHA of the latest main commit if desired for updates post-v2.0.0).
Citations:
- 1: https://github.com/imhoffd/needs-reply
- 2: https://github.com/marketplace/actions/close-issues-after-no-reply
Pin third-party action to a full commit SHA.
Line 12 references a mutable tag (@v2). For workflow supply-chain safety, pin to an immutable commit SHA.
🔒 Proposed hardening
- uses: imhoffd/needs-reply@v2
+ uses: imhoffd/needs-reply@<full-length-commit-sha> # maps to v2🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/needs-reply.yml at line 12, Replace the mutable action
reference "uses: imhoffd/needs-reply@v2" with a pinned immutable commit SHA for
supply-chain safety: locate the "uses: imhoffd/needs-reply@v2" entry in the
workflow and change it to use the full commit SHA form (e.g.,
@<full-commit-sha>) by selecting a specific commit from the imhoffd/needs-reply
repository and pasting its commit SHA; ensure you update any relevant workflow
comment to document which commit was chosen and why.
| - uses: actions/checkout@v5 | ||
| with: | ||
| fetch-depth: 0 | ||
| ref: 'main' |
There was a problem hiding this comment.
Don't hard-code the publish checkout to main.
With workflow_dispatch or workflow_call, this will publish whatever is on main rather than the ref that invoked the workflow. That makes the release artifact drift from the reviewed branch/tag.
Suggested fix
- uses: actions/checkout@v5
with:
fetch-depth: 0
- ref: 'main'📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| ref: 'main' | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/publish-ios.yml around lines 21 - 24, The checkout step
currently pins the ref to 'main' which causes the workflow to always publish
from main; update the actions/checkout@v5 invocation (the step with "uses:
actions/checkout@v5" and the "ref:" field) to use the triggering ref instead
(for example use the workflow context like github.ref or github.sha, or remove
the explicit ref so checkout defaults to the event ref) so the publish uses the
branch/tag/commit that invoked the workflow rather than main.
| public static String extractBoundaryFromContentType(String contentType) { | ||
| String boundaryPrefix = "boundary="; | ||
| int boundaryIndex = contentType.indexOf(boundaryPrefix); | ||
| if (boundaryIndex == -1) { | ||
| return null; | ||
| } | ||
|
|
||
| // Extract the substring starting right after "boundary=" | ||
| String boundary = contentType.substring(boundaryIndex + boundaryPrefix.length()); | ||
|
|
||
| // Find the end of the boundary value by looking for the next ";" | ||
| int endIndex = boundary.indexOf(";"); | ||
| if (endIndex != -1) { | ||
| boundary = boundary.substring(0, endIndex); | ||
| } | ||
|
|
||
| // Remove surrounding double quotes if present | ||
| boundary = boundary.trim(); | ||
| if (boundary.startsWith("\"") && boundary.endsWith("\"")) { | ||
| boundary = boundary.substring(1, boundary.length() - 1); | ||
| } | ||
|
|
||
| return boundary; | ||
| } |
There was a problem hiding this comment.
Return null for empty extracted boundaries.
At Line 345, boundary= or boundary="" currently returns an empty string, which callers treat as valid and then emit invalid multipart delimiters. Treat blank boundaries as missing.
Proposed fix
public static String extractBoundaryFromContentType(String contentType) {
+ if (contentType == null || contentType.isEmpty()) {
+ return null;
+ }
+
String boundaryPrefix = "boundary=";
int boundaryIndex = contentType.indexOf(boundaryPrefix);
if (boundaryIndex == -1) {
return null;
}
@@
boundary = boundary.trim();
if (boundary.startsWith("\"") && boundary.endsWith("\"")) {
boundary = boundary.substring(1, boundary.length() - 1);
}
-
- return boundary;
+ boundary = boundary.trim();
+ return boundary.isEmpty() ? null : boundary;
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| public static String extractBoundaryFromContentType(String contentType) { | |
| String boundaryPrefix = "boundary="; | |
| int boundaryIndex = contentType.indexOf(boundaryPrefix); | |
| if (boundaryIndex == -1) { | |
| return null; | |
| } | |
| // Extract the substring starting right after "boundary=" | |
| String boundary = contentType.substring(boundaryIndex + boundaryPrefix.length()); | |
| // Find the end of the boundary value by looking for the next ";" | |
| int endIndex = boundary.indexOf(";"); | |
| if (endIndex != -1) { | |
| boundary = boundary.substring(0, endIndex); | |
| } | |
| // Remove surrounding double quotes if present | |
| boundary = boundary.trim(); | |
| if (boundary.startsWith("\"") && boundary.endsWith("\"")) { | |
| boundary = boundary.substring(1, boundary.length() - 1); | |
| } | |
| return boundary; | |
| } | |
| public static String extractBoundaryFromContentType(String contentType) { | |
| if (contentType == null || contentType.isEmpty()) { | |
| return null; | |
| } | |
| String boundaryPrefix = "boundary="; | |
| int boundaryIndex = contentType.indexOf(boundaryPrefix); | |
| if (boundaryIndex == -1) { | |
| return null; | |
| } | |
| // Extract the substring starting right after "boundary=" | |
| String boundary = contentType.substring(boundaryIndex + boundaryPrefix.length()); | |
| // Find the end of the boundary value by looking for the next ";" | |
| int endIndex = boundary.indexOf(";"); | |
| if (endIndex != -1) { | |
| boundary = boundary.substring(0, endIndex); | |
| } | |
| // Remove surrounding double quotes if present | |
| boundary = boundary.trim(); | |
| if (boundary.startsWith("\"") && boundary.endsWith("\"")) { | |
| boundary = boundary.substring(1, boundary.length() - 1); | |
| } | |
| boundary = boundary.trim(); | |
| return boundary.isEmpty() ? null : boundary; | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In
`@android/capacitor/src/main/java/com/getcapacitor/plugin/util/CapacitorHttpUrlConnection.java`
around lines 323 - 346, The extractBoundaryFromContentType method currently
returns an empty string for inputs like "boundary=" or "boundary=\"\"" which
callers treat as valid; modify extractBoundaryFromContentType to treat
blank/empty boundaries as missing by returning null when the computed boundary
is empty after trimming and after stripping surrounding quotes. Locate the
method extractBoundaryFromContentType and, after trimming and after removing
quotes (the logic around boundary.trim() and the startsWith/endsWith block), add
a check that if boundary.length() == 0 return null so callers receive null for
missing boundaries.
| /** | ||
| * @deprecated This method may return incorrect headers in concurrent range requests. | ||
| * <p> | ||
| * Use {@link #buildDefaultResponseHeaders()} instead, which returns a copy of the map. | ||
| * </p> | ||
| * This method will be removed in a future major version of Capacitor. | ||
| * </p> | ||
| */ | ||
| @Deprecated(forRemoval = true) // adjust version as appropriate | ||
| public Map<String, String> getResponseHeaders() { | ||
| return responseHeaders; | ||
| } |
There was a problem hiding this comment.
Malformed Javadoc and missing since attribute in deprecation.
The Javadoc has an orphaned </p> tag on line 137. Also, the @Deprecated annotation should include the since attribute to indicate when the method was deprecated.
Proposed fix
/**
* `@deprecated` This method may return incorrect headers in concurrent range requests.
* <p>
* Use {`@link` `#buildDefaultResponseHeaders`()} instead, which returns a copy of the map.
- * </p>
* This method will be removed in a future major version of Capacitor.
- * </p>
+ * </p>
*/
- `@Deprecated`(forRemoval = true) // adjust version as appropriate
+ `@Deprecated`(since = "8.0.0", forRemoval = true)
public Map<String, String> getResponseHeaders() {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| /** | |
| * @deprecated This method may return incorrect headers in concurrent range requests. | |
| * <p> | |
| * Use {@link #buildDefaultResponseHeaders()} instead, which returns a copy of the map. | |
| * </p> | |
| * This method will be removed in a future major version of Capacitor. | |
| * </p> | |
| */ | |
| @Deprecated(forRemoval = true) // adjust version as appropriate | |
| public Map<String, String> getResponseHeaders() { | |
| return responseHeaders; | |
| } | |
| /** | |
| * `@deprecated` This method may return incorrect headers in concurrent range requests. | |
| * <p> | |
| * Use {`@link` `#buildDefaultResponseHeaders`()} instead, which returns a copy of the map. | |
| * This method will be removed in a future major version of Capacitor. | |
| * </p> | |
| */ | |
| `@Deprecated`(since = "8.0.0", forRemoval = true) | |
| public Map<String, String> getResponseHeaders() { | |
| return responseHeaders; | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@android/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.java`
around lines 131 - 142, Fix the malformed Javadoc and add a deprecation "since"
value for the method: in class WebViewLocalServer update the Javadoc for
getResponseHeaders() to remove the orphaned "</p>" tag and use a proper
`@deprecated` Javadoc tag that references buildDefaultResponseHeaders(), then
update the annotation to `@Deprecated`(since = "4.6.0", forRemoval = true)
(replace "4.6.0" with the actual deprecation version if different) so the
annotation includes the since attribute and forRemoval flag; ensure
getResponseHeaders() still returns responseHeaders but the docs clearly point
callers to buildDefaultResponseHeaders().
| <<<<<<< HEAD | ||
| "name": "@capacitor-plus/android", | ||
| "version": "8.0.8", | ||
| "description": "Capacitor+: Enhanced Capacitor with automated upstream sync - Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capgo.app/docs/plugins/capacitor-plus/", | ||
| "author": "Capgo Team <support@capgo.app> (https://capgo.app)", | ||
| ======= | ||
| "name": "@capacitor/android", | ||
| "version": "8.3.1", | ||
| "description": "Capacitor: Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capacitorjs.com", | ||
| "author": "Ionic Team <hi@ionic.io> (https://ionic.io)", | ||
| >>>>>>> upstream/main |
There was a problem hiding this comment.
Resolve the package manifest conflict first.
This file is not valid JSON while the conflict markers remain, and CI is already failing npm install with EJSONPARSE because of it.
Also applies to: 34-39
🧰 Tools
🪛 Biome (2.4.12)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: String values must be double quoted.
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-8: End of file expected
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-14: End of file expected
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character /
(parse)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@android/package.json` around lines 2 - 14, The package.json contains
unresolved Git conflict markers (e.g., <<<<<<< HEAD, =======, >>>>>>>
upstream/main) around the manifest fields "name", "version", "description",
"homepage", and "author", which makes the file invalid JSON and breaks npm
install; fix it by removing the conflict markers and producing a single valid
JSON object for those fields (choose the intended values or reconcile them),
validate the JSON (e.g., with a JSON linter), and repeat the same resolution for
the other conflict block mentioned (lines with similar markers around fields at
34-39).
| private func extractBoundary(from contentType: String) -> String? { | ||
| if let boundaryRange = contentType.range(of: "boundary=") { | ||
| var boundary = contentType[boundaryRange.upperBound...] | ||
| if let endRange = boundary.range(of: ";") { | ||
| boundary = boundary[..<endRange.lowerBound] | ||
| } | ||
|
|
||
| if boundary.hasPrefix("\"") && boundary.hasSuffix("\"") { | ||
| return String(boundary.dropFirst().dropLast()) | ||
| } else { | ||
| return String(boundary) | ||
| } | ||
| } | ||
|
|
||
| return nil | ||
| } |
There was a problem hiding this comment.
Treat empty parsed boundaries as missing.
Line 104 can return an empty boundary (boundary= / boundary=""), which then gets used as a delimiter and produces malformed multipart payloads. Return nil when the normalized boundary is empty.
Proposed fix
private func extractBoundary(from contentType: String) -> String? {
if let boundaryRange = contentType.range(of: "boundary=") {
var boundary = contentType[boundaryRange.upperBound...]
if let endRange = boundary.range(of: ";") {
boundary = boundary[..<endRange.lowerBound]
}
-
+
+ var boundaryString = String(boundary).trimmingCharacters(in: .whitespacesAndNewlines)
+
- if boundary.hasPrefix("\"") && boundary.hasSuffix("\"") {
- return String(boundary.dropFirst().dropLast())
+ if boundaryString.hasPrefix("\"") && boundaryString.hasSuffix("\"") {
+ boundaryString = String(boundaryString.dropFirst().dropLast()).trimmingCharacters(in: .whitespacesAndNewlines)
+ }
+
+ if boundaryString.isEmpty {
+ return nil
} else {
- return String(boundary)
+ return boundaryString
}
}
return nil
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@ios/Capacitor/Capacitor/Plugins/CapacitorUrlRequest.swift` around lines 94 -
109, The extractBoundary(from:) function can return an empty string for inputs
like "boundary=" or 'boundary=""'; update the logic in extractBoundary(from
contentType: String) to treat a normalized boundary of "" as missing by
returning nil after trimming surrounding quotes and semicolons. Specifically,
after computing the final boundary string (the variable boundary) and unquoting
it, check if it's empty and return nil if so; otherwise return the non-empty
String(boundary). This ensures callers never receive an empty delimiter.
| All notable changes to this project will be documented in this file. | ||
| See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. | ||
|
|
||
| <<<<<<< HEAD |
There was a problem hiding this comment.
Resolve the changelog conflict instead of committing both sides.
This file still has merge markers and two divergent release histories. Please pick the final changelog contents and delete the conflict block before merging.
Also applies to: 198-198, 231-231
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@ios/CHANGELOG.md` at line 6, The CHANGELOG.md contains unresolved Git merge
markers (e.g., the "<<<<<<< HEAD" block) and duplicate release entries; open
ios/CHANGELOG.md, remove the merge markers and the unwanted side of the
conflict, choose and keep the correct final release text (consolidate entries if
needed), and save the file without any "<<<<<<<", "=======", or ">>>>>>>"
markers; repeat the same cleanup for the other conflict locations referenced
(around the other indicated sections).
| <<<<<<< HEAD | ||
| "name": "@capacitor-plus/ios", | ||
| "version": "8.0.8", | ||
| "description": "Capacitor+: Enhanced Capacitor with automated upstream sync - Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capgo.app/docs/plugins/capacitor-plus/", | ||
| "author": "Capgo Team <support@capgo.app> (https://capgo.app)", | ||
| ======= | ||
| "name": "@capacitor/ios", | ||
| "version": "8.3.1", | ||
| "description": "Capacitor: Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capacitorjs.com", | ||
| "author": "Ionic Team <hi@ionic.io> (https://ionic.io)", | ||
| >>>>>>> upstream/main |
There was a problem hiding this comment.
This manifest still has unresolved merge markers.
Until these conflict blocks are collapsed to a single valid JSON object, package installation and any manifest-driven tooling will keep failing.
Also applies to: 36-41
🧰 Tools
🪛 Biome (2.4.12)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: String values must be double quoted.
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-8: End of file expected
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-14: End of file expected
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character /
(parse)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@ios/package.json` around lines 2 - 14, The package.json contains unresolved
git conflict markers (<<<<<<< HEAD, =======, >>>>>>> upstream/main) causing
invalid JSON; open package.json, remove the conflict markers and merge the two
variants into one coherent JSON object for the top-level fields (name, version,
description, homepage, author), choose the correct values (or combine/restore
intended ones), ensure proper commas/quotes so the file is valid JSON, and then
validate the file with a JSON linter or npm install to confirm the manifest is
fixed.
| <<<<<<< HEAD | ||
| "version": "8.0.8", | ||
| ======= | ||
| "version": "8.3.1", | ||
| >>>>>>> upstream/main |
There was a problem hiding this comment.
Resolve the merge conflict markers before merging.
lerna.json is invalid JSON in its current state, so any Lerna/versioning step that reads it will fail until this block is reduced to a single version value.
🧰 Tools
🪛 Biome (2.4.12)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: String values must be double quoted.
(parse)
[error] 17-17: End of file expected
(parse)
[error] 17-17: End of file expected
(parse)
[error] 17-17: End of file expected
(parse)
[error] 17-18: End of file expected
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 19-19: End of file expected
(parse)
[error] 19-19: End of file expected
(parse)
[error] 19-19: End of file expected
(parse)
[error] 19-20: End of file expected
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character /
(parse)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@lerna.json` around lines 16 - 20, There are unresolved git conflict markers
in lerna.json around the "version" key; remove the conflict markers (<<<<<<<
HEAD, =======, >>>>>>>) and leave a single valid JSON entry for "version" (pick
the intended value, e.g., "8.3.1" from upstream/main) so the file is valid JSON
and tooling that reads "version" can parse it.
| <<<<<<< HEAD | ||
| "@types/node": "^24.10.1", | ||
| "@types/tar": "^6.1.2", | ||
| "eslint": "^8.57.1", | ||
| "eslint-plugin-import": "^2.31.0", | ||
| ======= | ||
| "@types/node": "18.18.6", | ||
| "eslint": "^8.57.0", | ||
| >>>>>>> upstream/main | ||
| "lerna": "^7.1.3", | ||
| "prettier": "^3.6.2", | ||
| "prettier-plugin-java": "^2.7.7", | ||
| "rimraf": "^6.1.0", | ||
| "semver": "^7.3.7", | ||
| "swiftlint": "^2.0.0", | ||
| <<<<<<< HEAD | ||
| "tar": "^6.1.11", | ||
| "prettier-pretty-check": "^0.2.0" | ||
| ======= | ||
| "tar": "^7.5.3" | ||
| >>>>>>> upstream/main |
There was a problem hiding this comment.
Resolve the leftover merge conflict in devDependencies.
Lines 35-55 still contain Git conflict markers, so package.json is invalid JSON and npm install is already failing with EJSONPARSE. Please resolve this block before merge. Also keep it consistent with the rest of the file: Line 22 still invokes prettier-pretty-check, so dropping that package here would break the prettier script unless you update the script in the same change.
🧰 Tools
🪛 Biome (2.4.12)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: String values must be double quoted.
(parse)
[error] 36-36: End of file expected
(parse)
[error] 36-36: End of file expected
(parse)
[error] 36-36: End of file expected
(parse)
[error] 36-36: End of file expected
(parse)
[error] 37-37: End of file expected
(parse)
[error] 37-37: End of file expected
(parse)
[error] 37-37: End of file expected
(parse)
[error] 37-37: End of file expected
(parse)
[error] 38-38: End of file expected
(parse)
[error] 38-38: End of file expected
(parse)
[error] 38-38: End of file expected
(parse)
[error] 38-38: End of file expected
(parse)
[error] 39-39: End of file expected
(parse)
[error] 39-39: End of file expected
(parse)
[error] 39-39: End of file expected
(parse)
[error] 39-40: End of file expected
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 41-41: End of file expected
(parse)
[error] 41-41: End of file expected
(parse)
[error] 41-41: End of file expected
(parse)
[error] 41-41: End of file expected
(parse)
[error] 42-42: End of file expected
(parse)
[error] 42-42: End of file expected
(parse)
[error] 42-42: End of file expected
(parse)
[error] 42-43: End of file expected
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character /
(parse)
[error] 44-44: End of file expected
(parse)
[error] 44-44: End of file expected
(parse)
[error] 44-44: End of file expected
(parse)
[error] 44-44: End of file expected
(parse)
[error] 45-45: End of file expected
(parse)
[error] 45-45: End of file expected
(parse)
[error] 45-45: End of file expected
(parse)
[error] 45-45: End of file expected
(parse)
[error] 46-46: End of file expected
(parse)
[error] 46-46: End of file expected
(parse)
[error] 46-46: End of file expected
(parse)
[error] 46-46: End of file expected
(parse)
[error] 47-47: End of file expected
(parse)
[error] 47-47: End of file expected
(parse)
[error] 47-47: End of file expected
(parse)
[error] 47-47: End of file expected
(parse)
[error] 48-48: End of file expected
(parse)
[error] 48-48: End of file expected
(parse)
[error] 48-48: End of file expected
(parse)
[error] 48-48: End of file expected
(parse)
[error] 49-49: End of file expected
(parse)
[error] 49-49: End of file expected
(parse)
[error] 49-49: End of file expected
(parse)
[error] 49-50: End of file expected
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 51-51: End of file expected
(parse)
[error] 51-51: End of file expected
(parse)
[error] 51-51: End of file expected
(parse)
[error] 51-51: End of file expected
(parse)
[error] 52-52: End of file expected
(parse)
[error] 52-52: End of file expected
(parse)
[error] 52-52: End of file expected
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 54-54: End of file expected
(parse)
[error] 54-54: End of file expected
(parse)
[error] 54-54: End of file expected
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: String values must be double quoted.
(parse)
[error] 55-55: unexpected character /
(parse)
[error] 55-55: String values must be double quoted.
(parse)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@package.json` around lines 35 - 55, Resolve the Git conflict markers inside
package.json's devDependencies by removing the <<<<<<<, =======, >>>>>>> lines
and merging the intended entries into a single valid JSON object; ensure the
final devDependencies include a consistent set (pick the correct versions for
"@types/node", "eslint", "tar", etc.) and preserve "prettier-pretty-check" if
the project's scripts (check the "prettier" script) still reference it—if you
choose to drop "prettier-pretty-check", also update the corresponding script to
avoid a missing dependency; finally validate the file parses as JSON (no
trailing commas) before committing.
Merge Conflict Resolution Required
The automatic sync of the
plusbranch with upstream main encountered merge conflicts.What happened
Action needed: Review the branch and resolve any remaining concerns before merging.
This PR was created automatically by the Capacitor+ sync workflow
Summary by CodeRabbit
New Features
Bug Fixes
CI/Testing