cabloy 5.1.190 → 5.1.192

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 (101) hide show
  1. package/.cabloy-version +1 -1
  2. package/.github/workflows/agent-governance.yml +39 -0
  3. package/.github/workflows/docs-pages.yml +1 -0
  4. package/.gitignore +3 -0
  5. package/CHANGELOG.md +17 -0
  6. package/README.md +2 -2
  7. package/package.json +11 -5
  8. package/repo-agent-governance/adapters/claude/contract-loop-gate.ts +199 -0
  9. package/{.claude → repo-agent-governance}/commands/release.md +20 -20
  10. package/repo-agent-governance/managed-assets.json +887 -0
  11. package/repo-agent-governance/manifest.json +56 -0
  12. package/{CLAUDE.md → repo-agent-governance/policies/repository.md} +4 -2
  13. package/repo-agent-governance/scripts/governance.mjs +570 -0
  14. package/repo-agent-governance/scripts/pack-check.mjs +43 -0
  15. package/{.claude → repo-agent-governance}/skills/cabloy-contract-loop/references/contract-loop-map.md +4 -4
  16. package/{.claude → repo-agent-governance}/skills/cabloy-master-detail/SKILL.md +1 -1
  17. package/{.claude → repo-agent-governance}/skills/cabloy-module-removal/SKILL.md +1 -1
  18. package/{.claude → repo-agent-governance}/skills/cabloy-spec-execution/SKILL.md +1 -1
  19. package/{.claude → repo-agent-governance}/skills/cabloy-spec-execution/references/execution-protocol.md +8 -8
  20. package/{.claude → repo-agent-governance}/skills/cabloy-spec-execution/references/status-and-evidence.md +9 -9
  21. package/{.claude → repo-agent-governance}/skills/cabloy-spec-generation/SKILL.md +2 -2
  22. package/{.claude → repo-agent-governance}/skills/cabloy-spec-generation/references/repo-aware-discovery.md +7 -7
  23. package/{.claude → repo-agent-governance}/skills/cabloy-spec-generation/references/repo-specs-document-set.md +30 -30
  24. package/{.claude → repo-agent-governance}/skills/cabloy-spec-generation/references/traceability-and-status-rules.md +9 -9
  25. package/{.claude → repo-agent-governance}/skills/cabloy-workflow/SKILL.md +7 -8
  26. package/{.claude → repo-agent-governance}/skills/cabloy-worktree-environment/SKILL.md +9 -9
  27. package/{.claude → repo-agent-governance}/skills/cabloy-zova-source-reading/SKILL.md +5 -5
  28. package/repo-agent-governance/tests/governance.test.mjs +295 -0
  29. package/repo-agent-governance/tools/contract-loop/check.mjs +71 -0
  30. package/repo-agent-governance/tools/contract-loop/core.mjs +189 -0
  31. package/repo-agent-governance/tools/spec-charts/generate-implementation-charts.mjs +858 -0
  32. package/{.claude/skills/cabloy-spec-generation/scripts → repo-agent-governance/tools/spec-charts}/generate-implementation-charts.test.mjs +95 -20
  33. package/repo-docs/.vitepress/config.mjs +2 -0
  34. package/repo-docs/ai/agent-governance.md +80 -0
  35. package/repo-docs/ai/cli-to-skill-map.md +3 -3
  36. package/repo-docs/ai/docs-skills-rules-mapping.md +27 -26
  37. package/repo-docs/ai/edition-consistency-checklist.md +8 -6
  38. package/repo-docs/ai/future-skill-roadmap.md +2 -2
  39. package/repo-docs/ai/introduction.md +7 -6
  40. package/repo-docs/ai/repo-guidance.md +3 -2
  41. package/repo-docs/ai/rules-and-config.md +23 -15
  42. package/repo-docs/ai/skills.md +7 -7
  43. package/repo-docs/ai/verification.md +2 -1
  44. package/repo-docs/demo.md +12 -0
  45. package/repo-docs/fullstack/contract-loop-playbook.md +1 -1
  46. package/repo-docs/fullstack/quickstart.md +1 -1
  47. package/repo-docs/index.md +3 -0
  48. package/repo-docs/reference/package-map.md +3 -2
  49. package/repo-docs/reference/repo-scripts.md +17 -2
  50. package/scripts/bootstrapAgentGovernance.mjs +81 -0
  51. package/scripts/init.ts +1 -0
  52. package/scripts/release.ts +15 -0
  53. package/scripts/upgrade.ts +66 -7
  54. package/zova/packages-zova/zova/package.json +2 -2
  55. package/zova/pnpm-lock.yaml +3 -3
  56. package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +2 -7
  57. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionOperationsRow.tsx +19 -13
  58. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockDetails/controller.tsx +11 -0
  59. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockToolbarBulk/controller.tsx +7 -4
  60. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/formFieldDetails/controller.tsx +14 -0
  61. package/zova/src/suite/cabloy-basic/modules/basic-details/src/lib/detailsPermissions.ts +65 -0
  62. package/zova/src/suite/cabloy-basic/modules/basic-details/src/lib/index.ts +1 -0
  63. package/zova/src/suite/cabloy-basic/modules/basic-details/src/lib/utils.ts +3 -3
  64. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/details.ts +6 -1
  65. package/zova/src/suite/cabloy-basic/modules/basic-details/test/lib/detailsPermissions.test.ts +125 -0
  66. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  67. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/permissions.ts +2 -8
  68. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
  69. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +2 -1
  70. package/zova/src/suite-vendor/a-zova/package.json +3 -3
  71. package/.claude/hooks/contract-loop-gate.ts +0 -421
  72. package/.claude/scheduled_tasks.lock +0 -1
  73. package/.claude/skills/cabloy-spec-generation/scripts/generate-implementation-charts.mjs +0 -385
  74. /package/{.claude → repo-agent-governance/adapters/claude}/settings.json +0 -0
  75. /package/{.claude → repo-agent-governance}/skills/cabloy-backend-scaffold/SKILL.md +0 -0
  76. /package/{.claude → repo-agent-governance}/skills/cabloy-backend-scaffold/evals/evals.json +0 -0
  77. /package/{.claude → repo-agent-governance}/skills/cabloy-backend-scaffold/references/backend-thread-map.md +0 -0
  78. /package/{.claude → repo-agent-governance}/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +0 -0
  79. /package/{.claude → repo-agent-governance}/skills/cabloy-contract-loop/SKILL.md +0 -0
  80. /package/{.claude → repo-agent-governance}/skills/cabloy-contract-loop/evals/evals.json +0 -0
  81. /package/{.claude → repo-agent-governance}/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +0 -0
  82. /package/{.claude → repo-agent-governance}/skills/cabloy-contract-loop/references/verification-checklist.md +0 -0
  83. /package/{.claude → repo-agent-governance}/skills/cabloy-domain-planning/SKILL.md +0 -0
  84. /package/{.claude → repo-agent-governance}/skills/cabloy-frontend-scaffold/SKILL.md +0 -0
  85. /package/{.claude → repo-agent-governance}/skills/cabloy-frontend-scaffold/evals/evals.json +0 -0
  86. /package/{.claude → repo-agent-governance}/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +0 -0
  87. /package/{.claude → repo-agent-governance}/skills/cabloy-frontend-scaffold/references/frontend-thread-map.md +0 -0
  88. /package/{.claude → repo-agent-governance}/skills/cabloy-resource-field-update/SKILL.md +0 -0
  89. /package/{.claude → repo-agent-governance}/skills/cabloy-resource-field-update/evals/evals.json +0 -0
  90. /package/{.claude → repo-agent-governance}/skills/cabloy-resource-field-update/references/custom-renderer-demo-checklist.md +0 -0
  91. /package/{.claude → repo-agent-governance}/skills/cabloy-resource-field-update/references/field-update-decision-tree.md +0 -0
  92. /package/{.claude → repo-agent-governance}/skills/cabloy-resource-field-update/references/follow-up-checklist.md +0 -0
  93. /package/{.claude → repo-agent-governance}/skills/cabloy-resource-field-update/references/verification-checklist.md +0 -0
  94. /package/{.claude → repo-agent-governance}/skills/cabloy-spec-execution/evals/evals.json +0 -0
  95. /package/{.claude → repo-agent-governance}/skills/cabloy-spec-generation/evals/evals.json +0 -0
  96. /package/{.claude → repo-agent-governance}/skills/cabloy-workflow/evals/evals.json +0 -0
  97. /package/{.claude → repo-agent-governance}/skills/cabloy-workflow/references/cli-strategy.md +0 -0
  98. /package/{.claude → repo-agent-governance}/skills/cabloy-workflow/references/edition-detection.md +0 -0
  99. /package/{.claude → repo-agent-governance}/skills/cabloy-worktree-environment/evals/evals.json +0 -0
  100. /package/{.claude → repo-agent-governance}/skills/cabloy-zova-source-reading/references/analysis-modes.md +0 -0
  101. /package/{.claude → repo-agent-governance}/skills/cabloy-zova-source-reading/references/core-reading-paths.md +0 -0
