@holdyourvoice/hyv 3.5.1 → 3.6.1

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.
Files changed (48) hide show
  1. package/Readme.md +5 -59
  2. package/dist/ai-editor.js +4 -20
  3. package/dist/cli/agents.js +108 -0
  4. package/dist/cli/checks.js +226 -0
  5. package/dist/cli/context.test.js +55 -0
  6. package/dist/cli/io.js +137 -0
  7. package/dist/cli/lifecycle.js +162 -0
  8. package/dist/cli/profiles.js +246 -0
  9. package/dist/cli/rewriting.js +111 -0
  10. package/dist/cli.js +5 -974
  11. package/dist/cli.test.js +1 -1
  12. package/dist/hold-your-voice.mcpb +0 -0
  13. package/dist/learning.js +16 -9
  14. package/dist/mcp-tools.js +8 -17
  15. package/dist/mcp.js +12 -18
  16. package/dist/mirror-refs.test.js +4 -4
  17. package/dist/pipeline.js +30 -31
  18. package/dist/pipeline.test.js +5 -3
  19. package/dist/rebuild-task.js +4 -27
  20. package/dist/rebuild-task.test.js +1 -1
  21. package/dist/rewrite-response.js +27 -0
  22. package/dist/rewrite-task.js +9 -35
  23. package/dist/rewrite-task.test.js +10 -9
  24. package/dist/strict-quality.js +1 -2
  25. package/dist/strict-quality.test.js +3 -3
  26. package/dist/version.js +1 -1
  27. package/package.json +1 -1
  28. package/skills/hyv-analyze/SKILL.md +1 -1
  29. package/skills/hyv-analyze/agents/openai.yaml +1 -1
  30. package/skills/hyv-apply-rebuild/SKILL.md +1 -0
  31. package/skills/hyv-apply-rebuild/agents/openai.yaml +1 -1
  32. package/skills/hyv-apply-rewrite/SKILL.md +1 -0
  33. package/skills/hyv-apply-rewrite/agents/openai.yaml +1 -1
  34. package/skills/hyv-prepare-rebuild/SKILL.md +1 -0
  35. package/skills/hyv-prepare-rebuild/agents/openai.yaml +1 -1
  36. package/skills/hyv-prepare-rewrite/SKILL.md +1 -0
  37. package/skills/hyv-prepare-rewrite/agents/openai.yaml +1 -1
  38. package/skills/hyv-rebuild-writer-request/SKILL.md +1 -0
  39. package/skills/hyv-rebuild-writer-request/agents/openai.yaml +1 -1
  40. package/skills/hyv-rewrite-prompt/SKILL.md +4 -3
  41. package/skills/hyv-rewrite-prompt/agent.json +1 -1
  42. package/skills/hyv-rewrite-prompt/agents/openai.yaml +2 -2
  43. package/skills/hyv-strict-check/SKILL.md +3 -3
  44. package/skills/hyv-verify/SKILL.md +2 -1
  45. package/skills/hyv-verify/agents/openai.yaml +1 -1
  46. package/skills/hyv-verify-spec/SKILL.md +3 -2
  47. package/skills/hyv-verify-spec/agent.json +1 -1
  48. package/skills/hyv-verify-spec/agents/openai.yaml +2 -2
@@ -8,8 +8,7 @@ function finding(id, disposition, reason, suggestion, sentence) {
8
8
  }
