Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
2e15512
chore(infra): add GitHub workflows and project.yml to all plugin subr…
leogdion Oct 12, 2025
5e9dfd2
git subrepo push Packages/SundialKitMessagable
leogdion Oct 12, 2025
899561b
feat(stream): add skeletal Sources, Tests, and CodeQL workflow
leogdion Oct 12, 2025
9b17dd6
feat(infra): add dependency management and update CI workflows
leogdion Oct 13, 2025
9e00e46
fix(infra): make ensure-remote-deps.sh cross-platform
leogdion Oct 13, 2025
097fb72
git subrepo push Packages/SundialKitMessagable
leogdion Oct 13, 2025
e600706
Fixing Linting Issues
leogdion Oct 13, 2025
62e0818
git subrepo push Packages/SundialKitMessagable
leogdion Oct 13, 2025
3b3e8bf
fixing swift-build run
leogdion Oct 13, 2025
0ec1011
git subrepo push Packages/SundialKitMessagable
leogdion Oct 13, 2025
17d92c3
git subrepo push Packages/SundialKitMessagable
leogdion Oct 14, 2025
e3176d3
fixing tests for Swift 6.1
leogdion Oct 14, 2025
e31b80d
fixing unit tests on Xcode 16
leogdion Oct 14, 2025
11c0fa8
docs(v2.0.0): complete Phase 6 - final validation and documentation
leogdion Oct 16, 2025
c477cbc
fixing linting
leogdion Oct 16, 2025
cf7eedb
Fixing Workflows
leogdion Oct 16, 2025
f2a3d9b
test(infra): migrate tests to module-specific targets
leogdion Oct 20, 2025
1f679d2
Merge branch 'mainactor' into 43-separate-targets
leogdion Oct 20, 2025
812685c
Merge branch 'real-mainactor' into 43-separate-targets
leogdion Oct 20, 2025
0fdb78d
git subrepo push Packages/SundialKitCombine
leogdion Oct 22, 2025
f3866d8
fix(lint): Resolve linting violations across all packages
leogdion Oct 22, 2025
7d8b662
fixing ensure-remote-deps for package name
leogdion Oct 22, 2025
110b3f4
git subrepo push Packages/SundialKitCombine
leogdion Oct 23, 2025
4eba5fb
refactor(stream): extract managers from ConnectivityObserver
leogdion Oct 23, 2025
5939c11
consolidating force_cast
leogdion Oct 23, 2025
3a26db3
refactor(stream): extract ConnectivityObserver into focused extensions
leogdion Oct 23, 2025
e92ab03
fixing remote deps script
leogdion Oct 24, 2025
6e121df
refactor(watchconnectivity): split WatchConnectivitySession into focu…
leogdion Oct 24, 2025
b6acca0
fixing remaining linting issues
leogdion Oct 24, 2025
3aa48e2
fix(infra): ensure-remote-deps.sh generates SwiftLint-compliant multi…
leogdion Oct 24, 2025
aa6fd80
git subrepo push Packages/SundialKitCombine
leogdion Oct 26, 2025
016db94
chore: merge demo-app-mise-migration into v1.0.0
leogdion Oct 31, 2025
3e48198
fix(stream): capture full session state snapshot during activation
leogdion Nov 10, 2025
3bb010b
fix(connectivity): automatically process pending applicationContext u…
leogdion Nov 11, 2025
d7787b8
refactor(stream): move lifecycle observer setup to activate() for typ…
leogdion Nov 12, 2025
081596b
feat(stream): add defensive assertions and OSLog error handling
leogdion Nov 12, 2025
14aa861
Adding more tests
leogdion Nov 13, 2025
b038fe6
test(stream): add comprehensive NetworkObserver tests
leogdion Nov 13, 2025
1ab40eb
Adding more unit tests
leogdion Nov 13, 2025
20d39b5
fix(test): resolve Swift 6.1 strict concurrency issues in SundialKitS…
leogdion Nov 13, 2025
81f872f
fix(ci): update ensure-remote-deps scripts to use correct branch
leogdion Nov 13, 2025
090a5c4
feat: migrate print statements to OSLog with unified logging infrastr…
leogdion Nov 13, 2025
d99ec19
feat(logging): duplicate Logger.swift in subrepos for independent builds
leogdion Nov 13, 2025
6e9c7a7
fix(logging): add platform guards for OSLog imports to support Linux …
leogdion Nov 14, 2025
8204ec6
test(stream): fix hanging tests by replacing Task.detached with struc…
leogdion Nov 14, 2025
3a86146
fixing notifications and logging
leogdion Nov 14, 2025
31d16e2
fixing linting issues [skip ci]
leogdion Nov 14, 2025
3fc45a8
Fixing Tests and Linting Issues
leogdion Nov 15, 2025
a6e340c
fixing demo issue
leogdion Nov 15, 2025
7bc90df
git subrepo push Packages/SundialKitCombine
leogdion Nov 19, 2025
8234353
docs(docc): address TODOs and add NetworkObserver default initializers
leogdion Nov 20, 2025
1c16d63
docs(docc): enhance plugin documentation and add new logo
leogdion Nov 21, 2025
25e689e
Updating Documentation (#66)
leogdion Nov 24, 2025
78879e9
Fix README Files (#70)
leogdion Nov 24, 2025
5dcfed6
chore(plugins): update Package.swift to use remote SundialKit depende…
leogdion Nov 24, 2025
640c189
Remove ensure-remote-deps step from workflows
leogdion Nov 24, 2025
c458bc4
Remove ensure remote dependencies step
leogdion Nov 24, 2025
c86931c
fix: address selected CodeRabbit PR review comments
leogdion Nov 24, 2025
cf1193b
adding package caching
leogdion Nov 24, 2025
ac10ec6
Final Fixes Before Merge (#5)
leogdion Nov 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"name": "Swift 6.2",
"image": "swift:6.2",
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": "false",
"username": "vscode",
"upgradePackages": "false"
},
"ghcr.io/devcontainers/features/git:1": {
"version": "os-provided",
"ppa": "false"
}
},
"postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"runArgs": [
"--cap-add=SYS_PTRACE",
"--security-opt",
"seccomp=unconfined"
],
"customizations": {
"vscode": {
"settings": {
"lldb.library": "/usr/lib/liblldb.so"
},
"extensions": [
"sswg.swift-lang"
]
}
},
"remoteUser": "root"
}
32 changes: 32 additions & 0 deletions .devcontainer/swift-6.1-nightly/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"name": "Swift 6.1 Nightly",
"image": "swiftlang/swift:nightly-6.1-noble",
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": "false",
"username": "vscode",
"upgradePackages": "false"
},
"ghcr.io/devcontainers/features/git:1": {
"version": "os-provided",
"ppa": "false"
}
},
"postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"runArgs": [
"--cap-add=SYS_PTRACE",
"--security-opt",
"seccomp=unconfined"
],
"customizations": {
"vscode": {
"settings": {
"lldb.library": "/usr/lib/liblldb.so"
},
"extensions": [
"sswg.swift-lang"
]
}
},
"remoteUser": "root"
}
32 changes: 32 additions & 0 deletions .devcontainer/swift-6.1/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"name": "Swift 6.1",
"image": "swift:6.1",
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": "false",
"username": "vscode",
"upgradePackages": "false"
},
"ghcr.io/devcontainers/features/git:1": {
"version": "os-provided",
"ppa": "false"
}
},
"postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"runArgs": [
"--cap-add=SYS_PTRACE",
"--security-opt",
"seccomp=unconfined"
],
"customizations": {
"vscode": {
"settings": {
"lldb.library": "/usr/lib/liblldb.so"
},
"extensions": [
"sswg.swift-lang"
]
}
},
"remoteUser": "root"
}
40 changes: 40 additions & 0 deletions .devcontainer/swift-6.2-nightly/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"name": "Swift 6.2 Nightly",
"image": "swiftlang/swift:nightly-6.2-noble",
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": "false",
"username": "vscode",
"upgradePackages": "false"
},
"ghcr.io/devcontainers/features/git:1": {
"version": "os-provided",
"ppa": "false"
}
},
"postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"runArgs": [
"--cap-add=SYS_PTRACE",
"--security-opt",
"seccomp=unconfined"
],
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Set *default* container specific settings.json values on container create.
"settings": {
"lldb.library": "/usr/lib/liblldb.so"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"sswg.swift-lang"
]
}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],

