@damian87/omp 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,42 @@
1
+ version: 2
2
+ updates:
3
+ # npm dependencies
4
+ - package-ecosystem: npm
5
+ directory: "/"
6
+ schedule:
7
+ interval: weekly
8
+ day: monday
9
+ time: "06:00"
10
+ timezone: Europe/London
11
+ open-pull-requests-limit: 10
12
+ labels: ["dependencies"]
13
+ groups:
14
+ # Coupled peer pairs must upgrade together or npm hits ERESOLVE.
15
+ # Listed first so they take precedence over the type-based groups
16
+ # below, and intentionally unrestricted on update-types so majors
17
+ # (e.g. eslint 9->10) bump alongside their peers in one PR.
18
+ eslint:
19
+ patterns: ["eslint", "@eslint/*"]
20
+ vitest:
21
+ patterns: ["vitest", "@vitest/*"]
22
+ dev-dependencies:
23
+ dependency-type: development
24
+ update-types: ["minor", "patch"]
25
+ production-dependencies:
26
+ dependency-type: production
27
+ update-types: ["minor", "patch"]
28
+ commit-message:
29
+ prefix: "chore(deps)"
30
+ prefix-development: "chore(dev-deps)"
31
+
32
+ # GitHub Actions used in workflows
33
+ - package-ecosystem: github-actions
34
+ directory: "/"
35
+ schedule:
36
+ interval: weekly
37
+ day: monday
38
+ time: "06:00"
39
+ timezone: Europe/London
40
+ labels: ["ci", "dependencies"]
41
+ commit-message:
42
+ prefix: "ci(actions)"
@@ -17,13 +17,17 @@ Use `/code-review` before merge or final handoff.
17
17
 
18
18
  1. **Read the diff** — `git diff` for unstaged, `git diff --staged` for staged, or `git diff main...HEAD` for branch diff
19
19
  2. **Check for blockers** — bugs, logic errors, missing error handling, broken contracts
20
- 3. **Check for security** — secrets in code, injection risks, auth gaps, unsafe defaults
20
+ 3. **Check for security** — secrets in code, injection risks, auth gaps, unsafe defaults, and
21
+ **data exposure / least privilege**: does the change return, log, or expose more than it
22
+ needs (PII, password hashes, `SELECT *`, tokens, internal fields)?
21
23
  4. **Check for regressions** — does the change break existing tests or documented behaviour?
22
24
  5. **Check for scope drift** — does the change do more or less than requested?
23
25
  6. **Run tests** if they exist and haven't been run
24
26
 
25
27
  ## Rules
26
28
 
29
+ - **Don't stop at the first issue.** Once you find a blocker, keep scanning the whole change —
30
+ a serious bug (e.g. a data leak) often hides behind the obvious one. Review every line.
27
31
  - Only flag issues that genuinely matter — no style nits, no formatting opinions
28
32
  - If the code works, tests pass, and scope is right, say so clearly
29
33
  - Flag anything you'd reject in a PR review
@@ -17,7 +17,7 @@ Use `/debug` for broken, failing, slow, or confusing behavior.
17
17
 
18
18
  ## Steps (follow in order)
19
19
 
20
- 1. **Reproduce** — get the failure to happen reliably. If you can't reproduce, that's important information.
20
+ 1. **Reproduce** — get the failure to happen reliably. If you can't reproduce, that's important information. For a web UI bug, use `/qa-browse` to drive the page and reproduce the broken flow.
21
21
  2. **Minimise** — find the smallest case that still fails. Strip away unrelated code/config.
22
22
  3. **Hypothesise** — form 2–3 ranked theories about the cause. Start with the most likely.
23
23
  4. **Inspect** — gather evidence for/against each hypothesis. Read code, add logging, check state.