package/.cabloy-version CHANGED
@@ -1 +1 @@
1
- 5.1.190
1
+ 5.1.192
@@ -0,0 +1,39 @@
1
+ name: agent-governance
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ verify:
15
+ runs-on: ubuntu-latest
16
+ env:
17
+ PNPM_CONFIG_MINIMUM_RELEASE_AGE: 0
18
+ steps:
19
+ - uses: actions/checkout@v6
20
+ - uses: pnpm/action-setup@v5
21
+ with:
22
+ version: 11.5.2
23
+ - uses: actions/setup-node@v6
24
+ with:
25
+ node-version: 24
26
+ cache: pnpm
27
+ - name: install root dependencies
28
+ run: pnpm install --frozen-lockfile
29
+ - name: install docs dependencies
30
+ run: pnpm --dir repo-docs install --frozen-lockfile
31
+ - name: verify agent-governance assets
32
+ run: |
33
+ npm run test:agent-governance
34
+ npm run agent:governance:check
35
+ npm run agent:governance:pack-check
36
+ npm run test:spec-charts
37
+ npm run spec:charts:check -- a-commerce
38
+ - name: build documentation
39
+ run: npm run docs:build
@@ -5,6 +5,7 @@ on:
5
5
  - main
6
6
  paths:
7
7
  - 'repo-docs/**'