// Set `remoteUser` to `root` to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "root"
}
32 changes: 32 additions & 0 deletions .devcontainer/swift-6.2/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"name": "Swift 6.2",
"image": "swift:6.2",
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": "false",
"username": "vscode",
"upgradePackages": "false"
},
"ghcr.io/devcontainers/features/git:1": {
"version": "os-provided",
"ppa": "false"
}
},
"postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"runArgs": [
"--cap-add=SYS_PTRACE",
"--security-opt",
"seccomp=unconfined"
],
"customizations": {
"vscode": {
"settings": {
"lldb.library": "/usr/lib/liblldb.so"
},
"extensions": [
"sswg.swift-lang"
]
}
},
"remoteUser": "root"
}
Comment on lines +1 to +32
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Remove this duplicate configuration.

This file is identical to .devcontainer/devcontainer.json (both define "Swift 6.2" with the same configuration). Having two identical files creates maintenance burden and confusion. Keep one as the canonical default configuration and remove the other.



🏁 Script executed:

#!/bin/bash
# Check if both devcontainer files exist and compare their contents
echo "=== Checking if files exist ==="
test -f .devcontainer/devcontainer.json && echo "✓ .devcontainer/devcontainer.json exists" || echo "✗ .devcontainer/devcontainer.json missing"
test -f .devcontainer/swift-6.2/devcontainer.json && echo "✓ .devcontainer/swift-6.2/devcontainer.json exists" || echo "✗ .devcontainer/swift-6.2/devcontainer.json missing"