@@ -0,0 +1,125 @@
1
+ ---
2
+ name: qa-browse
3
+ description: Drive a real browser from the CLI to QA a flow — navigate, click, fill, verify. Uses @playwright/cli (token-efficient, not MCP). Use with /qa-browse when the user wants to manually check a web flow works, not write a test suite.
4
+ argument-hint: "<url> <what to verify>"
5
+ ---
6
+
7
+ # QA Browse — CLI browser driving with @playwright/cli
8
+
9
+ `/qa-browse` opens a live browser via `@playwright/cli` (binary `playwright-cli`) and walks a flow to verify it works. No test files. No MCP. This is distinct from the standard Playwright CLI (`npx playwright`, used for test/codegen/show-trace).
10
+
11
+ Engine: `@playwright/cli` (Microsoft). Snapshots live on disk, not in context — cheap tokens. Browser stays alive between commands.
12
+
13
+ ## Rules
14
+
15
+ - If not installed globally, run via the scoped package: `npx @playwright/cli` (NOT `npx playwright-cli` — that resolves the unscoped name and fails with ENOTFOUND). Never assume global.
16
+ - Loop: **snapshot → read refs → act → re-snapshot.** Always.
17
+ - Refs (`e5`, `e12`) are valid only for the latest snapshot. Re-snapshot after any navigation/click that changes the page.
18
+ - Headless by default. Add `--headed` only when a human must watch.
19
+ - Prefer refs over CSS. Use `getByRole`/`getByText` selectors only if a ref isn't available.
20
+ - Verify with `eval` or a snapshot of the result region — don't assume an action worked.
21
+ - Screenshot on each pass/fail checkpoint so there's evidence.
22
+ - `close` when done.
23
+
24
+ ## Setup
25
+
26
+ ```bash
27
+ npm install -g @playwright/cli@latest # or run ad-hoc: npx @playwright/cli
28
+ playwright-cli install-browser chromium # first run in a fresh env (NOT `install` — that inits a workspace)
29
+ ```
30
+
31
+ ## Core loop
32
+
33
+ ```bash
34
+ playwright-cli open <url> # open + navigate (prints a snapshot path)
35
+ playwright-cli snapshot # accessibility tree with refs → read it
36
+ playwright-cli click e15 # act using a ref
37
+ playwright-cli fill e5 "text" # fill input (add --submit to press Enter)
38
+ playwright-cli type "text" # type into focused element
39
+ playwright-cli press Enter # key press
40
+ playwright-cli snapshot # re-snapshot to confirm new state
41
+ playwright-cli screenshot # evidence
42
+ playwright-cli close
43
+ ```
44
+
45
+ ## Interact
46
+
47
+ ```bash
48
+ playwright-cli click <ref> [button] # left/right/middle
49
+ playwright-cli dblclick <ref>
50
+ playwright-cli fill <ref> <text> --submit
51
+ playwright-cli select <ref> <value> # dropdown
52
+ playwright-cli check <ref> / uncheck <ref>
53
+ playwright-cli hover <ref>
54
+ playwright-cli drag <startRef> <endRef>
55
+ playwright-cli upload ./file.pdf
56
+ playwright-cli dialog-accept / dialog-dismiss
57
+ ```
58
+
59
+ ## Navigate
60
+
61
+ ```bash
62
+ playwright-cli goto <url>
63
+ playwright-cli go-back / go-forward / reload
64
+ ```
65
+
66
+ ## Inspect & verify
67
+
68
+ ```bash
69
+ playwright-cli snapshot --depth=4 # shallow tree on big pages
70
+ playwright-cli snapshot e34 # drill into a subtree
71
+ playwright-cli snapshot --raw | grep button # script-friendly
72
+ playwright-cli eval "document.title" # read page state
73
+ playwright-cli eval "el => el.textContent" e5
74
+ playwright-cli eval "el => el.getAttribute('data-testid')" e5
75
+ playwright-cli console # console messages
76
+ ```
77
+
78
+ ## Evidence
79
+
80
+ ```bash
81
+ playwright-cli screenshot --full-page # full scrollable page (bare `screenshot` = current viewport)
82
+ playwright-cli screenshot e5 # one element
83
+ playwright-cli screenshot --filename=step1.png
84
+ playwright-cli video-start / video-stop
85
+ playwright-cli tracing-start / tracing-stop # record a trace; view it with: npx playwright show-trace <trace>
86
+ playwright-cli pdf --filename=page.pdf
87
+ ```
88
+
89
+ ## Sessions
90
+
91
+ State (cookies, localStorage) persists within a session across commands.
92
+
93
+ ```bash
94
+ playwright-cli --session=qa open <url> # named session
95
+ playwright-cli -s=qa open <url> --persistent # save profile to disk
96
+ playwright-cli list # running sessions
97
+ playwright-cli show # live dashboard, take over mouse/kbd
98
+ playwright-cli close-all / kill-all
99
+ ```
100
+
101
+ ## QA flow checklist
102
+
103
+ 1. `open <url>` → `snapshot`.
104
+ 2. For each step: find ref in snapshot → act → re-snapshot → verify expected element/text.
105
+ 3. `screenshot` at each checkpoint (pass and fail).
106
+ 4. On failure: `eval` the element, capture `console`, take a `--headed` re-run or trace.
107
+ 5. Report: what passed, what failed, with screenshot/snapshot paths. `close`.
108
+
109
+ ## Example — login flow
110
+
111
+ ```bash
112
+ playwright-cli open https://app.example.com/login
113
+ playwright-cli snapshot
114
+ playwright-cli fill e1 "user@example.com"
115
+ playwright-cli fill e2 "secret" --submit
116
+ playwright-cli snapshot # expect dashboard
117
+ playwright-cli eval "document.title"
118
+ playwright-cli screenshot --filename=logged-in.png
119
+ playwright-cli close
120
+ ```
121
+
122
+ ## When NOT to use
123
+
124
+ - Want a saved, repeatable test suite → use `/tdd` or write `@playwright/test` specs.
125
+ - Need long-running autonomous loops or persistent introspection → Playwright MCP may fit better.
@@ -19,7 +19,10 @@ Use `/ralplan` when the task needs planning before edits.
19
19
  2. **List implementation slices** in execution order — each slice should be independently verifiable
20
20
  3. **Define acceptance criteria** — what must be true when done
21
21
  4. **Define test shape** — which tests to write or run, what they cover
22
- 5. **Call out risks** — what could go wrong, tradeoffs chosen, alternatives rejected
22
+ 5. **Call out risks** — what could go wrong, tradeoffs chosen, alternatives rejected. For any
23
+ auth, security, or data-handling feature, the plan **must** name the security specifics even
24
+ if the request didn't: secret/token **expiry**, **single-use / replay** protection, and
25
+ **enumeration / rate-limiting**. Leaving these implicit is how the plan ships a hole.
23
26
  6. **Stop at the plan** unless the user explicitly asked to implement
24
27
 
25
28
  ## Output
@@ -13,15 +13,29 @@ Use `/tdd` when a change can be specified by tests.
13
13
  - The codebase has an existing test framework
14
14
  - You want to prove correctness incrementally
15
15
 
