Files
ruflo/v3/@claude-flow/codex/package.json
T
rUvandClaude 1bd734e272 dream(security): #3102 bind ADR-377 caller-identity verification into live authorizeMcpTool chokepoint (evaluated, ACCEPT-with-caveats) (#3103)
* dream(security): #TBD bind ADR-377 caller-identity verification into live authorizeMcpTool chokepoint (evaluated, ACCEPT-with-caveats)

authorizeMcpTool() trusted the plain, unsigned CLAUDE_FLOW_PRINCIPAL_ID env
var as caller identity with zero verification (OWASP ASI07-class gap).
ADR-377 Phase 3 already implemented Ed25519 issueInvocationToken/
verifyInvocationToken but never wired it into a live dispatch path.

Binds the two: DualModeOrchestrator mints a per-worker signed
InvocationToken at spawn (worker-lifetime TTL, wildcard tool scope --
disclosed reduction from the primitive's original per-call design);
authorizeMcpTool verifies it before trusting identity, failing closed on
missing/forged/expired tokens. Off by default (CLAUDE_FLOW_MCP_CALLER_AUTH).

6 new deterministic Vitest scenarios plus an independent adversarial
critique (fresh session, verdict CONFIRMED-SAFE-WITH-CAVEATS) are recorded
in docs/dream-cycle/dream-gist-2026-08-26.md. Darwin skipped (scope
mismatch -- binary crypto gate, no tunable parameter space).

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_015bfVASxkNXKpZbMSLhVU1L

* fix(ci): register ADR-377 Phase 3 caller-identity env vars as known escape hatches

CLAUDE_FLOW_MCP_CALLER_PUBKEY and CLAUDE_FLOW_MCP_INVOCATION_TOKEN
(DualModeOrchestrator's per-worker Ed25519 credential pair, read by
resolveMcpCallerIdentity()) weren't registered in
audit-env-var-precedence.mjs's KNOWN_ESCAPE_HATCHES, so the audit flagged
CLAUDE_FLOW_MCP_CALLER_PUBKEY as a real violation (exit 1). Same no-CLI-flag
reasoning as the existing CLAUDE_FLOW_PRINCIPAL_ID entry: these are
credentials minted into a spawned worker's own environment, not a value
any caller should be able to select via a flag.

Verified: audit-env-var-precedence.mjs now exits 0. policy-runtime.test.ts
still 18/18.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01RYP825phHMjPRmmjkcAWpq

* fix(ci): regenerate root package-lock.json for codex's new @claude-flow/security dep

The CI Test Suite job runs plain `npm ci` at repo root (no v3 pnpm
install step), so it resolves workspace deps strictly from
package-lock.json — not from v3/pnpm-lock.yaml, which this PR had
already updated. codex/package.json's new @claude-flow/security
dependency was missing from package-lock.json's codex entry, so CI's
npm ci never linked it and every dual-mode test importing
orchestrator.ts failed with "Cannot find package '@claude-flow/security'".

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01RYP825phHMjPRmmjkcAWpq

* fix(ci): build @claude-flow/security before Test Suite runs it

Complements d492ea835 (codex's package-lock.json entry) rather than
duplicating it: that commit fixed `npm ci` not *linking*
@claude-flow/security for codex at all ("Cannot find package"); this
fixes the fact that even where it IS linked (codex now, @claude-flow/cli
already), nothing builds its dist/ before tests run, so importers hit
ERR_MODULE_NOT_FOUND on dist/index.js instead.

This was already a known, pre-existing gap for @claude-flow/cli:
v3/@claude-flow/cli/__tests__/policy-runtime.test.ts has carried a
scripts/ci-test-baseline.txt entry for exactly this reason since before
this PR existed. dual-mode.test.ts and dual-mode-stdin-2947.test.ts
(added by the caller-identity candidate on this branch) newly trip the
same gap in @claude-flow/codex, confirmed by diffing main's own Test
Suite ratchet failures (3, pre-existing, unrelated oauth/publisher
plugin tests) against this branch's (5: the same 3 plus these 2). Adding
new files to ci-test-baseline.txt to paper over this is explicitly
forbidden by that file's own header ("Never add entries to make a
regression green"), and gutting the tests to avoid the import would
remove real coverage of the orchestrator/security integration point.

Real fix: build @claude-flow/security before "Run all tests", using its
own existing `npm run build` (tsc && verify-oauth-exports.mjs). Verified
locally end-to-end by removing both dist/ and the stale
tsconfig.tsbuildinfo (simulating a fresh CI checkout, since both are
gitignored) -- the build step produces a full dist/, both new codex test
files pass, and (bonus, explicitly allowed by the baseline file's own
"remove entries when fixed" rule) the pre-existing policy-runtime.test.ts
baseline entry is now consistently green too, so it's removed here.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_015bfVASxkNXKpZbMSLhVU1L

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-09-14 21:05:45 +00:00

119 lines
2.9 KiB
JSON

{
"name": "@claude-flow/codex",
"version": "3.0.3",
"description": "Codex CLI integration for Ruflo (claude-flow) - OpenAI Codex platform adapter",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"bin": {
"claude-flow-codex": "dist/cli.js"
},
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"require": "./dist/index.js",
"default": "./dist/index.js"
},
"./generators": {
"types": "./dist/generators/index.d.ts",
"import": "./dist/generators/index.js",
"require": "./dist/generators/index.js"
},
"./templates": {
"types": "./dist/templates/index.d.ts",
"import": "./dist/templates/index.js",
"require": "./dist/templates/index.js"
},
"./migrations": {
"types": "./dist/migrations/index.d.ts",
"import": "./dist/migrations/index.js",
"require": "./dist/migrations/index.js"
},
"./dual-mode": {
"types": "./dist/dual-mode/index.d.ts",
"import": "./dist/dual-mode/index.js",
"require": "./dist/dual-mode/index.js"
},
"./loop": {
"types": "./dist/loop/index.d.ts",
"import": "./dist/loop/index.js",
"require": "./dist/loop/index.js"
},
"./worktrees": {
"types": "./dist/worktrees/index.d.ts",
"import": "./dist/worktrees/index.js",
"require": "./dist/worktrees/index.js"
},
"./harness": {
"types": "./dist/harness/index.d.ts",
"import": "./dist/harness/index.js",
"require": "./dist/harness/index.js"
}
},
"files": [
"dist",
".agents/skills"
],
"scripts": {
"build": "tsc",
"dev": "tsc --watch",
"lint": "eslint src --ext .ts",
"test": "vitest",
"prepublishOnly": "npm run build"
},
"keywords": [
"codex",
"openai",
"claude-flow",
"coflow",
"agents",
"skills",
"AGENTS.md",
"agentic-ai"
],
"author": "rUv",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/ruvnet/ruflo.git",
"directory": "v3/@claude-flow/codex"
},
"homepage": "https://github.com/ruvnet/ruflo#readme",
"bugs": {
"url": "https://github.com/ruvnet/ruflo/issues"
},
"engines": {
"node": ">=18"
},
"peerDependencies": {
"@claude-flow/cli": "^3.0.0"
},
"peerDependenciesMeta": {
"@claude-flow/cli": {
"optional": true
}
},
"dependencies": {
"commander": "^12.0.0",
"fs-extra": "^11.2.0",
"chalk": "^5.3.0",
"inquirer": "^9.2.0",
"yaml": "^2.4.0",
"toml": "^3.0.0",
"@iarna/toml": "^2.2.5",
"@claude-flow/security": "3.0.0-alpha.14"
},
"devDependencies": {
"@types/fs-extra": "^11.0.4",
"@types/node": "^20.0.0",
"typescript": "^5.4.0",
"vitest": "^4.1.0",
"eslint": "^8.57.0"
},
"publishConfig": {
"access": "public",
"tag": "latest"
}
}