8
+ - 'repo-agent-governance/**'
8
9
  - 'repo-e2e/docs/**'
9
10
  - 'package.json'
10
11
  - 'pnpm-lock.yaml'
package/.gitignore CHANGED
@@ -78,3 +78,6 @@ vona/docker-compose.yml
78
78
  !/zova/packages-utils/quasar-app-extension-zova/dist
79
79
 
80
80
  **/assets/site
81
+
82
+ **/.claude/scheduled_tasks.lock
83
+ .cabloy-agent-governance-state.json
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.192
4
+
5
+ ### Features
6
+
7
+ - Update core functionality.
8
+ - Add agents for Claude Code, Codex, and Cursor.
9
+
10
+ ## 5.1.191
11
+
12
+ ### Features
13
+
14
+ - Update functionality with the latest enhancements.
15
+
16
+ ### Improvements
17
+
18
+ - Refresh the demo and documentation in the README and index pages.
19
+
3
20
  ## 5.1.190
4
21
 
5
22
  ### Features
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![npm version](https://img.shields.io/npm/v/cabloy.svg?style=flat-square&label=cabloy)](https://www.npmjs.com/package/cabloy)
5
5
  [![npm downloads](https://img.shields.io/npm/dm/cabloy?color=orange&label=downloads)](https://www.npmjs.com/package/cabloy)
6
6
  [![Docs](https://img.shields.io/badge/docs-cabloy-4f46e5.svg?style=flat-square)](https://cabloy.com)
7
- [![Demo](https://img.shields.io/badge/demo-cabloy.com-059669.svg?style=flat-square)](https://cabloy.com)
7
+ [![Demo](https://img.shields.io/badge/demo-cabloy.com-059669.svg?style=flat-square)](https://cabloy.com/demo)
8
8
 
9
9
  Cabloy is a Node.js fullstack framework for AI vibe coding, with AI Spec-Driven Development for traceable, evidence-backed delivery.
10
10
 
@@ -12,7 +12,7 @@ Cabloy is a Node.js fullstack framework for AI vibe coding, with AI Spec-Driven
12
12
 
13
13
  Instead of stitching separate backend and frontend stacks together, Cabloy keeps their contracts, tooling, and guidance connected in one repository. [AI Spec-Driven Development](https://cabloy.com/ai/ai-spec-driven-development) provides the disciplined path from confirmed Specs to evidence-backed delivery; its precise engineering method is Traceable Spec Delivery. Vona is its backend framework and runtime layer, and Zova is its frontend framework and application layer. Cabloy Basic and Cabloy Start are related, complete edition baselines built on that shared architecture; see [Editions Overview](https://cabloy.com/editions/overview) for their deliberate differences.
14
14
 
15
- [Documentation](https://cabloy.com) · [npm](https://www.npmjs.com/package/cabloy) · [Web Demo](https://cabloy.com) · [Admin Demo](https://cabloy.com/admin) · [GitHub](https://github.com/cabloy/cabloy)
15
+ [Documentation](https://cabloy.com) · [npm](https://www.npmjs.com/package/cabloy) · [Demo](https://cabloy.com/demo) · [GitHub](https://github.com/cabloy/cabloy)
16
16
 
17
17
  ## Fullstack Principles
18
18
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cabloy",
3
- "version": "5.1.190",
3
+ "version": "5.1.192",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A Node.js fullstack framework",
6
6
  "keywords": [
@@ -57,9 +57,9 @@
57
57
  "format:fix": "oxfmt --write",
58
58
  "lint": "oxlint --disable-nested-config",
59
59
  "lint:fix": "oxlint --disable-nested-config --fix",
60
- "test:spec-charts": "node --test .claude/skills/cabloy-spec-generation/scripts/generate-implementation-charts.test.mjs",
61
- "spec:charts": "node ./.claude/skills/cabloy-spec-generation/scripts/generate-implementation-charts.mjs",
62
- "spec:charts:check": "node ./.claude/skills/cabloy-spec-generation/scripts/generate-implementation-charts.mjs --check",
60
+ "test:spec-charts": "node --test repo-agent-governance/tools/spec-charts/generate-implementation-charts.test.mjs",
61
+ "spec:charts": "node ./repo-agent-governance/tools/spec-charts/generate-implementation-charts.mjs",
62
+ "spec:charts:check": "node ./repo-agent-governance/tools/spec-charts/generate-implementation-charts.mjs --check",
63
63
  "docs:dev": "pnpm --dir repo-docs docs:dev",
64
64
  "docs:build": "pnpm --dir repo-docs docs:build",
65
65
  "docs:preview": "pnpm --dir repo-docs docs:preview",
@@ -72,7 +72,13 @@
72
72
  "release:changelog": "node scripts/release.ts --changelog-only",
73
73
  "release:publish": "node scripts/release.ts --publish-only",
74
74
  "release:github": "node scripts/release.ts --release-only",
75
- "prepare": "husky"
75
+ "prepare": "husky",
76
+ "agent:governance:render": "node repo-agent-governance/scripts/governance.mjs render",
77
+ "agent:governance:check": "node repo-agent-governance/scripts/governance.mjs check",
78
+ "agent:governance:adopt": "node repo-agent-governance/scripts/governance.mjs adopt",
79
+ "test:agent-governance": "node --test repo-agent-governance/tests/*.test.mjs",
80
+ "contract:gate": "node repo-agent-governance/tools/contract-loop/check.mjs",
81
+ "agent:governance:pack-check": "node repo-agent-governance/scripts/pack-check.mjs"
76
82
  },
77
83
  "devDependencies": {
78
84
  "@cabloy/dotenv": "^1.2.8",
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env node
2
+ import type { SpawnSyncReturns } from 'node:child_process';
3
+
4
+ import { spawnSync } from 'node:child_process';
5
+ import { readFileSync, statSync, writeFileSync, existsSync } from 'node:fs';
6
+ import os from 'node:os';
7
+ import path from 'node:path';
8
+ import { fileURLToPath } from 'node:url';
9
+
10
+ import {
11
+ analyze,
12
+ buildMessages,
13
+ isCodeFile,
14
+ isHighConfidenceReverseSource,
15
+ normalizePath,
16
+ resolveEdition,
17
+ toPosixPath,
18
+ } from '../../repo-agent-governance/tools/contract-loop/core.mjs';
19
+
20
+ interface EditionConfig {
21
+ id: 'basic' | 'start';
22
+ label: string;
23
+ reverseAutoSyncCommands: ReadonlyArray<{ args: readonly string[]; display: string }>;
24
+ }
25
+
26
+ interface HookPayload {
27
+ tool_input?: {
28
+ file_path?: string;
29
+ };
30
+ }
31
+
32
+ interface SyncStateEntry {
33
+ fingerprint: string;
34
+ timestamp: number;
35
+ }
36
+
37
+ type ReverseSyncOutcome =
38
+ | { kind: 'not-applicable'; message: string }
39
+ | { kind: 'skipped'; message: string }
40
+ | { kind: 'success'; message: string }
41
+ | { kind: 'failure'; message: string };
42
+
43
+ type SyncState = Record<string, SyncStateEntry>;
44
+
45
+ const SCRIPT_FILE = fileURLToPath(import.meta.url);
46
+ const ROOT = path.resolve(path.dirname(SCRIPT_FILE), '../..');
47
+ const ROOT_KEY = toPosixPath(ROOT);
48
+ const STATE_FILE = path.join(os.tmpdir(), 'cabloy-contract-loop-gate-state.json');
49
+ const AUTO_SYNC_WINDOW_SECONDS = 300;
50
+
51
+ function readText(filePath: string): string | null {
52
+ try {
53
+ return readFileSync(filePath, 'utf8');
54
+ } catch {
55
+ return null;
56
+ }
57
+ }
58
+
59
+ function loadState(): SyncState {
60
+ if (!existsSync(STATE_FILE)) return {};
61
+ try {
62
+ return JSON.parse(readFileSync(STATE_FILE, 'utf8')) as SyncState;
63
+ } catch {
64
+ return {};
65
+ }
66
+ }
67
+
68
+ function saveState(state: SyncState): void {
69
+ try {
70
+ writeFileSync(STATE_FILE, JSON.stringify(state), 'utf8');
71
+ } catch {
72
+ // State prevents duplicate convenience syncs only; it must not block guidance.
73
+ }
74
+ }
75
+
76
+ function syncFingerprint(filePath: string): string {
77
+ try {
78
+ const stats = statSync(filePath, { bigint: true });
79
+ return `${filePath}:${stats.mtimeNs.toString()}`;
80
+ } catch {
81
+ return filePath;
82
+ }
83
+ }
84
+
85
+ function shouldSkipAutoSync(filePath: string): boolean {
86
+ const state = loadState();
87
+ const entry = state[ROOT_KEY];
88
+ return Boolean(
89
+ entry &&
90
+ entry.fingerprint === syncFingerprint(filePath) &&
91
+ Date.now() - entry.timestamp <= AUTO_SYNC_WINDOW_SECONDS * 1000,
92
+ );
93
+ }
94
+
95
+ function markAutoSync(filePath: string): void {
96
+ const state = loadState();
97
+ state[ROOT_KEY] = { fingerprint: syncFingerprint(filePath), timestamp: Date.now() };
98
+ saveState(state);
99
+ }
100
+
101
+ function runNpm(args: readonly string[]): SpawnSyncReturns<string> {
102
+ const command = process.platform === 'win32' ? 'npm.cmd' : 'npm';
103
+ return spawnSync(command, [...args], { cwd: ROOT, encoding: 'utf8' });
104
+ }
105
+
106
+ function summarizeProcess(result: SpawnSyncReturns<string>): string {
107
+ if (result.error) return result.error.message;
108
+ const combined = [result.stdout?.trim(), result.stderr?.trim()].filter(Boolean).join('\n');
109
+ const exitCode = result.status ?? 1;
110
+ if (!combined) return `command exited with code ${exitCode}`;
111
+ return `exit ${exitCode}: ${combined
112
+ .split(/\r?\n/)
113
+ .map(line => line.trim())
114
+ .filter(Boolean)
115
+ .slice(-3)
116
+ .join(' | ')}`;
117
+ }
118
+
119
+ function autoSyncReverse(filePath: string, edition: EditionConfig): ReverseSyncOutcome {
120
+ for (const command of edition.reverseAutoSyncCommands) {
121
+ const result = runNpm(command.args);
122
+ if (result.status !== 0) {
123
+ return {
124
+ kind: 'failure',
125
+ message: `Auto-sync failed during \`${command.display}\`: ${summarizeProcess(result)}`,
126
+ };
127
+ }
128
+ }
129
+ markAutoSync(filePath);
130
+ return {
131
+ kind: 'success',
132
+ message: `Auto-sync ran ${edition.reverseAutoSyncCommands
133
+ .map(command => `\`${command.display}\``)
134
+ .join(' and ')} for this ${edition.label} reverse-chain edit.`,
135
+ };
136
+ }
137
+
138
+ function resolveReverseSyncOutcome(
139
+ filePath: string,
140
+ reverseReason: string | null,
141
+ ): ReverseSyncOutcome {
142
+ if (!reverseReason) return { kind: 'not-applicable', message: '' };
143
+ if (!isHighConfidenceReverseSource(filePath)) {
144
+ return {
145
+ kind: 'not-applicable',
146
+ message:
147
+ 'Auto-sync did not run because this reverse-chain signal came from the consumer side rather than a high-confidence frontend source edit.',
148
+ };
149
+ }
150
+ const resolution = resolveEdition(ROOT);
151
+ if (resolution.kind !== 'resolved') {
152
+ return {
153
+ kind: 'not-applicable',
154
+ message: `Auto-sync did not run because ${resolution.kind === 'ambiguous' ? 'both Cabloy edition markers are present' : 'no Cabloy edition marker is present'}.`,
155
+ };
156
+ }
157
+ if (shouldSkipAutoSync(filePath)) {
158
+ return {
159
+ kind: 'skipped',
160
+ message:
161
+ 'Auto-sync skipped because the same reverse-source edit was already synced recently in this repo.',
162
+ };
163
+ }
164
+ return autoSyncReverse(filePath, resolution.edition);
165
+ }
166
+
167
+ function runClaudeHook(): number {
168
+ let payload: HookPayload;
169
+ try {
170
+ payload = JSON.parse(readFileSync(0, 'utf8')) as HookPayload;
171
+ } catch {
172
+ return 0;
173
+ }
174
+ const filePath = normalizePath(ROOT, payload.tool_input?.file_path);
175
+ if (!filePath || !isCodeFile(filePath)) return 0;
176
+ const content = readText(filePath);
177
+ if (content === null) return 0;
178
+
179
+ const resolution = resolveEdition(ROOT);
180
+ const result = analyze(
181
+ filePath,
182
+ content,
183
+ resolution.kind === 'resolved' ? resolution.edition : null,
184
+ );
185
+ if (!result.forwardReason && !result.reverseReason) return 0;
186
+
187
+ const reverseSyncOutcome = resolveReverseSyncOutcome(filePath, result.reverseReason);
188
+ const message = buildMessages(result, resolution, reverseSyncOutcome);
189
+ // eslint-disable-next-line
190
+ console.log(
191
+ JSON.stringify({
192
+ hookSpecificOutput: { hookEventName: 'PostToolUse', additionalContext: message },
193
+ systemMessage: message,
194
+ }),
195
+ );
196
+ return 0;
197
+ }
198
+
199
+ process.exit(runClaudeHook());
@@ -24,31 +24,31 @@ The release script at `scripts/release.ts` performs 4 steps for the public `cabl
24
24
 
25
25
  Only after the Basic preflight above succeeds, use the matching script that exists in the active root `package.json`:
26
26
 
27
- | Command | Description |
28
- |---------|-------------|
29
- | `pnpm release-patch` | Full release with patch version bump |
30
- | `pnpm release-minor` | Full release with minor version bump |
31
- | `pnpm release-major` | Full release with major version bump |
32
- | `pnpm release` | Full release with default patch bump |
33
- | `pnpm release:dry-run` | Preview what would happen without executing |
34
- | `pnpm release:changelog` | Only generate changelog (no version bump) |
35
- | `pnpm release:publish` | Only publish to npm |
36
- | `pnpm release:github` | Only create GitHub release |
27
+ | Command | Description |
28
+ | ------------------------ | ------------------------------------------- |
29
+ | `pnpm release-patch` | Full release with patch version bump |
30
+ | `pnpm release-minor` | Full release with minor version bump |
31
+ | `pnpm release-major` | Full release with major version bump |
32
+ | `pnpm release` | Full release with default patch bump |
33
+ | `pnpm release:dry-run` | Preview what would happen without executing |
34
+ | `pnpm release:changelog` | Only generate changelog (no version bump) |
35
+ | `pnpm release:publish` | Only publish to npm |
36
+ | `pnpm release:github` | Only create GitHub release |
37
37
 
38
38
  Do not infer equivalent commands in Cabloy Start when this table is absent from its package scripts.
39
39
 
40
40
  ## CLI Options
41
41
 
42
- | Option | Description |
43
- |--------|-------------|
44
- | `--dry-run` | Show what would happen without executing |
45
- | `--changelog-only` | Only generate changelog (no version bump) |
46
- | `--publish-only` | Only publish to npm |
47
- | `--release-only` | Only create GitHub release |
48
- | `--skip-changelog` | Skip changelog generation |
49
- | `--skip-publish` | Skip npm publish |
50
- | `--skip-release` | Skip GitHub release |
51
- | `--no-ai` | Use raw commit list instead of AI for changelog |
42
+ | Option | Description |
43
+ | ------------------ | ----------------------------------------------- |
44
+ | `--dry-run` | Show what would happen without executing |
45
+ | `--changelog-only` | Only generate changelog (no version bump) |
46
+ | `--publish-only` | Only publish to npm |
47
+ | `--release-only` | Only create GitHub release |
48
+ | `--skip-changelog` | Skip changelog generation |
49
+ | `--skip-publish` | Skip npm publish |
50
+ | `--skip-release` | Skip GitHub release |
51
+ | `--no-ai` | Use raw commit list instead of AI for changelog |
52
52
 
53
53
  ## Execution
54
54