16
- ## Loop (repeat until done)
17
-
18
- 1. **Red** — write or identify a failing test that describes the desired behaviour
19
- 2. **Green** write the minimal code to make the test pass
20
- 3. **Refactor** clean up the code while keeping tests green
21
- 4. **Run** — run the full related test suite to check for regressions
16
+ ## Loop (Canon TDD — repeat until the list is empty)
17
+
18
+ 0. **List first** — before writing any code, read the **full spec/docstring** and write a
19
+ **test list**: every scenario you need to cover. Don't start from the happy path — walk the
20
+ edge-case taxonomy against the spec and add a line for each that applies:
21
+ - **Boundary** — min/max, zero, empty, first/last, length limits, collapsing/trimming
22
+ - **Empty/Null** — `""`, `None`, empty collection, whitespace-only
23
+ - **Format** — **unicode / accented characters**, emoji, special chars, malformed input
24
+ - **Implicit** — anything the spec *implies* but the prompt didn't spell out
25
+ A requirement that appears in the spec but not your list is the bug you're about to ship.
26
+ 1. **Red** — turn **exactly one** list item into a concrete test with real **assertions**
27
+ (`assert`, `expect`, `self.assertEqual`); run it and watch it **fail for the right reason**.
28
+ 2. **Green** — write the minimal code to make that test (and all previous tests) pass.
29
+ 3. **Refactor** — clean up while tests stay green.
30
+ 4. **Repeat** — take the next list item; add new items as you discover them. Run the full
31
+ related suite at the end to check for regressions.
22
32
 
23
33
  ## Rules
24
34
 
35
+ - Use **executable assertions** — a script that only prints results for a human to eyeball is
36
+ **not a test** and does not count as red-green. Every scenario on the list gets an assertion.
37
+ - Work the **whole list**, not just the first case — the bugs hide in the edge cases the prompt
38
+ didn't spell out (unicode/accents, empty input, boundaries).
25
39
  - Test **behaviour** through public surfaces, not implementation details
26
40
  - Each test should describe one behaviour — name it clearly (e.g. "returns 404 when user not found")
27
41
  - Avoid brittle tests that break when implementation changes but behaviour doesn't
@@ -30,6 +44,7 @@ Use `/tdd` when a change can be specified by tests.
30
44
 
31
45
  ## Output
32
46
 
47
+ - `Test list` — the scenarios you enumerated from the spec (incl. the edge cases)
33
48
  - `Tests written` — list of test names and what they cover
34
49
  - `Implementation` — what was changed to make tests pass
35
50
  - `Refactoring` — what was cleaned up
@@ -54,7 +54,7 @@ Number every cycle explicitly: "Cycle 1", "Cycle 2", etc.
54
54
 
55
55
  ## Rules
56
56
 
57
- - Prefer runnable checks over inspection — run tests, don't just read code
57
+ - Prefer runnable checks over inspection — run tests, don't just read code. For web UI flows, exercise the real page with `/qa-browse` rather than inspecting markup.
58
58
  - If tests don't exist, write minimal ones that cover the change
59
59
  - Route fixes back to `/ralph` or `/ultrawork` if they're substantial
60
60
 
@@ -20,7 +20,7 @@ Use `/verify` before saying done.
20
20
  - Tests: `npm test`, `pytest`, etc.
21
21
  - Build: does it compile/build without errors?
22
22
  - Lint: any new warnings?
23
- - Behaviour: does the feature work as described?
23
+ - Behaviour: does the feature work as described? For web UI flows, use `/qa-browse` to drive the live page and capture snapshot/screenshot evidence.
24
24
  3. **Read outputs** — don't assume green means pass; read the actual results
25
25
  4. **Report honestly** — if there are gaps, say so
26
26
 
