Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
69 changes: 69 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Bug report
description: Something broke the companion (or the privacy promise)
title: "[Bug] "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for filing a bug. If this is a **security / privacy** concern
(uploads, API keys, reading tool contents, writing other tools' configs),
please use [SECURITY.md](../SECURITY.md) instead of a public issue.
Comment on lines +9 to +11
- type: input
id: macos
attributes:
label: macOS version
placeholder: "14.5"
validations:
required: true
- type: input
id: swift
attributes:
label: Swift version (`swift --version`)
placeholder: "Apple Swift version 6.0"
validations:
required: true
- type: input
id: aihero
attributes:
label: AIhero version (`swift run AIhero --version` or bundled binary)
placeholder: "0.1.0"
validations:
required: false
- type: dropdown
id: codex
attributes:
label: Is Codex CLI installed and logged in?
options:
- "Yes"
- "No"
- "Not sure / N/A"
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
placeholder: |
1. …
2. …
3. …
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual behavior
validations:
required: true
- type: textarea
id: extras
attributes:
label: Extra context
description: Logs, screenshots, whether you used `swift run` or a packaged `.app`.
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Security / privacy report
url: https://github.com/DevVig/AIhero/security/advisories/new
about: Report uploads, API-key solicitation, or other privacy violations privately.
41 changes: 41 additions & 0 deletions .github/ISSUE_TEMPLATE/feature.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Feature idea
description: A fun, collectible idea — not a dashboard knob
title: "[Feature] "
labels: ["enhancement"]
body:
- type: markdown
attributes:
value: |
AIhero's north star is **"fun, not bloat."** Features that feel like an
admin console, telemetry panel, or settings explosion are out of scope.
Privacy constraints in [SECURITY.md](../SECURITY.md) still apply.
Comment on lines +9 to +11
- type: textarea
id: idea
attributes:
label: What's the idea?
description: Describe the delight, not the architecture dump.
validations:
required: true
- type: textarea
id: why
attributes:
label: Why does this fit a collectible companion?
placeholder: How does this make forging / unboxing / leveling more fun?
validations:
required: true
- type: checkboxes
id: privacy
attributes:
label: Privacy fit
options:
- label: This stays on-device (no AIhero server, no uploads)
required: true
- label: This does not require pasting an API key into the app
required: true
- label: This does not write into other tools' configs or parse their file contents
required: true
- type: textarea
id: extras
attributes:
label: Extra notes
description: Mockups, MagicPath refs, related issues — optional.
17 changes: 17 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## Summary

<!-- What changed and why (1–3 bullets). Fun, not bloat. -->

## Test plan

- [ ] `swift build`
- [ ] `swift test`
- [ ] `swift run AIhero --render /tmp/aihero-shots` (if UI changed)
- [ ] Manual smoke: forge / unbox / companion (if behavior changed)

## Privacy checklist

- [ ] No uploads / no AIhero server calls
- [ ] No API keys solicited or stored in the app
- [ ] No writing into other tools' configs (`~/.codex`, `~/.claude`, etc.)
- [ ] Activity reads stay consent-gated and mtime/presence-only (no file contents)
31 changes: 31 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: CI

on:
push:
branches: [main, master]
pull_request:
branches: [main, master]

jobs:
build-and-test:
name: Build & Test
runs-on: macos-15
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Select Xcode 16 (Swift 6)
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: "16.4"

- name: Show toolchain
run: |
xcodebuild -version
swift --version

- name: Build
run: swift build

- name: Test
run: swift test
58 changes: 58 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in the
AIhero community a harassment-free experience for everyone, regardless of age,
body size, visible or invisible disability, ethnicity, sex characteristics,
gender identity and expression, level of experience, education, socio-economic
status, nationality, personal appearance, race, caste, color, religion, or
sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment:

- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Focusing on what is best for the community
- Showing fun, curiosity, and craftsmanship — this is a collectible toy, not a
battlefield

Examples of unacceptable behavior:

- The use of sexualized language or imagery, and sexual attention or advances
of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting

## Enforcement Responsibilities

Project maintainers are responsible for clarifying and enforcing standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior they deem inappropriate, threatening, offensive, or
harmful.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the project in public spaces.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by opening a private GitHub security advisory or contacting the
maintainers via the repository. All complaints will be reviewed and investigated
promptly and fairly.

## Attribution

This Code of Conduct is adapted from the
[Contributor Covenant](https://www.contributor-covenant.org/), version 2.1.
58 changes: 58 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Contributing to AIhero

Thanks for wanting to play with the toy. AIhero is a **fun, on-device collectible** —
not a dashboard, not an admin console. When in doubt: fewer knobs, more delight.

## Hard rules (please read)

These are load-bearing product promises. PRs that break them will be declined:

- **Everything stays on the user's Mac.** No AIhero servers. No uploads.
- **No API keys in the app.** Art goes through the user's own Codex CLI login.
- **Activity sources are read-only** (mtime/presence only) and **consent-gated**.
- **Never write into another tool's config** (`~/.codex`, `~/.claude`, etc.).
- **Fun, not bloat.** Features should feel like a collectible companion.

Full rationale: [documentation/reference/HANDOFF.md](documentation/reference/HANDOFF.md).

## Dev loop

Requires **macOS 14+** and a **Swift 6** toolchain.

```bash
swift build
swift test
swift run AIhero
swift run AIhero --render /tmp/aihero-shots # offscreen visual QA → PNGs
Scripts/make_app.sh release # → dist/AIhero.app (unsigned OK)
```

Notes:

- `swift build` is the source of truth. SourceKit “cannot find type” noise after
adding a new Swift file is often index lag — rebuild before “fixing” it.
- `--render` shows placeholder glyphs for some native controls offscreen; that
is expected. Prefer eager stacks over `LazyVGrid` for surfaces you want in QA.
- Subprocess art generation is gated on production mode so tests/`--render`
never spawn a real Codex run.

## Documentation lifecycle

Non-trivial work:

1. Plan under `documentation/planned/[category]/`
2. Move to `documentation/active/` while implementing (keep active thin)
3. Move to `documentation/completed/[category]/` when done

Reference docs (no date prefix) live in `documentation/reference/`.

## Pull requests

- Keep PRs focused and small when you can.
- Run `swift test` (and `--render` if you touch UI).
- Fill out the PR template privacy checklist.
- Be kind — see [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).

## Security reports

See [SECURITY.md](SECURITY.md). Do not file public issues for vulnerabilities.
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Jonathan Borgwing / DevVig

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Loading
Loading