echo -e "\n=== File contents comparison ==="
echo "--- .devcontainer/devcontainer.json ---"
cat .devcontainer/devcontainer.json 2>/dev/null || echo "File not found"

echo -e "\n--- .devcontainer/swift-6.2/devcontainer.json ---"
cat .devcontainer/swift-6.2/devcontainer.json 2>/dev/null || echo "File not found"

echo -e "\n=== MD5 checksums ==="
md5sum .devcontainer/devcontainer.json .devcontainer/swift-6.2/devcontainer.json 2>/dev/null || echo "Cannot compute checksums"

echo -e "\n=== Diff output ==="
diff -u .devcontainer/devcontainer.json .devcontainer/swift-6.2/devcontainer.json || echo "Files differ or one does not exist"

Length of output: 1876



🏁 Script executed:

#!/bin/bash
# Check directory structure and patterns of devcontainer variants
echo "=== .devcontainer directory structure ==="
find .devcontainer -type f -name "devcontainer.json" | sort

echo -e "\n=== Count of devcontainer.json files ==="
find .devcontainer -type f -name "devcontainer.json" | wc -l

echo -e "\n=== Check for README or documentation ==="
find .devcontainer -type f \( -name "README*" -o -name "*.md" \) | head -20

echo -e "\n=== List all files in .devcontainer root ==="
ls -la .devcontainer/ 2>/dev/null | head -20

Length of output: 813



🏁 Script executed:

#!/bin/bash
# Compare all devcontainer.json files to detect duplication pattern
echo "=== MD5 checksums for all variants ==="
find .devcontainer -name "devcontainer.json" -type f | sort | while read f; do
  md5sum "$f"
done

echo -e "\n=== Detailed file size comparison ==="
find .devcontainer -name "devcontainer.json" -type f | sort | xargs wc -c

echo -e "\n=== Check if all files are identical ==="
root_file=".devcontainer/devcontainer.json"
all_same=true
while read variant_file; do
  if [ "$variant_file" != "$root_file" ]; then
    if ! diff -q "$root_file" "$variant_file" > /dev/null 2>&1; then
      echo "DIFFERS: $variant_file"
      all_same=false
    else
      echo "IDENTICAL: $variant_file"
    fi
  fi