@@ -0,0 +1,67 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ # Avoid piling up redundant runs on the same ref.
11
+ concurrency:
12
+ group: ci-${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ env:
19
+ # Hermetic runs — never auto-load a developer's ~/.omp/.env, never self-update.
20
+ OMP_SKIP_USER_ENV: "1"
21
+ OMP_NO_UPDATE_CHECK: "1"
22
+
23
+ jobs:
24
+ build-test:
25
+ name: Build · Test · Lint (Node ${{ matrix.node }})
26
+ runs-on: ubuntu-latest
27
+ strategy:
28
+ fail-fast: false
29
+ matrix:
30
+ node: [20, 22]
31
+ steps:
32
+ - uses: actions/checkout@v7
33
+
34
+ - uses: actions/setup-node@v6
35
+ with:
36
+ node-version: ${{ matrix.node }}
37
+ cache: npm
38
+
39
+ - name: Install dependencies
40
+ run: npm ci
41
+
42
+ - name: Build (tsc)
43
+ run: npm run build
44
+
45
+ - name: Lint (eslint)
46
+ run: npm run lint
47
+
48
+ - name: Unit tests (vitest)
49
+ run: npm test
50
+
51
+ skills:
52
+ name: Validate skills & catalog
53
+ runs-on: ubuntu-latest
54
+ steps:
55
+ - uses: actions/checkout@v7
56
+ - uses: actions/setup-node@v6
57
+ with:
58
+ node-version: 20
59
+ cache: npm
60
+ - run: npm ci
61
+
62
+ # Project's own validators.
63
+ - name: Lint skills (omp lint:skills)
64
+ run: npm run lint:skills
65
+
66
+ - name: Validate catalog
67
+ run: npm run check:catalog
@@ -0,0 +1,157 @@
1
+ name: Security
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ schedule:
9
+ # Weekly full scan (Mondays 06:17 UTC) to catch newly disclosed CVEs.
10
+ - cron: "17 6 * * 1"
11
+ workflow_dispatch:
12
+
13
+ concurrency:
14
+ group: security-${{ github.workflow }}-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ permissions:
18
+ contents: read
19
+
20
+ env:
21
+ OMP_SKIP_USER_ENV: "1"
22
+ OMP_NO_UPDATE_CHECK: "1"
23
+
24
+ jobs:
25
+ # ── 1. Native, free, zero-secret baseline ─────────────────────────────
26
+ npm-audit:
27
+ name: npm audit (prod deps)
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v7
31
+ - uses: actions/setup-node@v6
32
+ with:
33
+ node-version: 20
34
+ cache: npm
35
+ - run: npm ci
36
+ # Fail only on HIGH/critical in production dependencies.
37
+ - name: npm audit (high+, prod only)
38
+ run: npm run audit:ci
39
+
40
+ skills-safety:
41
+ name: Skills safety scan
42
+ runs-on: ubuntu-latest
43
+ steps:
44
+ - uses: actions/checkout@v7
45
+ - uses: actions/setup-node@v6
46
+ with:
47
+ node-version: 20
48
+ # No install needed — pure Node script over SKILL.md / agents / catalog.
49
+ - name: Static safety audit of skills & agents
50
+ run: node scripts/skills-safety-scan.mjs --root .
51
+
52
+ codeql:
53
+ name: CodeQL (JS/TS)
54
+ runs-on: ubuntu-latest
55
+ permissions:
56
+ contents: read
57
+ security-events: write
58
+ actions: read
59
+ steps:
60
+ - uses: actions/checkout@v7
61
+ - uses: github/codeql-action/init@v4
62
+ with:
63
+ languages: javascript-typescript
64
+ queries: security-and-quality
65
+ - uses: github/codeql-action/analyze@v4
66
+ with:
67
+ category: "/language:javascript-typescript"
68
+
69
+ dependency-review:
70
+ name: Dependency review (PR only)
71
+ if: github.event_name == 'pull_request'
72
+ runs-on: ubuntu-latest
73
+ permissions:
74
+ contents: read
75
+ pull-requests: write
76
+ steps:
77
+ - uses: actions/checkout@v7
78
+ - uses: actions/dependency-review-action@v5
79
+ with:
80
+ fail-on-severity: high
81
+ comment-summary-in-pr: on-failure
82
+
83
+ # ── 2. Socket — supply-chain / malicious package detection ────────────
84
+ # Requires repo secret SOCKET_SECURITY_API_KEY (free at socket.dev).
85
+ socket:
86
+ name: Socket supply-chain scan
87
+ runs-on: ubuntu-latest
88
+ steps:
89
+ - uses: actions/checkout@v7
90
+ - name: Check for Socket token
91
+ id: gate
92
+ run: |
93
+ if [ -n "${{ secrets.SOCKET_SECURITY_API_KEY }}" ]; then
94
+ echo "enabled=true" >> "$GITHUB_OUTPUT"
95
+ else
96
+ echo "enabled=false" >> "$GITHUB_OUTPUT"
97
+ echo "::notice title=Socket skipped::Set the SOCKET_SECURITY_API_KEY repo secret to enable Socket scanning."
98
+ fi
99
+ - uses: actions/setup-node@v6
100
+ if: steps.gate.outputs.enabled == 'true'
101
+ with:
102
+ node-version: 20
103
+ - name: Socket CLI scan
104
+ if: steps.gate.outputs.enabled == 'true'
105
+ env:
106
+ SOCKET_SECURITY_API_KEY: ${{ secrets.SOCKET_SECURITY_API_KEY }}
107
+ run: npx -y @socketsecurity/cli@latest scan create . --view --no-interactive
108
+
109
+ # ── 3. Snyk — dependency + code vulnerability scanning ────────────────
110
+ # Requires repo secret SNYK_TOKEN (free at snyk.io). Uploads SARIF to the
111
+ # GitHub Security tab.
112
+ snyk:
113
+ name: Snyk (deps + code)
114
+ runs-on: ubuntu-latest
115
+ permissions:
116
+ contents: read
117
+ security-events: write
118
+ steps:
119
+ - uses: actions/checkout@v7
120
+ - name: Check for Snyk token
121
+ id: gate
122
+ run: |
123
+ if [ -n "${{ secrets.SNYK_TOKEN }}" ]; then
124
+ echo "enabled=true" >> "$GITHUB_OUTPUT"
125
+ else
126
+ echo "enabled=false" >> "$GITHUB_OUTPUT"
127
+ echo "::notice title=Snyk skipped::Set the SNYK_TOKEN repo secret to enable Snyk scanning."
128
+ fi
129
+ - uses: actions/setup-node@v6
130
+ if: steps.gate.outputs.enabled == 'true'
131
+ with:
132
+ node-version: 20
133
+ cache: npm
134
+ - run: npm ci
135
+ if: steps.gate.outputs.enabled == 'true'
136
+
137
+ - name: Snyk Open Source (dependencies)
138
+ if: steps.gate.outputs.enabled == 'true'
139
+ continue-on-error: true
140
+ env:
141
+ SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
142
+ run: npx -y snyk@latest test --severity-threshold=high --sarif-file-output=snyk-deps.sarif
143
+
144
+ - name: Snyk Code (SAST)
145
+ if: steps.gate.outputs.enabled == 'true'
146
+ continue-on-error: true
147
+ env:
148
+ SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
149
+ run: npx -y snyk@latest code test --severity-threshold=high --sarif-file-output=snyk-code.sarif
150
+
151
+ - name: Upload Snyk results to GitHub Security
152
+ if: steps.gate.outputs.enabled == 'true'
153
+ uses: github/codeql-action/upload-sarif@v4
154
+ with:
155
+ sarif_file: .
156
+ category: snyk
157
+ continue-on-error: true
package/README.md CHANGED
@@ -385,6 +385,7 @@ omp grows in vertical slices. Items aren't pinned to specific semver versions
385
385
  - [Jira adapter](docs/jira.md) — configuration discovery, safe operations, dry-runs, fallback payloads
386
386
  - [Self-evolve](docs/self-evolve.md) — extracting reusable skills from session transcripts
387
387
  - [Slack setup](docs/slack-setup.md) — Slack app manifest, scopes, Socket-Mode token, `omp gateway serve`
388
+ - [Skill benchmark](benchmarks/skill-bench/README.md) — agentic benchmark that measures whether a skill actually beats *just telling the model* (baseline / one-line prompt / skill arms), with live Haiku 4.5 findings
388
389
 
389
390
  ## Layout
390
391
 
@@ -394,6 +395,7 @@ omp grows in vertical slices. Items aren't pinned to specific semver versions
394
395
  hooks/hooks.json # lifecycle hook manifest
395
396
  scripts/*.mjs # hook implementations
396
397
  src/ # omp CLI, team runtime, gateway/comms, schedule, mode-state loops
398
+ benchmarks/skill-bench/ # agentic benchmark: does a skill beat just telling the model?
397
399
  ```
398
400
 
399
401
  Skills follow the [Copilot agent-skills docs](https://docs.github.com/en/copilot) — project skills live in `.github/skills/` and are invoked with `/skill-name`.
@@ -182,7 +182,7 @@ export async function runEnvInit(opts) {
182
182
  // no chance of stomping a pre-existing temp file with stale perms. The
183
183
  // final rename then atomically installs the 0o600 file into place.
184
184
  let tmpDir = null;
185
- let tmpFile = null;
185
+ let tmpFile;
186
186
  try {
187
187
  tmpDir = mkdtempSync(join(dirname(path), ".env-init-"));
188
188
  tmpFile = join(tmpDir, "env");
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/env/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/env/init.ts"],"names":[],"mappings":"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"}
@@ -197,7 +197,7 @@ export function readSessionTranscript(uuid, options = {}) {
197
197
  const path = sessionEventsPath(uuid, options.sessionStateDir);
198
198
  if (!existsSync(path))
199
199
  return [];
200
- let raw = "";
200
+ let raw;
201
201
  try {
202
202
  raw = readTail(path, maxBytes);
203
203
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../../src/memory-review/transcript.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../../src/memory-review/transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ # Security & quality pipeline
2
+
3
+ This repo ships two GitHub Actions workflows plus Dependabot. Together they cover
4
+ dependency vulnerabilities, supply-chain/malicious-package risk, static code
5
+ analysis, and **AI-skill-specific safety** (the same classes of issue that the
6
+ [skills.sh](https://www.skills.sh) audits — Agent Trust Hub, Socket, Snyk —
7
+ flag for Agent Skills).
8
+
9
+ ## Workflows
10
+
11
+ ### `.github/workflows/ci.yml` — build, test, lint, skills validation
12
+
13
+ | Job | What it runs |
14
+ | --- | --- |
15
+ | `build-test` | `npm ci` → `npm run build` (tsc) → `npm run lint` (eslint) → `npm test` (vitest), on Node 20 & 22 |
16
+ | `skills` | `npm run lint:skills` (omp's own validator) + `npm run check:catalog` |
17
+
18
+ ### `.github/workflows/security.yml` — security scanners
19
+
20
+ | Job | Tool | Secret required | Gate |
21
+ | --- | --- | --- | --- |
22
+ | `npm-audit` | `npm audit` | none | fails on **high+** in **production** deps |
23
+ | `skills-safety` | `scripts/skills-safety-scan.mjs` | none | fails on any **HIGH** finding |
24
+ | `codeql` | GitHub CodeQL (JS/TS) | none | results in Security tab |
25
+ | `dependency-review` | GitHub Dependency Review | none (PRs only) | fails on **high** severity |
26
+ | `socket` | Socket CLI | `SOCKET_SECURITY_API_KEY` | skipped if secret unset |
27
+ | `snyk` | Snyk Open Source + Snyk Code | `SNYK_TOKEN` | SARIF → Security tab |
28
+
29
+ Runs on every push/PR to `main`, plus a weekly scheduled full scan (Mondays).
30
+ Socket and Snyk jobs **self-skip with a notice** if their secret isn't set, so
31
+ the pipeline is green out of the box and lights up as you add tokens.
32
+
33
+ ## Required secrets (optional but recommended)
34
+
35
+ Add these under **Settings → Secrets and variables → Actions → New repository secret**:
36
+
37
+ | Secret | Where to get it | Free tier |
38
+ | --- | --- | --- |
39
+ | `SNYK_TOKEN` | [snyk.io](https://snyk.io) → Account settings → Auth Token | Yes |
40
+ | `SOCKET_SECURITY_API_KEY` | [socket.dev](https://socket.dev) → Settings → API Tokens | Yes |
41
+
42
+ `GITHUB_TOKEN` is provided automatically — no setup needed for CodeQL,
43
+ Dependency Review, or SARIF upload.
44
+
45
+ ## GitHub repo settings to flip on (one-time, free)
46
+
47
+ These complement the workflows and live in **Settings → Code security**:
48
+
49
+ - **Dependabot alerts** + **security updates** — `.github/dependabot.yml` already
50
+ schedules weekly version bumps for npm and Actions.
51
+ - **Secret scanning** + **push protection** — blocks committed credentials.
52
+ - **Code scanning** — surfaces CodeQL/Snyk SARIF in the Security tab.
53
+
54
+ ## The skills safety scanner
55
+
56
+ `scripts/skills-safety-scan.mjs` statically audits `.github/skills/**`,
57
+ `.github/agents/**`, and `catalog/**` — including SKILL.md docs and bundled
58
+ helper scripts (`*.sh`, `*.py`, `*.mjs`, …) — for the risk classes those
59
+ external audits care about. To avoid false positives on documentation, the
60
+ command-style rules (S001–S003, S005–S007) only match inside fenced code blocks
61
+ in markdown (and the full body of script files); only the prompt-injection rule
62
+ (S004) scans prose. Multi-line commands joined with `\` are merged before
63
+ matching so a wrapped `curl … | sh` can't slip through.
64
+
65
+ | Rule | Severity | Detects |
66
+ | --- | --- | --- |
67
+ | S001 | HIGH | `curl … | sh` remote code execution |
68
+ | S002 | MEDIUM | Unpinned remote install / `npx <pkg> add` |
69
+ | S003 | LOW | Global `-g` installs |
70
+ | S004 | MEDIUM | Indirect prompt-injection surface (fetch + act on untrusted/third-party content — cf. Snyk W011) |
71
+ | S005 | HIGH | Credential/secret exfiltration |
72
+ | S006 | MEDIUM | Obfuscation (`base64 -d | sh`, `eval(`, `Function(`) |
73
+ | S007 | HIGH | Destructive shell (`rm -rf /`, `dd`, `mkfs`, `chmod 777`) |
74
+ | S100/S101 | MEDIUM | SKILL.md missing `name` / `description` frontmatter |
75
+
76
+ Run locally:
77
+
78
+ ```bash
79
+ npm run scan:skills # human-readable, fails on HIGH
80
+ node scripts/skills-safety-scan.mjs --json # machine-readable
81
+ node scripts/skills-safety-scan.mjs --strict # also fail on MEDIUM
82
+ node scripts/skills-safety-scan.mjs --allow-empty # don't fail when no skills exist
83
+ ```
84
+
85
+ ## Local commands
86
+
87
+ ```bash
88
+ npm run lint # eslint over src + scripts
89
+ npm run lint:fix # auto-fix
90
+ npm run lint:skills # omp's own SKILL.md validator
91
+ npm run check:catalog # catalog schema validation
92
+ npm run scan:skills # AI-skill safety scan
93
+ npm run audit:ci # prod-dep vulnerability gate (high+)
94
+ ```
95
+
96
+ ## Notes
97
+
98
+ - ESLint is scoped to `src/**` and `scripts/**`. Tests (`test/**`) are covered
99
+ by vitest and kept out of the lint gate to avoid a large up-front refactor.
100
+ - `npm audit` gates on **production** dependencies only (`--omit=dev`); dev-only
101
+ vulns (vitest, vite, etc.) are handled by Dependabot PRs rather than blocking CI.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@damian87/omp",
3
- "version": "0.17.0",
3
+ "version": "0.19.0",
4
4
  "description": "Multi-agent orchestration for GitHub Copilot CLI — autonomous loops (Autopilot, Ralph, UltraQA, Ultrawork), parallel tmux agent teams, a weighted-consensus model council, a Slack chat bridge, durable scheduled jobs, and in-session skills + custom agents. Zero learning curve.",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -30,7 +30,11 @@
30
30
  "catalog:list": "npm run build && node dist/src/cli.js catalog list",
31
31
  "project:inspect": "npm run build && node dist/src/cli.js project inspect",
32
32
  "test": "vitest run",
33
+ "lint": "eslint .",
34
+ "lint:fix": "eslint . --fix",
33
35
  "lint:skills": "npm run build && node dist/src/cli.js lint:skills --root .",
36
+ "scan:skills": "node scripts/skills-safety-scan.mjs --root .",
37
+ "audit:ci": "npm audit --audit-level=high --omit=dev",
34
38
  "sync:dry-run": "npm run build && node dist/src/cli.js sync:dry-run --root .",
35
39
  "jira:dry-run": "npm run build && node dist/src/cli.js jira:dry-run --root .",
36
40
  "omp:version": "npm run build && node dist/src/cli.js version",
@@ -57,12 +61,15 @@
57
61
  "node": ">=20"
58
62
  },
59
63
  "devDependencies": {
60
- "@types/node": "^22.15.29",
64
+ "@eslint/js": "^10.0.1",
65
+ "eslint": "^10.5.0",
66
+ "typescript-eslint": "^8.11.0",
67
+ "@types/node": "^26.0.1",
61
68
  "@types/node-notifier": "^8.0.5",
62
- "@vitest/coverage-v8": "^3.2.4",
63
- "tsx": "^4.19.4",
64
- "typescript": "^5.8.3",
65
- "vitest": "^3.1.4"
69
+ "@vitest/coverage-v8": "^4.1.9",
70
+ "tsx": "^4.22.4",
71
+ "typescript": "^6.0.3",
72
+ "vitest": "^4.1.9"
66
73
  },
67
74
  "dependencies": {
68
75
  "@modelcontextprotocol/sdk": "^1.29.0",
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "oh-my-copilot",
3
3
  "description": "Multi-agent orchestration skills for GitHub Copilot CLI — autopilot, ralph, ultrawork, ultraqa, team, council, code-review and more as in-session slash skills + custom agents.",
4
- "version": "0.17.0",
4
+ "version": "0.19.0",
5
5
  "author": {
6
6
  "name": "Damian Borek",
7
7
  "email": "borekdamian@yahoo.pl"
@@ -0,0 +1,231 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * skills-safety-scan — static safety audit for Agent Skills (SKILL.md) and agents.
4
+ *
5
+ * Mirrors the kinds of issues that Agent Trust Hub / Socket / Snyk flag for
6
+ * AI skills (see skills.sh audits), but runs locally with no network and no
7
+ * secrets so it can gate every PR:
8
+ *
9
+ * - Untrusted install / remote-code execution surfaces (curl | sh, npx <pkg>, -g, npm i remote)
10
+ * - Indirect prompt-injection surfaces (fetching + acting on third-party/user content)
11
+ * - Credential / secret exfiltration patterns
12
+ * - Obfuscation (base64 decode + exec, eval, large encoded blobs)
13
+ * - Destructive shell (rm -rf, dd, mkfs, chmod 777)
14
+ * - Frontmatter hygiene (missing name/description)
15
+ *
16
+ * Exit codes:
17
+ * 0 = no HIGH findings (warnings allowed)
18
+ * 1 = at least one HIGH finding, with --strict any MEDIUM finding, or no files
19
+ * scanned (target moved) unless --allow-empty is passed
20
+ *
21
+ * Usage:
22
+ * node scripts/skills-safety-scan.mjs [--root .] [--strict] [--json] [--allow-empty]
23
+ */
24
+ import { readFileSync, readdirSync, statSync } from "node:fs";
25
+ import { join, relative, sep } from "node:path";
26
+
27
+ const args = process.argv.slice(2);
28
+ const opt = (flag, def = null) => {
29
+ const i = args.indexOf(flag);
30
+ return i >= 0 ? (args[i + 1] && !args[i + 1].startsWith("--") ? args[i + 1] : true) : def;
31
+ };
32
+ const ROOT = typeof opt("--root") === "string" ? opt("--root") : ".";
33
+ const STRICT = !!opt("--strict", false);
34
+ const JSON_OUT = !!opt("--json", false);
35
+ const ALLOW_EMPTY = !!opt("--allow-empty", false);
36
+
37
+ // Where skills/agents live in this repo.
38
+ const SCAN_DIRS = [".github/skills", ".github/agents", "catalog"];
39
+ // Markdown/JSON docs plus bundled executable helpers — dangerous shell often
40
+ // lives in a skill's `scripts/*.sh`, not just its prose.
41
+ const SCAN_EXT = [".md", ".json", ".sh", ".bash", ".zsh", ".py", ".ps1", ".mjs", ".cjs", ".js"];
42
+
43
+ /** @type {{severity:'HIGH'|'MEDIUM'|'LOW',rule:string,file:string,line:number,match:string,why:string}[]} */
44
+ const findings = [];
45
+
46
+ const RULES = [
47
+ {
48
+ rule: "S001 remote-code-execution",
49
+ severity: "HIGH",
50
+ re: /\b(curl|wget)\b[^\n|]*\|\s*(sudo\s+)?(ba)?sh\b/i,
51
+ why: "Pipes a downloaded script straight into a shell (untrusted remote code execution).",
52
+ },
53
+ {
54
+ rule: "S002 unpinned-remote-install",
55
+ severity: "MEDIUM",
56
+ re: /\bnpx\s+(?:-y\s+|--yes\s+)?(?!tsc\b|vitest\b|eslint\b)[a-z@][\w@/.-]*\s+add\b|\bnpm\s+i(nstall)?\s+(-g\s+)?https?:\/\//i,
57
+ why: "Installs/executes packages from an external source at runtime (supply-chain + untrusted install surface).",
58
+ },
59
+ {
60
+ rule: "S003 global-install",
61
+ severity: "LOW",
62
+ re: /\bnpm\s+i(nstall)?\s+-g\b|\bnpx\b[^\n]*\s-g\b/i,
63
+ why: "Global install persists tooling at user/system level.",
64
+ },
65
+ {
66
+ rule: "S004 prompt-injection-surface",
67
+ severity: "MEDIUM",
68
+ // Natural-language instruction, not a shell command — scan prose, not just code.
69
+ context: "prose",
70
+ re: /\b(fetch|read|download|ingest|browse)\b[^\n]*\b(untrusted|third-?party|user-generated|external (registry|source|content|repos?))\b/i,
71
+ why: "Fetches and may act on third-party/untrusted content — indirect prompt-injection risk (cf. Snyk W011).",
72
+ },
73
+ {
74
+ rule: "S005 credential-exfiltration",
75
+ severity: "HIGH",
76
+ // The token keyword may be a suffix/component of the var name
77
+ // (`$GITHUB_TOKEN`, `$NPM_TOKEN`, `$AWS_SECRET_ACCESS_KEY`), not just a prefix.
78
+ re: /\b(env|printenv|cat)\b[^\n]*\b(\.env|secret|token|api[_-]?key|password|credential)\b[^\n]*\|\s*(curl|wget|nc)\b|\b(curl|wget)\b[^\n]*\$\{?\s*[A-Z0-9_]*(SECRET|TOKEN|API[_-]?KEY|PASSWORD)/i,
79
+ why: "Reads secrets/credentials and sends them off the machine.",
80
+ },
81
+ {
82
+ rule: "S006 obfuscation",
83
+ severity: "MEDIUM",
84
+ re: /\bbase64\b\s+(-d|--decode)\b[^\n]*\|\s*(ba)?sh|\beval\b\s*\(|\bFunction\s*\(\s*['"`]/i,
85
+ why: "Decodes/evaluates hidden code at runtime (obfuscation).",
86
+ },
87
+ {
88
+ rule: "S007 destructive-shell",
89
+ severity: "HIGH",
90
+ // `chmod 777` and `chmod -R 777` (and `0777`) are all world-writable.
91
+ re: /\brm\s+-rf\s+[/~]|\bdd\s+if=|\bmkfs\b|\bchmod\s+(-R\s+)?0?777\b|>\s*\/dev\/sd/i,
92
+ why: "Destructive or overly-permissive filesystem operation.",
93
+ },
94
+ ];
95
+
96
+ function walk(dir) {
97
+ let out = [];
98
+ let entries;
99
+ try {
100
+ entries = readdirSync(dir);
101
+ } catch {
102
+ return out; // dir may not exist in every repo
103
+ }
104
+ for (const name of entries) {
105
+ const p = join(dir, name);
106
+ let s;
107
+ try {
108
+ s = statSync(p);
109
+ } catch {
110
+ continue;
111
+ }
112
+ if (s.isDirectory()) out = out.concat(walk(p));
113
+ else if (SCAN_EXT.some((e) => name.endsWith(e))) out.push(p);
114
+ }
115
+ return out;
116
+ }
117
+
118
+ // Logical "code" lines for command-style rules:
119
+ // - Markdown (.md): only lines inside fenced code blocks (``` or ~~~), so
120
+ // documentation that merely *mentions* a dangerous command in prose can't
121
+ // trip a HIGH rule and block every PR.
122
+ // - Scripts/JSON: the whole file is code.
123
+ // Backslash line-continuations are merged into one logical line so a command
124
+ // wrapped across multiple lines can't slip past single-line regexes.
125
+ function codeLines(text, file) {
126
+ const isMarkdown = file.endsWith(".md");
127
+ const raw = text.split(/\r?\n/);
128
+ const out = [];
129
+ let inFence = false;
130
+ let fenceChar = "";
131
+ for (let i = 0; i < raw.length; i++) {
132
+ let line = raw[i];
133
+ if (isMarkdown) {
134
+ const fence = line.match(/^\s*(`{3,}|~{3,})/);
135
+ if (fence) {
136
+ const ch = fence[1][0];
137
+ if (!inFence) {
138
+ inFence = true;
139
+ fenceChar = ch;
140
+ } else if (ch === fenceChar) {
141
+ inFence = false;
142
+ }
143
+ continue; // never scan the fence marker line itself
144
+ }
145
+ if (!inFence) continue; // skip prose
146
+ }
147
+ const startLine = i + 1;
148
+ while (/\\[ \t]*$/.test(line) && i + 1 < raw.length) {
149
+ i += 1;
150
+ line = line.replace(/\\[ \t]*$/, " ") + raw[i];
151
+ }
152
+ out.push({ line: startLine, text: line });
153
+ }
154
+ return out;
155
+ }
156
+
157
+ function scanFile(file) {
158
+ const rel = relative(ROOT, file).split(sep).join("/");
159
+ const text = readFileSync(file, "utf8");
160
+
161
+ // Frontmatter hygiene for SKILL.md
162
+ if (file.endsWith("SKILL.md")) {
163
+ const fmEnd = text.indexOf("\n---", 3);
164
+ const fm = text.startsWith("---") && fmEnd !== -1 ? text.slice(3, fmEnd) : "";
165
+ if (!/\bname\s*:/.test(fm))
166
+ findings.push({ severity: "MEDIUM", rule: "S100 missing-name", file: rel, line: 1, match: "frontmatter", why: "SKILL.md is missing a `name` in frontmatter." });
167
+ if (!/\bdescription\s*:/.test(fm))
168
+ findings.push({ severity: "MEDIUM", rule: "S101 missing-description", file: rel, line: 1, match: "frontmatter", why: "SKILL.md is missing a `description` in frontmatter." });
169
+ }
170
+
171
+ const push = (r, line, m) =>
172
+ findings.push({ severity: r.severity, rule: r.rule, file: rel, line, match: m[0].slice(0, 120), why: r.why });
173
+
174
+ // Command-style rules over code context (fenced blocks / whole scripts).
175
+ const cmdRules = RULES.filter((r) => r.context !== "prose");
176
+ for (const { line, text: lt } of codeLines(text, file)) {
177
+ for (const r of cmdRules) {
178
+ const m = r.re.exec(lt);
179
+ if (m) push(r, line, m);
180
+ }
181
+ }
182
+
183
+ // Prose rules (e.g. prompt-injection) scan the full natural-language text.
184
+ const proseRules = RULES.filter((r) => r.context === "prose");
185
+ if (proseRules.length) {
186
+ text.split(/\r?\n/).forEach((line, i) => {
187
+ for (const r of proseRules) {
188
+ const m = r.re.exec(line);
189
+ if (m) push(r, i + 1, m);
190
+ }
191
+ });
192
+ }
193
+ }
194
+
195
+ // Run
196
+ const files = SCAN_DIRS.flatMap((d) => walk(join(ROOT, d)));
197
+ files.forEach(scanFile);
198
+
199
+ const counts = { HIGH: 0, MEDIUM: 0, LOW: 0 };
200
+ findings.forEach((f) => (counts[f.severity] += 1));
201
+
202
+ if (JSON_OUT) {
203
+ console.log(JSON.stringify({ scanned: files.length, counts, findings }, null, 2));
204
+ } else {
205
+ const C = { HIGH: "\x1b[31m", MEDIUM: "\x1b[33m", LOW: "\x1b[36m", reset: "\x1b[0m" };
206
+ console.log(`\nskills-safety-scan — scanned ${files.length} file(s) in ${SCAN_DIRS.join(", ")}\n`);
207
+ if (findings.length === 0) {
208
+ console.log(" ✓ No issues found.\n");
209
+ } else {
210
+ for (const f of findings.sort((a, b) => ("HML".indexOf(a.severity[0]) - "HML".indexOf(b.severity[0])))) {
211
+ console.log(` ${C[f.severity]}${f.severity}${C.reset} ${f.rule}`);
212
+ console.log(` ${f.file}:${f.line}`);
213
+ console.log(` match: ${f.match}`);
214
+ console.log(` why: ${f.why}\n`);
215
+ }
216
+ }
217
+ console.log(`Summary: ${counts.HIGH} high, ${counts.MEDIUM} medium, ${counts.LOW} low\n`);
218
+ }
219
+
220
+ // Scanning zero files almost always means the target moved (renamed skill dir,
221
+ // wrong --root) rather than a clean repo — fail loudly instead of passing green.
222
+ const emptyScan = files.length === 0 && !ALLOW_EMPTY;
223
+ if (emptyScan) {
224
+ console.error(
225
+ `skills-safety-scan: ERROR — scanned 0 files under ${SCAN_DIRS.join(", ")}. ` +
226
+ `The scan target may have moved. Pass --allow-empty if this is intentional.`,
227
+ );
228
+ }
229
+
230
+ const fail = counts.HIGH > 0 || (STRICT && counts.MEDIUM > 0) || emptyScan;
231
+ process.exit(fail ? 1 : 0);