Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
d00926c
chore(copilot): add GitHub Copilot skills from awesome-copilot
jwill824 Mar 19, 2026
4b8d689
chore(copilot): add session-logger hooks for Copilot CLI audit logging
jwill824 Mar 19, 2026
341302a
chore(vscode): add scenario-based task system with auto-stop terminal…
jwill824 Mar 20, 2026
0eb8d7c
fix(vscode): replace mobile-e2e task with per-platform iOS/Android E2…
jwill824 Mar 20, 2026
f1d877d
fix(vscode): fix Maestro Java PATH and improve sim/emu wait condition
jwill824 Mar 20, 2026
cf959f0
fix(maestro): add env.local credentials support for test flows
jwill824 Mar 20, 2026
7402a28
fix(vscode): fix simulator network by adding livereload and --host flags
jwill824 Mar 20, 2026
e857b23
fix(vscode): correct --livereload flag to --live-reload
jwill824 Mar 20, 2026
ea5b3b2
fix(vscode): replace --external with --host for cap run live-reload
jwill824 Mar 20, 2026
7981c30
fix(simulator): fix API URL unreachable from iOS simulator
jwill824 Mar 20, 2026
0af8b99
fix(simulator): fix CORS by passing LAN IP as NATIVE_APP_ORIGINS to b…
jwill824 Mar 20, 2026
caa53ac
fix(simulator): simplify iOS to use localhost, Android uses 10.0.2.2
jwill824 Mar 20, 2026
4b4bbc4
docs: update env vars and iOS/Android simulator setup
jwill824 Mar 20, 2026
57c2131
chore(tasks): shutdown existing iOS simulators before launching new one
jwill824 Mar 20, 2026
c346161
test(maestro): add login subflow; auth flows self-contained
jwill824 Mar 20, 2026
a801b59
test(maestro): dynamic test user setup/teardown via JS + backend test…
jwill824 Mar 20, 2026
4c56151
test(maestro): seed task in setup.js so feed-load/task-complete have …
jwill824 Mar 20, 2026
2a47252
fix(e2e): use HTML id attribute for Maestro selector on Mark complete…
jwill824 Mar 20, 2026
da57dd7
fix(e2e): use text: selector for Mark complete — matches accessibilit…
jwill824 Mar 20, 2026
0163961
fix(e2e): assert Reopen task, guaranteed teardown, dynamic test route…
jwill824 Mar 20, 2026
e02791b
feat(e2e): consolidate flows and add Apple Calendar integration test
jwill824 Mar 20, 2026
a27f199
refactor(e2e): adopt Maestro-native hooks and executionOrder
jwill824 Mar 20, 2026
0f92de0
fix(ios): add onTouchEnd to AccountMenu buttons and wait in integrati…
jwill824 Mar 21, 2026
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
58 changes: 58 additions & 0 deletions .github/hooks/session-logger/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
name: 'Session Logger'
description: 'Logs all Copilot coding agent session activity for audit and analysis'
tags: ['logging', 'audit', 'analytics']
---

# Session Logger Hook

Comprehensive logging for GitHub Copilot coding agent sessions, tracking session starts, ends, and user prompts for audit trails and usage analytics.

## Overview

This hook provides detailed logging of Copilot coding agent activity:
- Session start/end times with working directory context
- User prompt submission events
- Configurable log levels

## Features

- **Session Tracking**: Log session start and end events
- **Prompt Logging**: Record when user prompts are submitted
- **Structured Logging**: JSON format for easy parsing
- **Privacy Aware**: Configurable to disable logging entirely

## Installation

1. Copy this hook folder to your repository's `.github/hooks/` directory:
```bash
cp -r hooks/session-logger .github/hooks/
```

2. Create the logs directory:
```bash
mkdir -p logs/copilot
```

3. Ensure scripts are executable:
```bash
chmod +x .github/hooks/session-logger/*.sh
```

4. Commit the hook configuration to your repository's default branch

## Log Format

Session events are written to `logs/copilot/session.log` and prompt events to `logs/copilot/prompts.log` in JSON format:

```json
{"timestamp":"2024-01-15T10:30:00Z","event":"sessionStart","cwd":"/workspace/project"}
{"timestamp":"2024-01-15T10:35:00Z","event":"sessionEnd"}
```

## Privacy & Security

- Add `logs/` to `.gitignore` to avoid committing session data
- Use `LOG_LEVEL=ERROR` to only log errors
- Set `SKIP_LOGGING=true` environment variable to disable
- Logs are stored locally only
32 changes: 32 additions & 0 deletions .github/hooks/session-logger/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"version": 1,
"hooks": {
"sessionStart": [
{
"type": "command",
"bash": ".github/hooks/session-logger/log-session-start.sh",
"cwd": ".",
"timeoutSec": 5
}
],
"sessionEnd": [
{
"type": "command",
"bash": ".github/hooks/session-logger/log-session-end.sh",
"cwd": ".",
"timeoutSec": 5
}
],
"userPromptSubmitted": [
{
"type": "command",
"bash": ".github/hooks/session-logger/log-prompt.sh",
"cwd": ".",
"env": {
"LOG_LEVEL": "INFO"
},
"timeoutSec": 5
}
]
}
}
25 changes: 25 additions & 0 deletions .github/hooks/session-logger/log-prompt.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash

# Log session end event

set -euo pipefail

# Skip if logging disabled
if [[ "${SKIP_LOGGING:-}" == "true" ]]; then
exit 0
fi

# Read input from Copilot
INPUT=$(cat)

# Create logs directory if it doesn't exist
mkdir -p logs/copilot

# Extract timestamp
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

# Log session end
echo "{\"timestamp\":\"$TIMESTAMP\",\"event\":\"sessionEnd\"}" >> logs/copilot/session.log

echo "📝 Session end logged"
exit 0
25 changes: 25 additions & 0 deletions .github/hooks/session-logger/log-session-end.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash

# Log session end event

set -euo pipefail

# Skip if logging disabled
if [[ "${SKIP_LOGGING:-}" == "true" ]]; then
exit 0
fi

# Read input from Copilot
INPUT=$(cat)

# Create logs directory if it doesn't exist
mkdir -p logs/copilot

# Extract timestamp
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

# Log session end
echo "{\"timestamp\":\"$TIMESTAMP\",\"event\":\"sessionEnd\"}" >> logs/copilot/session.log

echo "📝 Session end logged"
exit 0
26 changes: 26 additions & 0 deletions .github/hooks/session-logger/log-session-start.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash

# Log session start event

set -euo pipefail

# Skip if logging disabled
if [[ "${SKIP_LOGGING:-}" == "true" ]]; then
exit 0
fi

# Read input from Copilot
INPUT=$(cat)

# Create logs directory if it doesn't exist
mkdir -p logs/copilot

# Extract timestamp and session info
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
CWD=$(pwd)

# Log session start (use jq for proper JSON encoding)
jq -Rn --arg timestamp "$TIMESTAMP" --arg cwd "$CWD" '{"timestamp":$timestamp,"event":"sessionStart","cwd":$cwd}' >> logs/copilot/session.log

echo "📝 Session logged"
exit 0
52 changes: 52 additions & 0 deletions .github/skills/context-map/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
name: context-map
description: 'Generate a map of all files relevant to a task before making changes'
---

# Context Map

Before implementing any changes, analyze the codebase and create a context map.

## Task

{{task_description}}

## Instructions

1. Search the codebase for files related to this task
2. Identify direct dependencies (imports/exports)
3. Find related tests
4. Look for similar patterns in existing code

## Output Format

```markdown
## Context Map

### Files to Modify
| File | Purpose | Changes Needed |
|------|---------|----------------|
| path/to/file | description | what changes |

### Dependencies (may need updates)
| File | Relationship |
|------|--------------|
| path/to/dep | imports X from modified file |

### Test Files
| Test | Coverage |
|------|----------|
| path/to/test | tests affected functionality |

### Reference Patterns
| File | Pattern |
|------|---------|
| path/to/similar | example to follow |

### Risk Assessment
- [ ] Breaking changes to public API
- [ ] Database migrations needed
- [ ] Configuration changes required
```

Do not proceed with implementation until this map is reviewed.
72 changes: 72 additions & 0 deletions .github/skills/conventional-commit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
name: conventional-commit
description: 'Prompt and workflow for generating conventional commit messages using a structured XML format. Guides users to create standardized, descriptive commit messages in line with the Conventional Commits specification, including instructions, examples, and validation.'
---

### Instructions

```xml
<description>This file contains a prompt template for generating conventional commit messages. It provides instructions, examples, and formatting guidelines to help users write standardized, descriptive commit messages in accordance with the Conventional Commits specification.</description>
```

### Workflow

**Follow these steps:**

1. Run `git status` to review changed files.
2. Run `git diff` or `git diff --cached` to inspect changes.
3. Stage your changes with `git add <file>`.
4. Construct your commit message using the following XML structure.
5. After generating your commit message, Copilot will automatically run the following command in your integrated terminal (no confirmation needed):

```bash
git commit -m "type(scope): description"
```

6. Just execute this prompt and Copilot will handle the commit for you in the terminal.

### Commit Message Structure

```xml
<commit-message>
<type>feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert</type>
<scope>()</scope>
<description>A short, imperative summary of the change</description>
<body>(optional: more detailed explanation)</body>
<footer>(optional: e.g. BREAKING CHANGE: details, or issue references)</footer>
</commit-message>
```

### Examples

```xml
<examples>
<example>feat(parser): add ability to parse arrays</example>
<example>fix(ui): correct button alignment</example>
<example>docs: update README with usage instructions</example>
<example>refactor: improve performance of data processing</example>
<example>chore: update dependencies</example>
<example>feat!: send email on registration (BREAKING CHANGE: email service required)</example>
</examples>
```

### Validation

```xml
<validation>
<type>Must be one of the allowed types. See <reference>https://www.conventionalcommits.org/en/v1.0.0/#specification</reference></type>
<scope>Optional, but recommended for clarity.</scope>
<description>Required. Use the imperative mood (e.g., "add", not "added").</description>
<body>Optional. Use for additional context.</body>
<footer>Use for breaking changes or issue references.</footer>
</validation>
```

### Final Step

```xml
<final-step>
<cmd>git commit -m "type(scope): description"</cmd>
<note>Replace with your constructed message. Include body and footer if needed.</note>
</final-step>
```
Loading
Loading