Files
openprose__prose/tools/cli/package.json
Raymond Weitekamp 9856ac5b12 feat(spec): declared ### Skills section with fail-closed compile resolution (#62)
* feat(spec): declared ### Skills section with fail-closed compile resolution

Implements the spec from issue #60. Components declare required harness
skills via a `### Skills` section (colon form, e.g. `document-skills:pdf`).
`prose compile` resolves declared skills against ./skills/, ~/.claude/skills/,
~/.codex/skills/, and ~/.agents/skills/, and fails closed with
`skill_unresolved` before forwarding to the agent harness when any are
missing.

- Spec: skills/open-prose/contract-markdown.md gains a ### Skills row in
  the Canonical Sections table and a ## Skills H2 covering colon naming,
  search order, the BYO-harness invariant, and fail-closed semantics.
- Implementation: tools/cli/src/skills/declared.ts (parser + resolver +
  directory walker + DeclaredSkillsUnresolvedError). Pure functions; no
  I/O beyond readFile / readdir / stat.
- Wiring: tools/cli/src/commands/compile.ts pre-checks declared skills
  before forwarding the compile prompt; fails closed with
  CompileValidationError when any are unresolved. Gated behind the
  existing skillPreflight option for test parity.
- Example: skills/open-prose/examples/declared-skills/ shows the
  document-skills:pdf canonical pattern.
- Tests: 19 new (18 in declared.test.ts covering parser/resolver/walker/
  error formatter; 1 in cli.test.ts asserting compile fails closed before
  the harness is invoked when a declared skill is missing).
- BYO harness: OpenProse never installs harness skills; resolution failure
  is the user's signal to install the named skill themselves.

Resolves #60.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* feat(spec): move skill resolution into compiler program; trim spec per review

Address review feedback on #62:

- contract-markdown.md: drop the "not duplicated in frontmatter" clause —
  the rejected alternative shouldn't propagate into the spec.
- contract-markdown.md: fail-closed clause now mentions only `prose compile`;
  `prose run` enforcement is deferred per the PR description.
- compiler/index.prose.md: add a `skills_resolver` agent that owns the
  search-path order, scope aggregation, BYO invariant, and fail-closed
  semantics. Skill resolution is now a compiler/program-level
  responsibility, not a harness responsibility, so other harnesses running
  the compiler get the same behavior.
- skills/declared.ts: add a header comment pointing at the program-level
  spec; this module is the harness implementation of `skills_resolver`.
- examples/declared-skills/README.md: update wording to reference the
  compiler agent.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(ci): make smoke artifacts case-specific

* fix(ci): use deterministic audit policy

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 13:50:01 -04:00

85 lines
1.9 KiB
JSON

{
"name": "@openprose/prose-cli",
"version": "0.13.1",
"description": "Run OpenProse commands through first-party Codex and Claude agent SDKs.",
"type": "module",
"packageManager": "npm@10.9.2",
"oclif": {
"bin": "prose",
"commands": {
"strategy": "explicit",
"target": "./dist/commands/index.js"
},
"additionalHelpFlags": [
"-h"
],
"additionalVersionFlags": [
"-V"
]
},
"repository": {
"type": "git",
"url": "git+https://github.com/openprose/prose.git",
"directory": "tools/cli"
},
"bugs": {
"url": "https://github.com/openprose/prose/issues"
},
"homepage": "https://github.com/openprose/prose/tree/main/tools/cli#readme",
"license": "MIT",
"bin": {
"prose": "dist/index.js"
},
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
},
"files": [
"dist",
"README.md",
"LICENSE"
],
"publishConfig": {
"access": "public",
"provenance": true
},
"scripts": {
"build": "npm run clean && tsc -p tsconfig.build.json",
"typecheck": "tsc -p tsconfig.json --noEmit",
"test": "vitest --run",
"audit:policy": "node scripts/audit-policy.mjs",
"smoke:harness": "node scripts/smoke-harness.mjs",
"dev": "tsx src/index.ts",
"clean": "rm -rf dist",
"release:tarball": "node scripts/build-release-tarball.mjs",
"prepack": "npm run build"
},
"keywords": [
"ai",
"cli",
"codex",
"openprose",
"prose"
],
"engines": {
"node": ">=18.14.1"
},
"dependencies": {
"@anthropic-ai/claude-agent-sdk": "^0.2.90",
"@hono/node-server": "^1.19.14",
"@oclif/core": "^4.10.6",
"@openai/codex-sdk": "^0.125.0",
"hono": "^4.12.16"
},
"devDependencies": {
"@types/node": "^20.19.39",
"tsx": "^4.19.2",
"typescript": "^5.7.3",
"vitest": "^3.2.4"
}
}