Skip to content

Commit df9eaf8

Browse files
🚀 release: v1.1.0 (#6)
* 📦 new: add update checker functionality and context injection * 📦 new: implement update checker with caching and runtime detection * 🧪 test: add comprehensive tests for update checker module * 📦 new: add updateContext to AgentContext for software updates * 📦 new: add software update check and context to start command * 📦 new: update package versions to 1.0.1 across all packages * ⚙️ setup: update CI workflows for release process and permissions * 🔧 update: enhance version parsing in isNewerVersion function * 📦 new: add build step for all packages in CI workflow * ⚙️ setup (ci): update package-build-flow-action to v2.0.1 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ⚙️ setup: enforce clean commit convention with husky and ci Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ⚙️ setup (husky): add clean commit validation hook Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ⚙️ setup (ci): fix security, guards, and validation issues - add if-guard to package/container jobs (main push only) - narrow ci.yml top-level permissions to contents: read - add per-job permissions for package and container jobs - remove unused packages/security-events write from release.yml - fix commit-lint push range to validate all commits (before..after) - quote SHA interpolations in commit-lint PR log command - remove duplicate bun run build step from package.yml - add --bail flag to pre-commit bun test hook - add msgFile undefined guard in validate-commit-msg.mjs - make variation selector optional for trash and gear emojis - strengthen readCache to validate latest and runtime field types Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ⚙️ setup (ci): remove redundant permissions from reusable workflow calls permissions are already defined in the called workflows (package.yml, container.yml) - specifying them in the caller causes startup_failure on duplicate runs triggered by open PRs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * 🔧 update (ci): handle initial push and improve update-checker test - update commit-lint workflow to capture all reachable commits on initial push - improve update-checker test to assert cache file absence when fetch fails Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * 📦 new (landing): add landing page with svelte and tailwindcss Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ⚙️ setup (ci): add deploy workflow for landing page Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ⚙️ setup (landing): add build:landing script and update lockfile Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ⚙️ setup (husky): add error handling and allow revert commits Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * 🔒 security (update-checker): sanitize version and url for prompt injection Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * 🧪 test (update-checker): add sanitizeForPrompt tests and improve mocking Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ⚙️ setup (ci): pin action shas and scope deploy permissions - pin all GitHub Actions to full commit SHAs for supply chain security - move pages/id-token permissions to deploy job only - pin bun version to 1.2.x and use --frozen-lockfile - use dynamic concurrency group name with workflow prefix Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * 🔒 security (core): harden update checker cache and fetch logic - validate runtime value against allowed list when reading cache - sanitize current version before embedding in prompt context - move AbortController setup outside try block and use finally to clear timeout Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * 📦 new (landing): extract GitHubIcon component and improve accessibility - add reusable GitHubIcon Svelte component to replace inline SVG duplication - add skip-to-main-content link for keyboard navigation - add aria-label to primary nav element - add aria-hidden to decorative SVG icons Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * 🔧 update (landing): improve scrollbar styling and Firefox support - add scrollbar-width and scrollbar-color for Firefox compatibility - use CSS variable for scrollbar thumb hover color - remove quoted font family name for Inter Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * 🔧 update (landing): clarify QuickStart step 3 description Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ⚙️ setup (ci): streamline CI workflows by removing unused jobs * 🗑️ remove: delete pre-commit script for bun test * 🔧 update (ci): add build step for workspace packages * 🔧 update (dockerfile): upgrade bun version for builder and production stages * 🚀 release: bump version to 1.1.0 for all packages * 🔧 update (dockerfile): remove frozen-lockfile option from bun install * 📦 new: add dev:landing script for development of landing page * 📖 docs: update README with model names and licensing information * ⚙️ setup: update release action to v1.2.1 and change token secret * 📖 docs: update commit message guidelines for breaking changes * 🔧 update: enhance commit message validation for breaking changes --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent fcc597e commit df9eaf8

59 files changed

Lines changed: 1516 additions & 75 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/instructions/copilot.instructions.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Reference: https://github.com/wgtechlabs/clean-commit
1313
```text
1414
<emoji> <type>: <description>
1515
<emoji> <type> (<scope>): <description>
16+
<emoji> <type>!: <description>
17+
<emoji> <type>! (<scope>): <description>
1618
```
1719

1820
## The 9 Types
@@ -32,6 +34,7 @@ Reference: https://github.com/wgtechlabs/clean-commit
3234
## Rules
3335

3436
- Use lowercase for type
37+
- Use `!` immediately after type (no space) to signal a breaking change — only for `new`, `update`, `remove`, `security`
3538
- Use present tense ("add" not "added")
3639
- No period at the end
3740
- Keep description under 72 characters
@@ -47,3 +50,5 @@ Reference: https://github.com/wgtechlabs/clean-commit
4750
- `🧪 test: add unit tests for auth service`
4851
- `📖 docs: update installation instructions`
4952
- `🚀 release: version 1.0.0`
53+
- `📦 new!: completely redesign authentication system`
54+
- `🔧 update! (api): change response format for all endpoints`

.github/workflows/commit-lint.yml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
name: Commit Lint
2+
3+
on:
4+
pull_request:
5+
branches: [main, dev]
6+
push:
7+
branches: [main, dev]
8+
9+
permissions:
10+
contents: read
11+
pull-requests: write
12+
13+
jobs:
14+
lint-commits:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v4
18+
with:
19+
fetch-depth: 0
20+
21+
- name: Validate commit messages
22+
run: |
23+
# Clean Commit convention pattern
24+
# Format: <emoji> <type>[(<scope>)]: <description>
25+
PATTERN='^(📦|🔧|🗑️|🔒|⚙️|☕|🧪|📖|🚀) (new|update|remove|security|setup|chore|test|docs|release)( \([a-z0-9][a-z0-9-]*\))?: .{1,72}$'
26+
27+
if [ "${{ github.event_name }}" = "pull_request" ]; then
28+
COMMITS=$(git log --format="%s" "${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}")
29+
else
30+
GITHUB_EVENT_BEFORE="${{ github.event.before }}"
31+
GITHUB_EVENT_AFTER="${{ github.event.after }}"
32+
if [ "$GITHUB_EVENT_BEFORE" = "0000000000000000000000000000000000000000" ]; then
33+
# Initial push has no valid "before" SHA, so capture all reachable commits
34+
COMMITS=$(git log --format="%s" "$GITHUB_EVENT_AFTER")
35+
else
36+
COMMITS=$(git log --format="%s" "${GITHUB_EVENT_BEFORE}..${GITHUB_EVENT_AFTER}")
37+
fi
38+
fi
39+
40+
FAILED=0
41+
while IFS= read -r msg; do
42+
[ -z "$msg" ] && continue
43+
# Allow merge commits
44+
if echo "$msg" | grep -qE "^Merge "; then
45+
continue
46+
fi
47+
if ! echo "$msg" | grep -qP "$PATTERN"; then
48+
echo "✖ Invalid commit message: $msg"
49+
FAILED=1
50+
else
51+
echo "✔ Valid commit message: $msg"
52+
fi
53+
done <<< "$COMMITS"
54+
55+
if [ "$FAILED" -eq 1 ]; then
56+
echo ""
57+
echo "One or more commit messages do not follow the Clean Commit convention."
58+
echo "Format: <emoji> <type>[(<scope>)]: <description>"
59+
echo "Reference: https://github.com/wgtechlabs/clean-commit"
60+
exit 1
61+
fi

.github/workflows/container.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
name: Container Build
22

33
on:
4+
pull_request:
5+
branches: [main, dev]
6+
push:
7+
branches: [main, dev]
48
workflow_call:
59
workflow_dispatch:
10+
release:
11+
types: [published]
612

713
permissions:
814
contents: read

.github/workflows/landing.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Deploy Landing Page
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- 'src/landing/**'
8+
workflow_dispatch:
9+
10+
permissions:
11+
contents: read
12+
13+
concurrency:
14+
group: ${{ github.workflow }}-pages
15+
cancel-in-progress: true
16+
17+
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
22+
23+
- uses: oven-sh/setup-bun@3d267786b128fe76c2f16a390aa2448b815359f3 # v2
24+
with:
25+
bun-version: 1.2.x
26+
27+
- name: Install dependencies
28+
run: bun install --frozen-lockfile
29+
30+
- name: Build landing page
31+
run: bun run --cwd src/landing build
32+
33+
- name: Upload artifact
34+
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
35+
with:
36+
path: src/landing/dist
37+
38+
deploy:
39+
needs: build
40+
runs-on: ubuntu-latest
41+
permissions:
42+
pages: write
43+
id-token: write
44+
environment:
45+
name: github-pages
46+
url: ${{ steps.deployment.outputs.page_url }}
47+
steps:
48+
- name: Deploy to GitHub Pages
49+
id: deployment
50+
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4

.github/workflows/package.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
name: Package Build
22

33
on:
4+
pull_request:
5+
branches: [main, dev]
6+
push:
7+
branches: [main, dev]
48
workflow_call:
59
workflow_dispatch:
610
inputs:
711
dry-run:
812
description: 'Perform dry run without publishing'
913
type: boolean
1014
default: true
15+
release:
16+
types: [published]
1117

1218
permissions:
1319
contents: read
@@ -31,8 +37,11 @@ jobs:
3137
- name: Install dependencies
3238
run: bun install --frozen-lockfile
3339

40+
- name: Build workspace packages
41+
run: bun run build:packages
42+
3443
- name: Build & Publish Packages
35-
uses: wgtechlabs/package-build-flow-action@v2.0.0
44+
uses: wgtechlabs/package-build-flow-action@v2.0.1
3645
with:
3746
monorepo: 'true'
3847
workspace-detection: 'true'

.github/workflows/release.yml

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ on:
88

99
permissions:
1010
contents: write
11-
packages: write
12-
security-events: write
1311
pull-requests: write
1412

1513
jobs:
@@ -42,20 +40,8 @@ jobs:
4240
echo "changed=false" >> $GITHUB_OUTPUT
4341
fi
4442
45-
package:
46-
needs: check-version
47-
if: needs.check-version.outputs.changed == 'true'
48-
uses: ./.github/workflows/package.yml
49-
secrets: inherit
50-
51-
container:
52-
needs: check-version
53-
if: needs.check-version.outputs.changed == 'true'
54-
uses: ./.github/workflows/container.yml
55-
secrets: inherit
56-
5743
release:
58-
needs: [check-version, package, container]
44+
needs: check-version
5945
if: needs.check-version.outputs.changed == 'true'
6046
runs-on: ubuntu-latest
6147
steps:
@@ -64,9 +50,9 @@ jobs:
6450
fetch-depth: 0
6551

6652
- name: Create Release
67-
uses: wgtechlabs/release-build-flow-action@032b32cb5f6933e5912768c5b2e42c29389c2c95 # v1.0.0
53+
uses: wgtechlabs/release-build-flow-action@799974c8dec094fbe94a92b2764365d3a8f9ce5f # v1.2.1
6854
with:
69-
github-token: ${{ secrets.GITHUB_TOKEN }}
55+
github-token: ${{ secrets.GH_PAT }}
7056
monorepo: 'true'
7157
workspace-detection: 'true'
7258
package-manager: 'bun'

.husky/commit-msg

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/sh
2+
3+
bun "$(dirname "$0")/validate-commit-msg.mjs" "$1"

.husky/pre-commit

Whitespace-only changes.

.husky/validate-commit-msg.mjs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { readFileSync } from "fs";
2+
3+
const msgFile = process.argv[2];
4+
if (!msgFile) {
5+
console.error("Error: No commit message file path provided.");
6+
process.exit(1);
7+
}
8+
let raw;
9+
try {
10+
raw = readFileSync(msgFile, "utf8");
11+
} catch (err) {
12+
console.error(
13+
`Error: Could not read commit message file "${msgFile}": ${err.message}`,
14+
);
15+
process.exit(1);
16+
}
17+
const firstLine = raw.replace(/\r/g, "").split("\n")[0].trim();
18+
19+
// Allow merge and revert commits
20+
if (/^Merge /.test(firstLine) || /^Revert /.test(firstLine)) process.exit(0);
21+
22+
// Clean Commit convention pattern
23+
// Format: <emoji> <type>[!][(<scope>)]: <description>
24+
const pattern =
25+
/^(📦|🔧|🗑\uFE0F?|🔒|\uFE0F?||🧪|📖|🚀) (new|update|remove|security|setup|chore|test|docs|release)(!?)( \([a-z0-9][a-z0-9-]*\))?: .{1,72}$/u;
26+
27+
// Only new, update, remove, security may use the breaking change marker
28+
const breakingMatch = firstLine.match(pattern);
29+
if (breakingMatch) {
30+
const type = breakingMatch[2];
31+
const bang = breakingMatch[3];
32+
if (bang === '!' && !['new', 'update', 'remove', 'security'].includes(type)) {
33+
console.error('');
34+
console.error('✖ Breaking change marker (!) is only allowed for: new, update, remove, security');
35+
console.error('');
36+
process.exit(1);
37+
}
38+
}
39+
40+
if (!pattern.test(firstLine)) {
41+
console.error("");
42+
console.error("✖ Invalid commit message format.");
43+
console.error("");
44+
console.error(" Expected: <emoji> <type>[!][(<scope>)]: <description>");
45+
console.error("");
46+
console.error(" Use ! after type for breaking changes (new, update, remove, security only)");
47+
console.error("");
48+
console.error(" Types and emojis:");
49+
console.error(" 📦 new – new features, files, or capabilities");
50+
console.error(" 🔧 update – changes, refactoring, improvements");
51+
console.error(" 🗑️ remove – removing code, files, or dependencies");
52+
console.error(" 🔒 security – security fixes or patches");
53+
console.error(" ⚙️ setup – configs, CI/CD, tooling, build systems");
54+
console.error(" ☕ chore – maintenance, dependency updates");
55+
console.error(" 🧪 test – adding or updating tests");
56+
console.error(" 📖 docs – documentation changes");
57+
console.error(" 🚀 release – version releases");
58+
console.error("");
59+
console.error(" Examples:");
60+
console.error(" 📦 new: user authentication system");
61+
console.error(" 🔧 update (api): improve error handling");
62+
console.error(" ⚙️ setup (ci): configure github actions workflow");
63+
console.error(" 📦 new!: completely redesign authentication system");
64+
console.error(" 🔧 update! (api): change response format for all endpoints");
65+
console.error("");
66+
console.error(" Reference: https://github.com/wgtechlabs/clean-commit");
67+
console.error("");
68+
process.exit(1);
69+
}

AGENTS.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Reference: https://github.com/wgtechlabs/clean-commit
99
```text
1010
<emoji> <type>: <description>
1111
<emoji> <type> (<scope>): <description>
12+
<emoji> <type>!: <description>
13+
<emoji> <type>! (<scope>): <description>
1214
```
1315

1416
## The 9 Types
@@ -28,6 +30,7 @@ Reference: https://github.com/wgtechlabs/clean-commit
2830
## Rules
2931

3032
- Use lowercase for type
33+
- Use `!` immediately after type (no space) to signal a breaking change — only for `new`, `update`, `remove`, `security`
3134
- Use present tense ("add" not "added")
3235
- No period at the end
3336
- Keep description under 72 characters
@@ -43,3 +46,5 @@ Reference: https://github.com/wgtechlabs/clean-commit
4346
- `🧪 test: add unit tests for auth service`
4447
- `📖 docs: update installation instructions`
4548
- `🚀 release: version 1.0.0`
49+
- `📦 new!: completely redesign authentication system`
50+
- `🔧 update! (api): change response format for all endpoints`

0 commit comments

Comments
 (0)