done < <(find .devcontainer -name "devcontainer.json" -type f | sort)

if $all_same; then
  echo -e "\n⚠️  All variant files are identical to root devcontainer.json"
fi

Length of output: 878



🏁 Script executed:

#!/bin/bash
# Spot-check differences in one variant to confirm intentional variation
echo "=== swift-6.1/devcontainer.json vs root ==="
diff -u .devcontainer/devcontainer.json .devcontainer/swift-6.1/devcontainer.json | head -30

echo -e "\n=== swift-6.2-nightly/devcontainer.json vs root (first 30 lines of diff) ==="
diff -u .devcontainer/devcontainer.json .devcontainer/swift-6.2-nightly/devcontainer.json | head -30

Length of output: 1502


Remove .devcontainer/swift-6.2/devcontainer.json as a redundant duplicate.

This file is byte-for-byte identical to .devcontainer/devcontainer.json (MD5: 527ace14726ac67796e5942418651d1e). Other variants in the same directory structure (swift-6.1, swift-6.1-nightly, swift-6.2-nightly) intentionally differ by image and version, confirming that subdirectory variants should be version-specific. The swift-6.2 variant breaks this pattern by duplicating the root configuration. Keep the root file as the canonical Swift 6.2 default and remove the subdirectory copy.

🤖 Prompt for AI Agents
In .devcontainer/swift-6.2/devcontainer.json (lines 1-32) the file is a
byte-for-byte duplicate of .devcontainer/devcontainer.json and should be
removed; delete the redundant file from the tree, run git rm --cached (or git
rm) to remove it from the repo and commit the deletion, ensure no tooling or
docs reference the subdirectory-specific devcontainer.json and confirm the
canonical .devcontainer/devcontainer.json remains as the Swift 6.2
configuration.

155 changes: 155 additions & 0 deletions .github/workflows/SundialKitStream.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
name: SundialKitStream
on:
push:
branches-ignore:
- '*WIP'
env:
PACKAGE_NAME: SundialKitStream
jobs:
build-ubuntu:
name: Build on Ubuntu
runs-on: ubuntu-latest
container: ${{ matrix.swift.nightly && format('swiftlang/swift:nightly-{0}-{1}', matrix.swift.version, matrix.os) || format('swift:{0}-{1}', matrix.swift.version, matrix.os) }}
if: ${{ !contains(github.event.head_commit.message, 'ci skip') }}
strategy:
fail-fast: false
matrix:
os: [noble, jammy]
swift:
- version: "6.1"
- version: "6.2"
- version: "6.1"
nightly: true
- version: "6.2"
nightly: true
steps:
- uses: actions/checkout@v4
- uses: brightdigit/swift-build@v1.4.0
with:
scheme: ${{ env.PACKAGE_NAME }}
- uses: sersoft-gmbh/swift-coverage-action@v4
id: coverage-files
with:
fail-on-empty-output: true
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
flags: swift-${{ matrix.swift.version }}-${{ matrix.os }}${{ matrix.swift.nightly && '-nightly' || '' }}
verbose: true
token: ${{ secrets.CODECOV_TOKEN }}
files: ${{ join(fromJSON(steps.coverage-files.outputs.files), ',') }}
build-macos:
name: Build on macOS
runs-on: ${{ matrix.runs-on }}
if: ${{ !contains(github.event.head_commit.message, 'ci skip') }}
strategy:
fail-fast: false
matrix:
include:
# SPM Build Matrix - Xcode 16.x+ (Swift 6.1+)
- runs-on: macos-26
xcode: "/Applications/Xcode_26.1.app"
- runs-on: macos-26
xcode: "/Applications/Xcode_26.0.app"
- runs-on: macos-15
xcode: "/Applications/Xcode_16.4.app"
- runs-on: macos-15
xcode: "/Applications/Xcode_16.3.app"

# iOS Build Matrix - Xcode 16.x+ (Swift 6.1+)
- type: ios
runs-on: macos-26
xcode: "/Applications/Xcode_26.1.app"
deviceName: "iPhone 17 Pro"
osVersion: "26.1"
download-platform: true