9
9
  function strictFinding(source, profile) {
10
10
  if (source.engine === 'ai_editor') {
11
- const disposition = source.appliedPolicy === 'blocking' ? 'block' : 'review';
12
- return finding(`strict.${source.engine}.${source.id}`, disposition, source.reason, source.suggestion, source.sentence);
11
+ return finding(`strict.${source.engine}.${source.id}`, 'block', source.reason, source.suggestion, source.sentence);
13
12
  }
14
13
  if (source.engine === 'voice_dna') {
15
14
  if (source.severity === 'red')
@@ -45,10 +45,10 @@ test('blocks an underpowered or uncalibrated voice profile before trusting voice
45
45
  const mixedFormatReport = evaluateStrictQuality('The launch starts Tuesday.', profile(), mixedFormats);
46
46
  assert.ok(mixedFormatReport.findings.some((item) => item.id === 'strict.profile.format-spread'));
47
47
  });
48
- test('requires human review for a judgment-required AI pattern and blocks a configured one', () => {
48
+ test('blocks every active AI Editor pattern under strict quality', () => {
49
49
  const review = evaluateStrictQuality('We leverage the existing checklist.', profile(), samples());
50
- assert.equal(review.disposition, 'needs-human-review');
51
- assert.ok(review.findings.some((item) => item.id === 'strict.ai_editor.ai.leverage' && item.disposition === 'review'));
50
+ assert.equal(review.disposition, 'blocked');
51
+ assert.ok(review.findings.some((item) => item.id === 'strict.ai_editor.ai.leverage' && item.disposition === 'block'));
52
52
  const blockedProfile = profile();
53
53
  blockedProfile.rulePolicy['ai.leverage'] = 'blocking';
54
54
  const blocked = evaluateStrictQuality('We leverage the existing checklist.', blockedProfile, samples());
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const HYV_VERSION = '3.5.1';
1
+ export const HYV_VERSION = '3.6.1';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@holdyourvoice/hyv",
3
- "version": "3.5.1",
3
+ "version": "3.6.1",
4
4
  "description": "A local-first dual-engine writing gate that protects voice and catches generic AI patterns.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -23,4 +23,4 @@ hyv analyze draft.md profile.json [writing-brief.json]
23
23
 
24
24
  ## Handoff
25
25
 
26
- Run `hyv analyze` directly to execute the operation. For ordinary editing, follow on with hyv-rewrite-prompt or hyv-prepare-rewrite. When the caller asks for a strict AI-pattern and voice-match decision, hand off to hyv-strict-check with a calibrated Profile v3 and the required local samples; analysis alone is not a strict-ready result.
26
+ Run `hyv analyze` directly to execute the operation. Follow with hyv-rewrite-prompt or hyv-prepare-rewrite: both use strict-by-default repair scope, so every active AI Editor finding becomes a required repair. For calibrated voice evidence, hand off to hyv-strict-check with a Profile v3 and the required local samples; analysis alone is not a strict-ready result.
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Hyv Analyze"
3
3
  short_description: "Run separate VoiceDNA and AI Editor checks plus a non-scoring Unicode hygiene inspection against a draft."
4
- default_prompt: "Use $hyv-analyze to run separate voicedna and ai editor checks plus a non-scoring unicode hygiene inspection against a draft."
4
+ default_prompt: "Use $hyv-analyze to inspect this draft, then use the strict-by-default rewrite workflow so every active AI Editor finding is repaired."
@@ -16,6 +16,7 @@ hyv apply-rebuild task.json response.json profile.json (--capability-stdin|--cap
16
16
  ## Behavior
17
17
 
18
18
  - Deterministic and local-first: this command never calls a provider and never sends drafts, samples, profiles, or telemetry to a service.
19
+ - Strict by default: evaluation rejects a rebuild candidate with any unresolved active AI Editor finding.
19
20
  - Commands that write use an explicit output path. Confirm that path before running the command.
20
21
  - This agent describes how to invoke the command and what it returns. It does not change command behavior or exit codes.
21
22
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Hyv Apply Rebuild"
3
3
  short_description: "Validate and evaluate a whole-document rebuild response against a prepared authorized rebuild task."
4
- default_prompt: "Use $hyv-apply-rebuild to validate and evaluate a whole-document rebuild response against a prepared authorized rebuild task."
4
+ default_prompt: "Use $hyv-apply-rebuild to reject a whole-document rebuild response with any unresolved active AI Editor finding."
@@ -16,6 +16,7 @@ hyv apply-rewrite task.json response.json profile.json
16
16
  ## Behavior
17
17
 
18
18
  - Deterministic and local-first: this command never calls a provider and never sends drafts, samples, profiles, or telemetry to a service.
19
+ - The task's default strict policy rejects the candidate at deterministic verification when an active AI Editor finding remains. A successful deterministic result is not calibrated `strict-ready` voice evidence.
19
20
  - Commands that write use an explicit output path. Confirm that path before running the command.
20
21
  - This agent describes how to invoke the command and what it returns. It does not change command behavior or exit codes.
21
22
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Hyv Apply Rewrite"
3
3
  short_description: "Validate and apply a model response to a prepared rewrite task, then run local gates."
4
- default_prompt: "Use $hyv-apply-rewrite to validate and apply a model response to a prepared rewrite task, then run local gates."
4
+ default_prompt: "Use $hyv-apply-rewrite to validate a response through the strict default local gates."
@@ -16,6 +16,7 @@ hyv prepare-rebuild draft.md profile.json reduction.json copy-spec.json task.jso
16
16
  ## Behavior
17
17
 
18
18
  - Deterministic and local-first: this command never calls a provider and never sends drafts, samples, profiles, or telemetry to a service.
19
+ - Strict by default: the later rebuild evaluation rejects a candidate with any unresolved active AI Editor finding.
19
20
  - Commands that write use an explicit output path. Confirm that path before running the command.
20
21
  - This agent describes how to invoke the command and what it returns. It does not change command behavior or exit codes.
21
22
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Hyv Prepare Rebuild"
3
3
  short_description: "Prepare a rebuild task only after an upstream REBUILD recommendation, a CopySpec, and a signed rebuild-authorization capability."
4
- default_prompt: "Use $hyv-prepare-rebuild to prepare a rebuild task only after an upstream rebuild recommendation, a copyspec, and a signed rebuild-authorization capability."
4
+ default_prompt: "Use $hyv-prepare-rebuild to prepare a strict rebuild task only after an upstream rebuild recommendation, a copyspec, and a signed rebuild-authorization capability."
@@ -16,6 +16,7 @@ hyv prepare-rewrite draft.md profile.json task.json [copy-spec.json] [writing-br
16
16
  ## Behavior
17
17
 
18
18
  - Deterministic and local-first: this command never calls a provider and never sends drafts, samples, profiles, or telemetry to a service.
19
+ - Strict by default: the task authorizes repairs for every active AI Editor finding and keeps unrelated sentences locked.
19
20
  - Commands that write use an explicit output path. Confirm that path before running the command.
20
21
  - This agent describes how to invoke the command and what it returns. It does not change command behavior or exit codes.
21
22
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Hyv Prepare Rewrite"
3
3
  short_description: "Prepare a local, versioned, fingerprint-bound rewrite task."
4
- default_prompt: "Use $hyv-prepare-rewrite to prepare a local, versioned, fingerprint-bound rewrite task."
4
+ default_prompt: "Use $hyv-prepare-rewrite to prepare a strict local, versioned, fingerprint-bound rewrite task."
@@ -16,6 +16,7 @@ hyv rebuild-writer-request task.json writer-request.json
16
16
  ## Behavior
17
17
 
18
18
  - Deterministic and local-first: this command never calls a provider and never sends drafts, samples, profiles, or telemetry to a service.
19
+ - The resulting whole-document candidate remains subject to strict default verification: every active AI Editor finding must be repaired before it can proceed.
19
20
  - Commands that write use an explicit output path. Confirm that path before running the command.
20
21
  - This agent describes how to invoke the command and what it returns. It does not change command behavior or exit codes.
21
22
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Hyv Rebuild Writer Request"
3
3
  short_description: "Create the writer-only payload for a prepared rebuild task."
4
- default_prompt: "Use $hyv-rebuild-writer-request to create the writer-only payload for a prepared rebuild task."
4
+ default_prompt: "Use $hyv-rebuild-writer-request to create the writer-only payload for a prepared rebuild task that will receive strict default verification."
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: hyv-rewrite-prompt
3
- description: Create a constrained editing brief without rewriting the draft.
3
+ description: Create a strict constrained editing brief without rewriting the draft.
4
4
  ---
5
5
 
6
6
  # hyv-rewrite-prompt
7
7
 
8
- Create a constrained editing brief. It does not rewrite the draft or call a model. The brief is printed to stdout for redirect into a markdown file.
8
+ Create a strict constrained editing brief. It does not rewrite the draft or call a model. The brief is printed to stdout for redirect into a markdown file.
9
9
 
10
10
  ## Usage
11
11
 
@@ -16,9 +16,10 @@ hyv rewrite-prompt draft.md profile.json [writing-brief.json] > rewrite-brief.md
16
16
  ## Behavior
17
17
 
18
18
  - Deterministic and local-first: this command never calls a provider and never sends drafts, samples, profiles, or telemetry to a service.
19
+ - Strict by default: every active AI Editor finding is a required, source-faithful repair. Do not return a candidate with an active finding unresolved; a separate calibrated `hyv-strict-check` is required only when the caller needs a `strict-ready` voice-evidence result.
19
20
  - Commands that write use an explicit output path. Confirm that path before running the command.
20
21
  - This agent describes how to invoke the command and what it returns. It does not change command behavior or exit codes.
21
22
 
22
23
  ## Handoff
23
24
 
24
- Run `hyv rewrite-prompt` directly to execute the operation. Follow-on agents: hyv-prepare-rewrite.
25
+ Run `hyv rewrite-prompt` directly to execute the operation. Follow-on agents: hyv-prepare-rewrite, hyv-verify.
@@ -2,7 +2,7 @@
2
2
  "schema_version": "1.0.0",
3
3
  "id": "hyv-rewrite-prompt",
4
4
  "title": "hyv-rewrite-prompt",
5
- "description": "Create a constrained editing brief without rewriting the draft.",
5
+ "description": "Create a strict constrained editing brief without rewriting the draft.",
6
6
  "instruction_file": "SKILL.md",
7
7
  "role": "Brief author",
8
8
  "workflow_phase": "plan",
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Hyv Rewrite Prompt"
3
- short_description: "Create a constrained editing brief without rewriting the draft."
4
- default_prompt: "Use $hyv-rewrite-prompt to create a constrained editing brief without rewriting the draft."
3
+ short_description: "Create a strict editing brief without rewriting the draft."
4
+ default_prompt: "Use $hyv-rewrite-prompt to create a strict constrained editing brief that requires repair of every active AI Editor finding."
@@ -5,7 +5,7 @@ description: Run the local strict AI-pattern and calibrated voice-match gate.
5
5
 
6
6
  # hyv-strict-check
7
7
 
8
- Run the opt-in strict local quality gate without changing the draft, profile, or learning state.
8
+ Run the calibrated strict local quality gate without changing the draft, profile, or learning state.
9
9
 
10
10
  ## Usage
11
11
 
@@ -17,8 +17,8 @@ hyv strict-check draft.md profile-v3.json sample-a.md sample-b.md sample-c.md sa
17
17
 
18
18
  - Requires a Profile v3 built from at least five samples, five or more local validation samples, 1,500 validation-sample words, no duplicate samples, a consistent visible format baseline, and calibrated fingerprint tolerances.
19
19
  - Returns `strict-ready`, `needs-human-review`, or `blocked` as JSON and exits `0` only for `strict-ready`.
20
- - `blocked` covers missing strict evidence, configured blocking AI patterns, hard calibrated fingerprint drift, red VoiceDNA findings, and unresolved hidden text.
21
- - `needs-human-review` keeps advisory and judgment-required AI patterns visible. It is not a clean result.
20
+ - `blocked` covers missing strict evidence, every active AI Editor pattern, hard calibrated fingerprint drift, red VoiceDNA findings, and unresolved hidden text.
21
+ - `needs-human-review` covers remaining non-blocking VoiceDNA or editorial review findings. It is not a clean result.
22
22
  - It remains local-first and never sends samples or drafts to a provider.
23
23
 
24
24
  ## Handoff
@@ -16,9 +16,10 @@ hyv verify original.md candidate.md profile.json [writing-brief.json]
16
16
  ## Behavior
17
17
 
18
18
  - Deterministic and local-first: this command never calls a provider and never sends drafts, samples, profiles, or telemetry to a service.
19
+ - Strict by default: verification fails when the candidate has any active AI Editor finding, including an advisory or judgment-required match. An explicit Profile v3 `disabled` policy remains a deliberate user exception.
19
20
  - Commands that write use an explicit output path. Confirm that path before running the command.
20
21
  - This agent describes how to invoke the command and what it returns. It does not change command behavior or exit codes.
21
22
 
22
23
  ## Handoff
23
24
 
24
- Run `hyv verify` directly to execute the operation. If the candidate must satisfy the strict AI-pattern and voice-match policy, run hyv-strict-check before any lifecycle handoff. A passing verify report does not substitute for strict-ready. Follow-on agents: hyv-strict-check, hyv-lifecycle.
25
+ Run `hyv verify` directly to execute the operation. For calibrated voice evidence, run hyv-strict-check before any lifecycle handoff. A passing verify report does not substitute for strict-ready. Follow-on agents: hyv-strict-check, hyv-lifecycle.
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Hyv Verify"
3
3
  short_description: "Verify a revised candidate against an original draft and portable profile."
4
- default_prompt: "Use $hyv-verify to verify a revised candidate against an original draft and portable profile."
4
+ default_prompt: "Use $hyv-verify to reject any revised candidate with an unresolved active AI Editor finding."
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: hyv-verify-spec
3
- description: Verify a candidate against the existing voice gates and a local CopySpec.
3
+ description: Verify a candidate against strict default voice gates and a local CopySpec.
4
4
  ---
5
5
 
6
6
  # hyv-verify-spec
7
7
 
8
- Verify a candidate against the existing voice gates and a local CopySpec. Immutable claims remain verbatim unless atoms are supplied; then each declared atom must remain. Prohibited claims fail closed.
8
+ Verify a candidate against strict default voice gates and a local CopySpec. Immutable claims remain verbatim unless atoms are supplied; then each declared atom must remain. Prohibited claims fail closed.
9
9
 
10
10
  ## Usage
11
11
 
@@ -16,6 +16,7 @@ hyv verify-spec original.md candidate.md profile.json copy-spec.json [writing-br
16
16
  ## Behavior
17
17
 
18
18
  - Deterministic and local-first: this command never calls a provider and never sends drafts, samples, profiles, or telemetry to a service.
19
+ - Strict by default: verification fails when the candidate has any active AI Editor finding, in addition to CopySpec failures.
19
20
  - Commands that write use an explicit output path. Confirm that path before running the command.
20
21
  - This agent describes how to invoke the command and what it returns. It does not change command behavior or exit codes.
21
22
 
@@ -2,7 +2,7 @@
2
2
  "schema_version": "1.0.0",
3
3
  "id": "hyv-verify-spec",
4
4
  "title": "hyv-verify-spec",
5
- "description": "Verify a candidate against the existing voice gates and a local CopySpec.",
5
+ "description": "Verify a candidate against strict default voice gates and a local CopySpec.",
6
6
  "instruction_file": "SKILL.md",
7
7
  "role": "CopySpec verifier",
8
8
  "workflow_phase": "verify",
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Hyv Verify Spec"
3
- short_description: "Verify a candidate against the existing voice gates and a local CopySpec."
4
- default_prompt: "Use $hyv-verify-spec to verify a candidate against the existing voice gates and a local copyspec."
3
+ short_description: "Verify a candidate against strict default voice gates and a local CopySpec."
4
+ default_prompt: "Use $hyv-verify-spec to reject a candidate with any active AI Editor finding or CopySpec failure."