diff --git a/.agents/skills/tripit-exporter/LICENSE b/.agents/skills/tripit-exporter/LICENSE new file mode 100644 index 00000000..74830b55 --- /dev/null +++ b/.agents/skills/tripit-exporter/LICENSE @@ -0,0 +1,15 @@ +TripIt Export skill — attribution & license +============================================ + +This skill is adapted from Casey Grippi's "TripIt Export" skill. + +- Source: https://lobehub.com/skills/caseyg-caseys-claude-tripit-export +- Author: Casey Grippi (@caseyg) + +License (as stated by the upstream author): + + Personal use. Skills contain hardcoded assumptions (locations, accounts, + preferences) that you'd need to adapt for your own use. + +This material is redistributed here for personal use, with attribution to the +original author. Adapt it for your own accounts and preferences before use. diff --git a/.agents/skills/tripit-exporter/SKILL.md b/.agents/skills/tripit-exporter/SKILL.md new file mode 100644 index 00000000..6e079cb6 --- /dev/null +++ b/.agents/skills/tripit-exporter/SKILL.md @@ -0,0 +1,274 @@ +--- +name: tripit-exporter +description: Export all TripIt travel data (trips, flights, lodging, activities, cars, rail, cruises and more) to a single JSON file using TripIt's undocumented API v2. Use when the user asks to export, download, or back up their TripIt trips — e.g. "export tripit data", "export my trips from tripit", "download tripit trips", or /tripit-export. Requires a browser-automation plugin and an interactive TripIt login. +targets: + - copilot + - claude + - agent-skills +--- + +# TripIt Export + +Export all TripIt travel data (trips, flights, lodging, activities) to JSON +format using TripIt's undocumented API v2. + +## Trigger Phrases + +- "export tripit data" +- "export my trips from tripit" +- "download tripit trips" +- `/tripit-export` + +## Prerequisites + +- **dev-browser plugin**: Browser automation with persistent state. +- **TripIt account**: The user must be able to log in to tripit.com. + +## API Reference + +### Discovered Endpoints + +```text +# List upcoming trips (paginated) +GET /api/v2/list/trip?exclude_types=weather&page_size=50&past=false&traveler=true&page_num=1 + +# List past trips (paginated) +GET /api/v2/list/trip?exclude_types=weather&page_size=50&past=true&traveler=all&page_num=1 + +# Get full trip details (includes flights, lodging, activities) +GET /api/v2/get/trip/uuid/{trip-uuid}/include_objects/true?exclude_types=weather + +# User profile +GET /api/v2/get/profile +``` + +### Required request headers + +Send both headers on **every** API request: + +```text +Accept: application/json +X-Requested-With: XMLHttpRequest +``` + +> The `X-Requested-With: XMLHttpRequest` header is required. Without it, the v2 +> endpoints return `401 Unauthorized` even when a valid session cookie is +> present. + +### Response Structure + +**Trip List Response:** + +```json +{ + "timestamp": "...", + "page_num": "1", + "page_size": "50", + "max_page": "1", + "Trip": [] +} +``` + +**Trip Details Response:** + +```json +{ + "Trip": {}, + "AirObject": [], + "LodgingObject": [], + "ActivityObject": [], + "CarObject": [], + "RestaurantObject": [], + "NoteObject": [], + "TransportObject": [], + "RailObject": [], + "CruiseObject": [] +} +``` + +## Workflow + +### Step 1: Launch Browser and Authenticate + +Navigate to TripIt and have the user log in: + +```typescript +import { connect, waitForPageLoad } from "@/client.js"; + +const client = await connect("http://127.0.0.1:9222"); +const page = await client.page("tripit"); +await page.goto("https://www.tripit.com/app/trips"); +await waitForPageLoad(page); + +console.log("Please log in to TripIt..."); +``` + +**Tell the user to log in manually, then confirm when done.** + +### Step 2: Fetch All Trips + +After authentication, fetch upcoming and past trips with pagination: + +```typescript +async function fetchAllTrips(page, past: boolean): Promise { + const allTrips: any[] = []; + let pageNum = 1; + let maxPage = 1; + + do { + const params = new URLSearchParams({ + exclude_types: "weather", + page_size: "50", + past: String(past), + traveler: past ? "all" : "true", + page_num: String(pageNum) + }); + + const response = await page.evaluate(async (url) => { + const res = await fetch(url, { + headers: { + "Accept": "application/json", + "X-Requested-With": "XMLHttpRequest" + } + }); + return res.json(); + }, `/api/v2/list/trip?${params}`); + + if (response.Trip) { + const trips = Array.isArray(response.Trip) ? response.Trip : [response.Trip]; + allTrips.push(...trips); + } + + maxPage = parseInt(response.max_page || "1"); + pageNum++; + } while (pageNum <= maxPage); + + return allTrips; +} + +const upcomingTrips = await fetchAllTrips(page, false); +const pastTrips = await fetchAllTrips(page, true); +``` + +### Step 3: Fetch Full Trip Details + +For each trip, fetch complete details: + +```typescript +const tripDetails = {}; + +for (const trip of [...upcomingTrips, ...pastTrips]) { + const details = await page.evaluate(async (uuid) => { + const res = await fetch( + `/api/v2/get/trip/uuid/${uuid}/include_objects/true?exclude_types=weather`, + { + headers: { + "Accept": "application/json", + "X-Requested-With": "XMLHttpRequest" + } + } + ); + return res.json(); + }, trip.uuid); + + tripDetails[trip.uuid] = { + trip: details.Trip, + flights: details.AirObject || [], + lodging: details.LodgingObject || [], + activities: details.ActivityObject || [], + cars: details.CarObject || [], + restaurants: details.RestaurantObject || [], + notes: details.NoteObject || [], + transport: details.TransportObject || [], + rail: details.RailObject || [], + cruise: details.CruiseObject || [] + }; + + // Rate limiting + await page.waitForTimeout(500); +} +``` + +### Step 4: Generate Final Export + +```typescript +const exportData = { + exportDate: new Date().toISOString(), + summary: { + upcomingTrips: upcomingTrips.length, + pastTrips: pastTrips.length, + totalTrips: upcomingTrips.length + pastTrips.length + }, + trips: Object.entries(tripDetails).map(([uuid, details]) => ({ + uuid, + name: details.trip?.display_name, + startDate: details.trip?.start_date, + endDate: details.trip?.end_date, + primaryLocation: details.trip?.primary_location, + ...details + })) +}; + +const outputPath = `tripit-export-${new Date().toISOString().split("T")[0]}.json`; +writeFileSync(outputPath, JSON.stringify(exportData, null, 2)); +``` + +## Output Format + +```json +{ + "exportDate": "2026-01-13T...", + "summary": { + "upcomingTrips": 2, + "pastTrips": 45, + "totalTrips": 47 + }, + "trips": [ + { + "uuid": "...", + "name": "Trip Name", + "startDate": "2026-01-15", + "endDate": "2026-01-20", + "primaryLocation": "Tokyo, Japan", + "trip": {}, + "flights": [], + "lodging": [], + "activities": [], + "cars": [], + "restaurants": [], + "notes": [], + "transport": [], + "rail": [], + "cruise": [] + } + ] +} +``` + +## Error Handling + +- **401 Unauthorized**: Either the session expired, or the + `X-Requested-With: XMLHttpRequest` header is missing. Confirm the header is + set on every request; if it is, re-authenticate by navigating to the TripIt + login page. +- **Rate limiting**: Add delays between API calls if receiving `429` errors. +- **Empty responses**: Some trips may have no flights/lodging — this is normal. + +## Notes + +- TripIt API v2 is undocumented and may change without notice. +- Authentication is session-based (cookies) — no API key required. +- Large trip histories may take several minutes to export. +- The `exclude_types=weather` param reduces response size. +- The `X-Requested-With: XMLHttpRequest` header is required on every request; + without it the v2 endpoints return `401` even with a valid session cookie. + +## Attribution + +Adapted from Casey Grippi's `tripit-export` skill. Redistributed for personal +use. Skills contain hardcoded assumptions (locations, accounts, preferences) +that you may need to adapt for your own use. See +[`LICENSE`](LICENSE) and the repository +[`THIRD_PARTY_NOTICES.md`](../../../apm_modules/DevSecNinja/ai-toolkit/THIRD_PARTY_NOTICES.md). + +- **Source:** diff --git a/.github/agents/ada.agent.md b/.github/agents/ada.agent.md index 0ea2dab0..3a1cbe0d 100644 --- a/.github/agents/ada.agent.md +++ b/.github/agents/ada.agent.md @@ -5,7 +5,8 @@ tools: [web] user-invocable: true argument-hint: "What we're working on in the vault — a question, a note to ingest, or a thread to pick up" --- -You are **Ada** (after Ada Lovelace), a Second Brain librarian and thinking partner. You tend the user's knowledge vault — ingest, distill, link, lint, and answer from what's known — and you think *with* the user rather than just fetching for them. + +You are **Ada** (after Ada Lovelace), a Second Brain librarian and thinking partner. You tend the user's knowledge vault — ingest, distill, link, lint, and answer from what's known — and you think _with_ the user rather than just fetching for them. ## Identity (SOUL) @@ -30,7 +31,7 @@ You are **Ada** (after Ada Lovelace), a Second Brain librarian and thinking part ## Defaults - Default vault location: `OneDrive/Documents/SecondBrain` (adapt if the user's vault lives elsewhere). -- Follow the vault's own operational `AGENTS.md` for ingest / query / lint and the claims schema, plus `_meta/conventions.md`. Those govern *how the vault works*; this agent governs *how Ada shows up*. +- Follow the vault's own operational `AGENTS.md` for ingest / query / lint and the claims schema, plus `_meta/conventions.md`. Those govern _how the vault works_; this agent governs _how Ada shows up_. - **Memory:** read `_meta/Ada/MEMORY.md` for durable facts; propose appends, don't silently rewrite. - **Dreams:** `_meta/Ada/DREAMS.md` holds longer-horizon ideas to revisit. diff --git a/.github/agents/dutch-housing-advisor.agent.md b/.github/agents/dutch-housing-advisor.agent.md index 02b9e219..11371a66 100644 --- a/.github/agents/dutch-housing-advisor.agent.md +++ b/.github/agents/dutch-housing-advisor.agent.md @@ -5,6 +5,7 @@ tools: [web] user-invocable: true argument-hint: "Buy/rent goal, city or region, budget, must-haves, commute, timeline" --- + You are a Dutch real estate agent and housing search advisor. You help users find a suitable home in the Netherlands by combining practical market knowledge, careful questioning, current online research, and clear explanations of Dutch buying and renting practices. You are familiar with the Dutch housing market, Funda and other listing platforms, makelaars, NVM-style listing conventions, bidding norms, financing constraints, buyer costs, VvE documents, erfpacht, energy labels, WOZ values, Kadaster context, NHG, transfer tax, rental rules, neighborhood due diligence, and the typical purchase process from search to notary. diff --git a/.github/agents/sast-sca-security-analyzer.agent.md b/.github/agents/sast-sca-security-analyzer.agent.md index 08373298..258bbac0 100644 --- a/.github/agents/sast-sca-security-analyzer.agent.md +++ b/.github/agents/sast-sca-security-analyzer.agent.md @@ -2,7 +2,7 @@ description: "Use when: performing SAST (Static Application Security Testing), SCA (Software Composition Analysis), scanning source code or binaries for security flaws, auditing third-party dependency vulnerabilities, checking policy compliance, generating structured security reports, identifying CWE-mapped flaws with file/line precision, reviewing open-source license risk, or producing CI/CD-gate security findings." name: "sast-sca-security-analyzer" tools: ["search/codebase", "search", "edit/editFiles", "web/fetch", "read/terminalLastCommand"] -model: "Claude Sonnet 5" +model: "Claude Sonnet 4.6" argument-hint: "Describe what to scan (e.g. 'scan src/ for SAST flaws', 'SCA audit of package.json', 'full SAST+SCA on the authentication module', 'policy compliance check for PCI-DSS')" --- diff --git a/.github/hooks/scripts/ai-toolkit/scripts/tool-guardian/guard-tool.sh b/.github/hooks/scripts/ai-toolkit/scripts/tool-guardian/guard-tool.sh index f1408abd..1385b172 100755 --- a/.github/hooks/scripts/ai-toolkit/scripts/tool-guardian/guard-tool.sh +++ b/.github/hooks/scripts/ai-toolkit/scripts/tool-guardian/guard-tool.sh @@ -28,24 +28,24 @@ MODE="${GUARD_MODE:-block}" LOG_DIR="${TOOL_GUARD_LOG_DIR:-.github/logs/copilot/tool-guardian}" TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") -mkdir -p "$LOG_DIR" -LOG_FILE="$LOG_DIR/guard.log" +mkdir -p "${LOG_DIR}" +LOG_FILE="${LOG_DIR}/guard.log" # Extract tool name and input text TOOL_NAME="" TOOL_INPUT="" if command -v jq &>/dev/null; then - TOOL_NAME=$(printf '%s' "$INPUT" | jq -r '.toolName // empty' 2>/dev/null || echo "") - TOOL_INPUT=$(printf '%s' "$INPUT" | jq -r '.toolInput // empty' 2>/dev/null || echo "") + TOOL_NAME=$(printf '%s' "${INPUT}" | jq -r '.toolName // empty' 2>/dev/null || echo "") + TOOL_INPUT=$(printf '%s' "${INPUT}" | jq -r '.toolInput // empty' 2>/dev/null || echo "") fi # Fallback: extract with grep/sed if jq unavailable or fields empty -if [[ -z "$TOOL_NAME" ]]; then - TOOL_NAME=$(printf '%s' "$INPUT" | grep -oE '"toolName"\s*:\s*"[^"]*"' | head -1 | sed 's/.*"toolName"\s*:\s*"//;s/"//') +if [[ -z "${TOOL_NAME}" ]]; then + TOOL_NAME=$(printf '%s' "${INPUT}" | grep -oE '"toolName"\s*:\s*"[^"]*"' | head -1 | sed 's/.*"toolName"\s*:\s*"//;s/"//') fi -if [[ -z "$TOOL_INPUT" ]]; then - TOOL_INPUT=$(printf '%s' "$INPUT" | grep -oE '"toolInput"\s*:\s*"[^"]*"' | head -1 | sed 's/.*"toolInput"\s*:\s*"//;s/"//') +if [[ -z "${TOOL_INPUT}" ]]; then + TOOL_INPUT=$(printf '%s' "${INPUT}" | grep -oE '"toolInput"\s*:\s*"[^"]*"' | head -1 | sed 's/.*"toolInput"\s*:\s*"//;s/"//') fi # Combine for pattern matching @@ -54,15 +54,15 @@ COMBINED="${TOOL_NAME} ${TOOL_INPUT}" # Parse allowlist ALLOWLIST=() if [[ -n "${TOOL_GUARD_ALLOWLIST:-}" ]]; then - IFS=',' read -ra ALLOWLIST <<<"$TOOL_GUARD_ALLOWLIST" + IFS=',' read -ra ALLOWLIST <<<"${TOOL_GUARD_ALLOWLIST}" fi is_allowlisted() { local text="$1" for pattern in "${ALLOWLIST[@]}"; do - pattern=$(printf '%s' "$pattern" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') - [[ -z "$pattern" ]] && continue - if [[ "$text" == *"$pattern"* ]]; then + pattern=$(printf '%s' "${pattern}" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + [[ -z "${pattern}" ]] && continue + if [[ "${text}" == *"${pattern}"* ]]; then return 0 fi done @@ -70,9 +70,11 @@ is_allowlisted() { } # Check allowlist early — if the combined text matches, skip all scanning -if [[ ${#ALLOWLIST[@]} -gt 0 ]] && is_allowlisted "$COMBINED"; then +# is_allowlisted is used as a boolean guard, so suppressing set -e here is intentional. +# shellcheck disable=SC2310 +if [[ ${#ALLOWLIST[@]} -gt 0 ]] && is_allowlisted "${COMBINED}"; then printf '{"timestamp":"%s","event":"guard_skipped","reason":"allowlisted","tool":"%s"}\n' \ - "$TIMESTAMP" "$TOOL_NAME" >>"$LOG_FILE" + "${TIMESTAMP}" "${TOOL_NAME}" >>"${LOG_FILE}" exit 0 fi @@ -131,17 +133,18 @@ for entry in "${PATTERNS[@]}"; do regex="${rest%%:::*}" suggestion="${rest#*:::}" - if printf '%s\n' "$COMBINED" | grep -qiE "$regex" 2>/dev/null; then - local_match=$(printf '%s\n' "$COMBINED" | grep -oiE "$regex" 2>/dev/null | head -1) + if printf '%s\n' "${COMBINED}" | grep -qiE "${regex}" 2>/dev/null; then + local_match=$(printf '%s\n' "${COMBINED}" | grep -oiE "${regex}" 2>/dev/null | head -1) THREATS+=("${category} ${severity} ${local_match} ${suggestion}") THREAT_COUNT=$((THREAT_COUNT + 1)) fi done # Output and logging -if [[ $THREAT_COUNT -gt 0 ]]; then +escaped_tool_name=$(json_escape "${TOOL_NAME}") +if [[ ${THREAT_COUNT} -gt 0 ]]; then echo "" - echo "🛡️ Tool Guardian: $THREAT_COUNT threat(s) detected in '$TOOL_NAME' invocation" + echo "🛡️ Tool Guardian: ${THREAT_COUNT} threat(s) detected in '${TOOL_NAME}' invocation" echo "" printf " %-24s %-10s %-40s %s\n" "CATEGORY" "SEVERITY" "MATCH" "SUGGESTION" printf " %-24s %-10s %-40s %s\n" "--------" "--------" "-----" "----------" @@ -150,20 +153,24 @@ if [[ $THREAT_COUNT -gt 0 ]]; then FINDINGS_JSON="[" FIRST=true for threat in "${THREATS[@]}"; do - IFS=$'\t' read -r category severity match suggestion <<<"$threat" + IFS=$'\t' read -r category severity match suggestion <<<"${threat}" # Truncate match for display - display_match="$match" + display_match="${match}" if [[ ${#match} -gt 38 ]]; then display_match="${match:0:35}..." fi - printf " %-24s %-10s %-40s %s\n" "$category" "$severity" "$display_match" "$suggestion" + printf " %-24s %-10s %-40s %s\n" "${category}" "${severity}" "${display_match}" "${suggestion}" - if [[ "$FIRST" != "true" ]]; then + if [[ "${FIRST}" != "true" ]]; then FINDINGS_JSON+="," fi FIRST=false - FINDINGS_JSON+="{\"category\":\"$(json_escape "$category")\",\"severity\":\"$(json_escape "$severity")\",\"match\":\"$(json_escape "$match")\",\"suggestion\":\"$(json_escape "$suggestion")\"}" + esc_category=$(json_escape "${category}") + esc_severity=$(json_escape "${severity}") + esc_match=$(json_escape "${match}") + esc_suggestion=$(json_escape "${suggestion}") + FINDINGS_JSON+="{\"category\":\"${esc_category}\",\"severity\":\"${esc_severity}\",\"match\":\"${esc_match}\",\"suggestion\":\"${esc_suggestion}\"}" done FINDINGS_JSON+="]" @@ -171,9 +178,9 @@ if [[ $THREAT_COUNT -gt 0 ]]; then # Write structured log entry printf '{"timestamp":"%s","event":"threats_detected","mode":"%s","tool":"%s","threat_count":%d,"threats":%s}\n' \ - "$TIMESTAMP" "$MODE" "$(json_escape "$TOOL_NAME")" "$THREAT_COUNT" "$FINDINGS_JSON" >>"$LOG_FILE" + "${TIMESTAMP}" "${MODE}" "${escaped_tool_name}" "${THREAT_COUNT}" "${FINDINGS_JSON}" >>"${LOG_FILE}" - if [[ "$MODE" == "block" ]]; then + if [[ "${MODE}" == "block" ]]; then echo "🚫 Operation blocked: resolve the threats above or adjust TOOL_GUARD_ALLOWLIST." echo " Set GUARD_MODE=warn to log without blocking." exit 1 @@ -183,7 +190,7 @@ if [[ $THREAT_COUNT -gt 0 ]]; then else # Log clean result printf '{"timestamp":"%s","event":"guard_passed","mode":"%s","tool":"%s"}\n' \ - "$TIMESTAMP" "$MODE" "$(json_escape "$TOOL_NAME")" >>"$LOG_FILE" + "${TIMESTAMP}" "${MODE}" "${escaped_tool_name}" >>"${LOG_FILE}" fi exit 0 diff --git a/.github/instructions/devsecninja-conventions.instructions.md b/.github/instructions/devsecninja-conventions.instructions.md index b5e933be..0b71d778 100644 --- a/.github/instructions/devsecninja-conventions.instructions.md +++ b/.github/instructions/devsecninja-conventions.instructions.md @@ -65,6 +65,19 @@ and prefer reuse over duplication. applicable so Renovate can bump it. - Reusable workflows in `DevSecNinja/.github` MUST NOT default package/tool version inputs — declare them `required: true` so the caller owns the version. +- Dependencies: when adding or updating a package, check for and use the latest + stable release rather than scaffolding on — or leaving deps at — outdated + versions. Let Renovate keep them current thereafter. +- Dependency provenance: prefer first-party/official sources (the vendor's own + package or feed) over third-party or community-maintained wrappers. Before + introducing a community-owned package, devcontainer feature, or action, + evaluate its trustworthiness (maintainer, adoption, activity); when in doubt, + install from the official source (e.g. via a script) instead. +- Pin versions precisely: pin every external dependency, tool, and action to an + exact version — prefer a full commit SHA where the ecosystem supports it (e.g. + GitHub Actions) — and let Renovate manage the bumps. Avoid floating refs like + `latest`, `main`, or unpinned ranges. Consuming repos pin the tool versions + they use (e.g. in `mise.toml`) rather than relying on a central default. - Security: never commit plaintext secrets. Use SOPS, Vault, or GitHub Secrets. ## Tooling and files diff --git a/.github/instructions/writing-style.instructions.md b/.github/instructions/writing-style.instructions.md new file mode 100644 index 00000000..1cf57696 --- /dev/null +++ b/.github/instructions/writing-style.instructions.md @@ -0,0 +1,38 @@ +--- +description: "Human-facing writing style for AI agents: avoid AI tells like 'So' sentence openers and em-dash/spaced-hyphen pauses, and default to a restrained, low-emoji tone." +applyTo: "**" +--- + +# Writing Style + +Rules for **human-facing prose** that an agent writes or drafts: LinkedIn and +social posts, documentation, commit and PR descriptions, emails, chat messages, +and any narrative reply to the user. They do not change code, identifiers, or +literal content the user asked to keep verbatim. + +The goal is writing that reads as if a person wrote it, not a language model. +Several common patterns are dead giveaways of AI-generated text; avoid them. + +## Avoid these AI tells + +- **No "So" (or "So,") as a sentence opener.** Start the sentence with its + actual subject. "So I built one." becomes "I built one." +- **No em-dashes or spaced-hyphen pauses as connectors.** An em-dash (`—`) or a + space-hyphen-space used to tack on a clause or a dramatic pause reads as + machine-written. Rework into clean sentences, or use a comma, colon, or full + stop instead. + - Fine to keep: hyphens inside compound words (`enterprise-ready`, + `start-stop`, `maintenance-only`) and in code, cron, or tag examples. + - Not fine: "I wanted both — driven by tags." Prefer "I wanted both, driven + by tags." or two sentences. +- **Restrained, low-emoji tone by default.** Skip over-the-top, emoji-filled + copy unless the user explicitly asks for it. Prefer at most one or two emoji, + or none. Let the substance carry the post. + +## General guidance + +- Lead with the concrete point, not throat-clearing ("In today's fast-paced + world…", "I'm excited to share…"). +- Prefer short, direct sentences over long ones stitched together with dashes. +- When the user gives explicit tone or format instructions, those win over these + defaults. diff --git a/.github/mcp.json b/.github/mcp.json new file mode 100644 index 00000000..9ea068bb --- /dev/null +++ b/.github/mcp.json @@ -0,0 +1,21 @@ +{ + "mcpServers": { + "github-mcp-server": { + "type": "http", + "url": "https://api.githubcopilot.com/mcp/", + "tools": [ + "*" + ], + "id": "", + "headers": {} + }, + "microsoft-learn": { + "type": "http", + "url": "https://learn.microsoft.com/api/mcp", + "tools": [ + "*" + ], + "id": "" + } + } +} \ No newline at end of file diff --git a/.github/prompts/coding-copilot-onboarding.prompt.md b/.github/prompts/coding-copilot-onboarding.prompt.md index 9264e97b..a1133b2e 100644 --- a/.github/prompts/coding-copilot-onboarding.prompt.md +++ b/.github/prompts/coding-copilot-onboarding.prompt.md @@ -31,7 +31,7 @@ Add the following high level details about the codebase to reduce the amount of - A summary of what the repository does. - High level repository information, such as the size of the repo, the type of the project, the languages, frameworks, or target runtimes in use. - + Add information about how to build and validate changes so the agent does not need to search and find it each time. @@ -46,21 +46,21 @@ Add information about how to build and validate changes so the agent does not ne - When you find a sequence of commands that work for a particular purpose, document them in detail. - Use language to indicate when something should always be done. For example: "always run npm install before building". - Record any validation steps from documentation. - + List key facts about the layout and architecture of the codebase to help the agent find where to make changes with minimal searching. - A description of the major architectural elements of the project, including the relative paths to the main project files, the location -of configuration files for linting, compilation, testing, and preferences. + of configuration files for linting, compilation, testing, and preferences. - A description of the checks run prior to check in, including any GitHub workflows, continuous integration builds, or other validation pipelines. - Document the steps so that the agent can replicate these itself. - Any explicit validation steps that the agent can consider to have further confidence in its changes. - Dependencies that aren't obvious from the layout or file structure. - Finally, fill in any remaining space with detailed lists of the following, in order of priority: the list of files in the repo root, the -contents of the README, the contents of any key source files, the list of files in the next level down of directories, giving priority to the more structurally important and snippets of code from key source files, such as the one containing the main method. - - + contents of the README, the contents of any key source files, the list of files in the next level down of directories, giving priority to the more structurally important and snippets of code from key source files, such as the one containing the main method. + + - Perform a comprehensive inventory of the codebase. Search for and view: diff --git a/.github/prompts/home-assistant-automation-renamer.prompt.md b/.github/prompts/home-assistant-automation-renamer.prompt.md index 9e04a76b..fc9cb512 100644 --- a/.github/prompts/home-assistant-automation-renamer.prompt.md +++ b/.github/prompts/home-assistant-automation-renamer.prompt.md @@ -21,15 +21,15 @@ You are reviewing a Home Assistant automations.yaml file. For each automation, rewrite: 1. alias (title) -• Max 10 words -• Clear, simple, no technical jargon -• Understandable by someone with no Home Assistant knowledge + • Max 10 words + • Clear, simple, no technical jargon + • Understandable by someone with no Home Assistant knowledge 2. description -• Max 4 short lines -• Plain, everyday language -• Explain what happens, when, and why, from a user’s perspective -• Avoid technical terms like trigger, entity, service, state, automation + • Max 4 short lines + • Plain, everyday language + • Explain what happens, when, and why, from a user’s perspective + • Avoid technical terms like trigger, entity, service, state, automation Rules • Do not change any logic, triggers, conditions, or actions diff --git a/apm.lock.yaml b/apm.lock.yaml index cf08e439..a5cc7a0a 100644 --- a/apm.lock.yaml +++ b/apm.lock.yaml @@ -1,13 +1,14 @@ lockfile_version: '1' -generated_at: '2026-06-30T18:09:24.047369+00:00' -apm_version: 0.22.0 +generated_at: '2026-11-01T05:28:49.417275+00:00' +apm_version: 0.35.0 dependencies: -- repo_url: DevSecNinja/ai-toolkit +- repo_url: devsecninja/ai-toolkit + materialization_repo_url: DevSecNinja/ai-toolkit name: ai-toolkit host: github.com - resolved_commit: 495be121b2c0d26b41de733c2bb008967c677ffb - resolved_ref: v0.6.2 - version: 0.6.2 + resolved_commit: 2491cedec727e722a7751ff516ae7b7c95de922b + resolved_ref: 2491cedec727e722a7751ff516ae7b7c95de922b + version: 0.8.0 package_type: apm_package deployed_files: - .agents/skills/commit-and-release @@ -36,12 +37,16 @@ dependencies: - .agents/skills/obsidian/references/PROPERTIES.md - .agents/skills/ooo-task-handoff-planner - .agents/skills/ooo-task-handoff-planner/SKILL.md + - .agents/skills/tripit-exporter + - .agents/skills/tripit-exporter/LICENSE + - .agents/skills/tripit-exporter/SKILL.md - .github/agents/ada.agent.md - .github/agents/dutch-housing-advisor.agent.md - .github/agents/personal-assistant.agent.md - .github/hooks/ai-toolkit-tool-guardian.json - .github/hooks/scripts/ai-toolkit/scripts/tool-guardian/guard-tool.sh - .github/instructions/devsecninja-conventions.instructions.md + - .github/instructions/writing-style.instructions.md - .github/prompts/coding-copilot-onboarding.prompt.md - .github/prompts/home-assistant-automation-renamer.prompt.md - .github/prompts/home-assistant-notification-optimizer.prompt.md @@ -62,16 +67,19 @@ dependencies: .agents/skills/obsidian/references/FUNCTIONS_REFERENCE.md: sha256:208fd63aead9bca1975626fea52605e6ab9434dc0529d923feb36b18b8877d3b .agents/skills/obsidian/references/PROPERTIES.md: sha256:b7948ee92fa8d9a384eb7a5f53c6df1c25e6a2e217e626953006bf2f030de81e .agents/skills/ooo-task-handoff-planner/SKILL.md: sha256:8886cdf1b9effe8a877e890d09fa54281ab680516a3837f0b24b0110d7c4d8b9 - .github/agents/ada.agent.md: sha256:d1d09f2f5e7880bfe8a434d4eeba357a97d863435009d39596ea27cf9a29224a - .github/agents/dutch-housing-advisor.agent.md: sha256:89c5e2b6fe6d20d9c8ba7db59dc91318adeebe1d80f0b97c8e6f2e4065d4d8f7 + .agents/skills/tripit-exporter/LICENSE: sha256:ad7e683b837ca04d9965bb5f1d79b3874c5e0ba1f2101f6090c3e74c09d7e7d1 + .agents/skills/tripit-exporter/SKILL.md: sha256:139cfc53f81169a3eaab96bf1dc58891aca8d17c838b26db104a0a7eaf29f62f + .github/agents/ada.agent.md: sha256:92c30af29bd4e8d77d66afc06da40db240c61dbfbdd19eb8d25b4793b045fedb + .github/agents/dutch-housing-advisor.agent.md: sha256:ff7237b06a8d536daebf7dcffba32772a4dc913a36d1358bf8090516e4e21c6c .github/agents/personal-assistant.agent.md: sha256:a48a53144bfc4bc62d2a20f2a984f1fb55ad9ec98d30dfeccff0276e86740b65 .github/hooks/ai-toolkit-tool-guardian.json: sha256:ac518c3b22487e2ab72a2624262f7eb0739874853be30cf0db6184ff58d01e0b - .github/hooks/scripts/ai-toolkit/scripts/tool-guardian/guard-tool.sh: sha256:f74d1860c92308da65d39576e3cf36413942084f51345fd29e63b55bf0ae5d18 - .github/instructions/devsecninja-conventions.instructions.md: sha256:70f5a0e9782f00bcce24a453f37eb1e239584360e3f0f2dfe9cf2e5721d2be3e - .github/prompts/coding-copilot-onboarding.prompt.md: sha256:68b159cdc1d1b151bb1f6c507de6bd6c2ef51d3d119b851aba69bf250252eacf - .github/prompts/home-assistant-automation-renamer.prompt.md: sha256:fe65b8df8184dd21fe84e6d9b9873fa2ef407553d5f7bbe8c9ad50fb3b3bc2b2 + .github/hooks/scripts/ai-toolkit/scripts/tool-guardian/guard-tool.sh: sha256:d500ad6b087dd2653d49590fc4926d21eaff66445f3057290808b63ea9440384 + .github/instructions/devsecninja-conventions.instructions.md: sha256:4dce4f46d59178dfebe9bd56b755aa08e6e1b3de46debe03b463e903301dbd2c + .github/instructions/writing-style.instructions.md: sha256:4d3700565fafac3fa5f2a6ce8f7110b4716a81f44990bb71ccfd3f51d599452e + .github/prompts/coding-copilot-onboarding.prompt.md: sha256:35e9058ff1181c9bd4612c4c2c216a2379813212e7e4db5462723aeeb12825f3 + .github/prompts/home-assistant-automation-renamer.prompt.md: sha256:46d8cb31d75f4ff73b1ace176ad52b523d5cf8feb6d8f9cbcf8e9b2ee74112f8 .github/prompts/home-assistant-notification-optimizer.prompt.md: sha256:bef7b8a47605fd61dcdd6eb1e60b8294e9f25f5bf2a60662e1cfa7a8c7e2b64a - content_hash: sha256:2fde856453f0a778024f0b005dcd76038501708cab547503138941d30bb0995d + content_hash: sha256:a6e0b0da2e23f3d34fb9af338d39c1550e89dc65f53b9f27d2a3d579ae96db32 - repo_url: github/awesome-copilot name: awesome-copilot-accessibility host: github.com @@ -280,6 +288,493 @@ dependencies: deployed_file_hashes: .github/agents/task-planner.agent.md: sha256:396e333df4318d590a8b07f960a61361169689d68896731149ea1f5a11ddc8fd content_hash: sha256:868b1c2b411f4857a13f5fe32279589a836ed6d7c4b257d5ba1d5af0d1546c6a +deployments: +- kind: project-relative + target: copilot + value: .agents/skills/ooo-task-handoff-planner + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: copilot + value: .agents/skills/ooo-task-handoff-planner/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:8886cdf1b9effe8a877e890d09fa54281ab680516a3837f0b24b0110d7c4d8b9 +- kind: project-relative + target: copilot + value: .agents/skills/tripit-exporter + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: copilot + value: .agents/skills/tripit-exporter/LICENSE + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:ad7e683b837ca04d9965bb5f1d79b3874c5e0ba1f2101f6090c3e74c09d7e7d1 +- kind: project-relative + target: copilot + value: .agents/skills/tripit-exporter/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:139cfc53f81169a3eaab96bf1dc58891aca8d17c838b26db104a0a7eaf29f62f +- kind: project-relative + target: copilot + value: .github/agents/accessibility.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/accessibility.agent.md + active_owner: github/awesome-copilot/agents/accessibility.agent.md + content_hash: sha256:739ed64a0ef2e7f560ef16329e7f6d7fedfdfbcc3f00382a926d33f978e614d0 +- kind: project-relative + target: copilot + value: .github/agents/ada.agent.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:92c30af29bd4e8d77d66afc06da40db240c61dbfbdd19eb8d25b4793b045fedb +- kind: project-relative + target: copilot + value: .github/agents/adr-generator.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/adr-generator.agent.md + active_owner: github/awesome-copilot/agents/adr-generator.agent.md + content_hash: sha256:abbf07c6a768a21baa94a1aed858510c8038cb89866461d47ab64817e9f347ac +- kind: project-relative + target: copilot + value: .github/agents/devops-expert.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/devops-expert.agent.md + active_owner: github/awesome-copilot/agents/devops-expert.agent.md + content_hash: sha256:63197c5250702760e79fb3ccb4e2b154b1a52b41ac62e7d45ae2def6eea23952 +- kind: project-relative + target: copilot + value: .github/agents/dutch-housing-advisor.agent.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:ff7237b06a8d536daebf7dcffba32772a4dc913a36d1358bf8090516e4e21c6c +- kind: project-relative + target: copilot + value: .github/agents/github-actions-expert.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/github-actions-expert.agent.md + active_owner: github/awesome-copilot/agents/github-actions-expert.agent.md + content_hash: sha256:9a113142559959683041c85c094ca32541fa7e0db42d3510acf6d79a68bbb597 +- kind: project-relative + target: copilot + value: .github/agents/linkedin-post-writer.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/linkedin-post-writer.agent.md + active_owner: github/awesome-copilot/agents/linkedin-post-writer.agent.md + content_hash: sha256:1a6c8505fb43e6636af78914728c87283d5908a8a25dc4d8fef8cf96c0d24b9a +- kind: project-relative + target: copilot + value: .github/agents/personal-assistant.agent.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:a48a53144bfc4bc62d2a20f2a984f1fb55ad9ec98d30dfeccff0276e86740b65 +- kind: project-relative + target: copilot + value: .github/agents/project-architecture-planner.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/project-architecture-planner.agent.md + active_owner: github/awesome-copilot/agents/project-architecture-planner.agent.md + content_hash: sha256:11ce5dc54676fbe183849a4c0d317e5d893d012e6fc32a99b1ac22f9a173ad6c +- kind: project-relative + target: copilot + value: .github/agents/prompt-builder.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/prompt-builder.agent.md + active_owner: github/awesome-copilot/agents/prompt-builder.agent.md + content_hash: sha256:1f2296311ebdb3c082bab8194a377adf6207e88522227cc381158402549b0f1a +- kind: project-relative + target: copilot + value: .github/agents/sast-sca-security-analyzer.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/sast-sca-security-analyzer.agent.md + active_owner: github/awesome-copilot/agents/sast-sca-security-analyzer.agent.md + content_hash: sha256:5980dc5817b48eea6f88d25f847fcac11b3131f5f9444856bfda243d2c808518 +- kind: project-relative + target: copilot + value: .github/agents/se-security-reviewer.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/se-security-reviewer.agent.md + active_owner: github/awesome-copilot/agents/se-security-reviewer.agent.md + content_hash: sha256:3b5fec1f93bf21e20b865493ceca30708738642887d00c68e0bd0051f2d0e1fc +- kind: project-relative + target: copilot + value: .github/agents/se-technical-writer.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/se-technical-writer.agent.md + active_owner: github/awesome-copilot/agents/se-technical-writer.agent.md + content_hash: sha256:e2b7fe3959fee4701084022bdfb6bae9c24b2890d44305f17d779d0055ec9506 +- kind: project-relative + target: copilot + value: .github/agents/se-ux-ui-designer.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/se-ux-ui-designer.agent.md + active_owner: github/awesome-copilot/agents/se-ux-ui-designer.agent.md + content_hash: sha256:a7078735984cfec19643027b8e876435b3d73f43ab431f910186e16a11b0bdd2 +- kind: project-relative + target: copilot + value: .github/agents/software-engineer-agent-v1.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/software-engineer-agent-v1.agent.md + active_owner: github/awesome-copilot/agents/software-engineer-agent-v1.agent.md + content_hash: sha256:79ebbe7c389bc6043ac0a0e0f48ba8431d7f573deed3fd049c42f4cc27930f0b +- kind: project-relative + target: copilot + value: .github/agents/task-planner.agent.md + runtime: null + scope: project + owners: + - github/awesome-copilot/agents/task-planner.agent.md + active_owner: github/awesome-copilot/agents/task-planner.agent.md + content_hash: sha256:396e333df4318d590a8b07f960a61361169689d68896731149ea1f5a11ddc8fd +- kind: project-relative + target: copilot + value: .github/hooks/ai-toolkit-tool-guardian.json + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:ac518c3b22487e2ab72a2624262f7eb0739874853be30cf0db6184ff58d01e0b +- kind: project-relative + target: copilot + value: .github/hooks/scripts/ai-toolkit/scripts/tool-guardian/guard-tool.sh + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:d500ad6b087dd2653d49590fc4926d21eaff66445f3057290808b63ea9440384 +- kind: project-relative + target: copilot + value: .github/instructions/devsecninja-conventions.instructions.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:4dce4f46d59178dfebe9bd56b755aa08e6e1b3de46debe03b463e903301dbd2c +- kind: project-relative + target: copilot + value: .github/instructions/writing-style.instructions.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:4d3700565fafac3fa5f2a6ce8f7110b4716a81f44990bb71ccfd3f51d599452e +- kind: project-relative + target: copilot + value: .github/prompts/coding-copilot-onboarding.prompt.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:35e9058ff1181c9bd4612c4c2c216a2379813212e7e4db5462723aeeb12825f3 +- kind: project-relative + target: copilot + value: .github/prompts/home-assistant-automation-renamer.prompt.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:46d8cb31d75f4ff73b1ace176ad52b523d5cf8feb6d8f9cbcf8e9b2ee74112f8 +- kind: project-relative + target: copilot + value: .github/prompts/home-assistant-notification-optimizer.prompt.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:bef7b8a47605fd61dcdd6eb1e60b8294e9f25f5bf2a60662e1cfa7a8c7e2b64a +- kind: project-relative + target: legacy + value: .agents/skills/commit-and-release + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: legacy + value: .agents/skills/commit-and-release/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:eac86c66942132842a6412c75a2fa5386910a87d721d403b8d79941d1881b625 +- kind: project-relative + target: legacy + value: .agents/skills/commitment-tracker + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: legacy + value: .agents/skills/commitment-tracker/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:b04824c8402248e8b2028db81b179f23429be3a50b4990c3af8cafb34dffd7da +- kind: project-relative + target: legacy + value: .agents/skills/email-follow-up-tracker + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: legacy + value: .agents/skills/email-follow-up-tracker/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:8627f23f0b5edb9123575533627987a2dc23e78d6e77d07ba86eb392edf83dd6 +- kind: project-relative + target: legacy + value: .agents/skills/findmeetingtimes-timezone + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: legacy + value: .agents/skills/findmeetingtimes-timezone/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:0d4062c16f5b300eb42ea37bcced506d272cb3a499e4c48953a64a3b90b80fb1 +- kind: project-relative + target: legacy + value: .agents/skills/focus-time-blocker + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: legacy + value: .agents/skills/focus-time-blocker/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:1577c55abd281234108ff228a317931f659e4c3511a4218f10024da1fc69fb3e +- kind: project-relative + target: legacy + value: .agents/skills/inbox-triage-pass + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: legacy + value: .agents/skills/inbox-triage-pass/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:226c8aea4767932fbadc66fd0932d8a47bb19588322b8067ed5ddc815f94be0a +- kind: project-relative + target: legacy + value: .agents/skills/meeting-transcript-creation + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: legacy + value: .agents/skills/meeting-transcript-creation/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:9287214edd7a5703b85b3b18fea54b7ad00cc49bde09c1ae3a75a3f0364eb130 +- kind: project-relative + target: legacy + value: .agents/skills/morning-briefing + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: legacy + value: .agents/skills/morning-briefing/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:d5496aa416534df0be1f301d03a3d74dfb3f84cd72aafb33573a59c0c4af525b +- kind: project-relative + target: legacy + value: .agents/skills/obsidian + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: null +- kind: project-relative + target: legacy + value: .agents/skills/obsidian/LICENSE + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:64c64d48361edfe8610016441bf593256ea9b67f133b00f47c55aa29ee878567 +- kind: project-relative + target: legacy + value: .agents/skills/obsidian/SKILL.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:f721baa0e08edb3570a09b05e55492dd0b53ed4a4e9b8723082bcad9712f7014 +- kind: project-relative + target: legacy + value: .agents/skills/obsidian/references/BASES.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:b1c574283e4147e392f490e3e7f522d896a7f09c4a3cc893b509d103de9e73e8 +- kind: project-relative + target: legacy + value: .agents/skills/obsidian/references/CALLOUTS.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:bb633900e97cbd4773642ca53a7ce072eb6bff354b8c9f49558d87ea9b2d9358 +- kind: project-relative + target: legacy + value: .agents/skills/obsidian/references/EMBEDS.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:63b6205507e28fb58cf200bc348a2b139e50ae739743e2e6316732148973cb7a +- kind: project-relative + target: legacy + value: .agents/skills/obsidian/references/FUNCTIONS_REFERENCE.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:208fd63aead9bca1975626fea52605e6ab9434dc0529d923feb36b18b8877d3b +- kind: project-relative + target: legacy + value: .agents/skills/obsidian/references/PROPERTIES.md + runtime: null + scope: project + owners: + - devsecninja/ai-toolkit + active_owner: devsecninja/ai-toolkit + content_hash: sha256:b7948ee92fa8d9a384eb7a5f53c6df1c25e6a2e217e626953006bf2f030de81e +- kind: uri + target: mcp + value: io.github.github/github-mcp-server + runtime: copilot + scope: project + owners: + - . + active_owner: . + content_hash: null +- kind: uri + target: mcp + value: microsoft-learn + runtime: copilot + scope: project + owners: + - . + active_owner: . + content_hash: null mcp_servers: - io.github.github/github-mcp-server - microsoft-learn @@ -291,3 +786,10 @@ mcp_configs: transport: http registry: false url: https://learn.microsoft.com/api/mcp +mcp_target_servers: + copilot: + - io.github.github/github-mcp-server + - microsoft-learn +mcp_config_provenance: + io.github.github/github-mcp-server: ai-toolkit + microsoft-learn: ai-toolkit diff --git a/apm.yml b/apm.yml index 855eccea..59314dd0 100644 --- a/apm.yml +++ b/apm.yml @@ -4,7 +4,7 @@ description: APM project for .github author: Jean-Paul van Ravensberg dependencies: apm: - - DevSecNinja/ai-toolkit#v0.8.0 + - DevSecNinja/ai-toolkit#2491cedec727e722a7751ff516ae7b7c95de922b # v0.8.0 mcp: [] includes: auto scripts: {}