- type: ios
runs-on: macos-26
xcode: "/Applications/Xcode_26.0.app"
deviceName: "iPhone 17 Pro"
osVersion: "26.0.1"
download-platform: true

- type: ios
runs-on: macos-15
xcode: "/Applications/Xcode_16.4.app"
deviceName: "iPhone 16e"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Correct invalid iOS device name.

Line 78 references "iPhone 16e", which is not a valid Apple device model. Standard model names include iPhone 16, iPhone 16 Plus, iPhone 16 Pro, iPhone 16 Pro Max, etc.

Update to a valid device name:

          - type: ios
            runs-on: macos-15
            xcode: "/Applications/Xcode_16.4.app"
-           deviceName: "iPhone 16e"
+           deviceName: "iPhone 16"
            osVersion: "18.5"
📝 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.

Suggested change
deviceName: "iPhone 16e"
deviceName: "iPhone 16"
🤖 Prompt for AI Agents
.github/workflows/SundialKitStream.yml around line 78: the workflow uses an
invalid deviceName "iPhone 16e"; replace it with a valid Apple device model
string (for example "iPhone 16", "iPhone 16 Plus", "iPhone 16 Pro", or "iPhone
16 Pro Max") that matches the simulator/device set used in your CI matrix so the
workflow can find and boot the device.

osVersion: "18.5"

- type: ios
runs-on: macos-15
xcode: "/Applications/Xcode_16.3.app"
deviceName: "iPhone 16"
osVersion: "18.4"

# watchOS Build Matrix - Xcode 16.x+ (Swift 6.1+)
- type: watchos
runs-on: macos-26
xcode: "/Applications/Xcode_26.1.app"
deviceName: "Apple Watch Ultra 3 (49mm)"
osVersion: "26.0"
download-platform: true

- type: watchos
runs-on: macos-26
xcode: "/Applications/Xcode_26.0.app"
deviceName: "Apple Watch Ultra 3 (49mm)"
osVersion: "26.0"
download-platform: true

- type: watchos
runs-on: macos-15
xcode: "/Applications/Xcode_16.4.app"
deviceName: "Apple Watch Series 10 (46mm)"
osVersion: "11.5"

- type: watchos
runs-on: macos-15
xcode: "/Applications/Xcode_16.3.app"
deviceName: "Apple Watch Series 10 (42mm)"
osVersion: "11.4"

steps:
- uses: actions/checkout@v4

- name: Build and Test
uses: brightdigit/swift-build@v1.4.0
with:
scheme: ${{ env.PACKAGE_NAME }}
type: ${{ matrix.type }}
xcode: ${{ matrix.xcode }}
deviceName: ${{ matrix.deviceName }}
osVersion: ${{ matrix.osVersion }}
download-platform: ${{ matrix.download-platform }}

# Coverage Steps
- name: Process Coverage
uses: sersoft-gmbh/swift-coverage-action@v4

- name: Upload Coverage
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: ${{ matrix.type && format('{0}{1}', matrix.type, matrix.osVersion) || 'spm' }}

lint:
name: Linting
if: ${{ !contains(github.event.head_commit.message, 'ci skip') }}
runs-on: ubuntu-latest
needs: [build-ubuntu, build-macos]
env:
LINT_MODE: STRICT
steps:
- uses: actions/checkout@v4
- name: Install mise
uses: jdx/mise-action@v2
with:
version: 2024.11.0
install: true
cache: true
- name: Lint
run: |
set -e
./Scripts/lint.sh
57 changes: 57 additions & 0 deletions .github/workflows/claude-code-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Claude Code Review

on:
pull_request:
types: [opened, synchronize]
# Optional: Only run on specific file changes
# paths:
# - "src/**/*.ts"
# - "src/**/*.tsx"
# - "src/**/*.js"
# - "src/**/*.jsx"

jobs:
claude-review:
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
# github.event.pull_request.user.login == 'new-developer' ||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'

runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}

Please review this pull request and provide feedback on:
- Code quality and best practices
- Potential bugs or issues
- Performance considerations
- Security concerns
- Test coverage

Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.

Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.

# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'

Loading
Loading