@slope-dev/slope 1.15.0 → 1.17.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.
Files changed (118) hide show
  1. package/dist/cli/commands/docs.d.ts +5 -0
  2. package/dist/cli/commands/docs.d.ts.map +1 -0
  3. package/dist/cli/commands/docs.js +303 -0
  4. package/dist/cli/commands/docs.js.map +1 -0
  5. package/dist/cli/commands/guard.d.ts.map +1 -1
  6. package/dist/cli/commands/guard.js +2 -0
  7. package/dist/cli/commands/guard.js.map +1 -1
  8. package/dist/cli/commands/init.d.ts.map +1 -1
  9. package/dist/cli/commands/init.js +56 -0
  10. package/dist/cli/commands/init.js.map +1 -1
  11. package/dist/cli/commands/loop.d.ts +2 -0
  12. package/dist/cli/commands/loop.d.ts.map +1 -0
  13. package/dist/cli/commands/loop.js +388 -0
  14. package/dist/cli/commands/loop.js.map +1 -0
  15. package/dist/cli/commands/roadmap.d.ts.map +1 -1
  16. package/dist/cli/commands/roadmap.js +51 -2
  17. package/dist/cli/commands/roadmap.js.map +1 -1
  18. package/dist/cli/commands/session.d.ts.map +1 -1
  19. package/dist/cli/commands/session.js +2 -0
  20. package/dist/cli/commands/session.js.map +1 -1
  21. package/dist/cli/commands/vision.d.ts.map +1 -1
  22. package/dist/cli/commands/vision.js +104 -7
  23. package/dist/cli/commands/vision.js.map +1 -1
  24. package/dist/cli/guards/stop-check.d.ts +5 -0
  25. package/dist/cli/guards/stop-check.d.ts.map +1 -1
  26. package/dist/cli/guards/stop-check.js +72 -5
  27. package/dist/cli/guards/stop-check.js.map +1 -1
  28. package/dist/cli/guards/worktree-check.d.ts +14 -0
  29. package/dist/cli/guards/worktree-check.d.ts.map +1 -0
  30. package/dist/cli/guards/worktree-check.js +137 -0
  31. package/dist/cli/guards/worktree-check.js.map +1 -0
  32. package/dist/cli/index.js +16 -0
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/loop/analyze.d.ts +8 -0
  35. package/dist/cli/loop/analyze.d.ts.map +1 -0
  36. package/dist/cli/loop/analyze.js +62 -0
  37. package/dist/cli/loop/analyze.js.map +1 -0
  38. package/dist/cli/loop/backlog.d.ts +26 -0
  39. package/dist/cli/loop/backlog.d.ts.map +1 -0
  40. package/dist/cli/loop/backlog.js +95 -0
  41. package/dist/cli/loop/backlog.js.map +1 -0
  42. package/dist/cli/loop/config.d.ts +10 -0
  43. package/dist/cli/loop/config.d.ts.map +1 -0
  44. package/dist/cli/loop/config.js +75 -0
  45. package/dist/cli/loop/config.js.map +1 -0
  46. package/dist/cli/loop/continuous.d.ts +6 -0
  47. package/dist/cli/loop/continuous.d.ts.map +1 -0
  48. package/dist/cli/loop/continuous.js +108 -0
  49. package/dist/cli/loop/continuous.js.map +1 -0
  50. package/dist/cli/loop/executor.d.ts +10 -0
  51. package/dist/cli/loop/executor.d.ts.map +1 -0
  52. package/dist/cli/loop/executor.js +603 -0
  53. package/dist/cli/loop/executor.js.map +1 -0
  54. package/dist/cli/loop/guard-runner.d.ts +14 -0
  55. package/dist/cli/loop/guard-runner.d.ts.map +1 -0
  56. package/dist/cli/loop/guard-runner.js +53 -0
  57. package/dist/cli/loop/guard-runner.js.map +1 -0
  58. package/dist/cli/loop/logger.d.ts +9 -0
  59. package/dist/cli/loop/logger.d.ts.map +1 -0
  60. package/dist/cli/loop/logger.js +37 -0
  61. package/dist/cli/loop/logger.js.map +1 -0
  62. package/dist/cli/loop/model-selector.d.ts +15 -0
  63. package/dist/cli/loop/model-selector.d.ts.map +1 -0
  64. package/dist/cli/loop/model-selector.js +63 -0
  65. package/dist/cli/loop/model-selector.js.map +1 -0
  66. package/dist/cli/loop/parallel.d.ts +6 -0
  67. package/dist/cli/loop/parallel.d.ts.map +1 -0
  68. package/dist/cli/loop/parallel.js +109 -0
  69. package/dist/cli/loop/parallel.js.map +1 -0
  70. package/dist/cli/loop/pr-lifecycle.d.ts +26 -0
  71. package/dist/cli/loop/pr-lifecycle.d.ts.map +1 -0
  72. package/dist/cli/loop/pr-lifecycle.js +244 -0
  73. package/dist/cli/loop/pr-lifecycle.js.map +1 -0
  74. package/dist/cli/loop/types.d.ts +98 -0
  75. package/dist/cli/loop/types.d.ts.map +1 -0
  76. package/dist/cli/loop/types.js +37 -0
  77. package/dist/cli/loop/types.js.map +1 -0
  78. package/dist/cli/loop/worktree.d.ts +30 -0
  79. package/dist/cli/loop/worktree.d.ts.map +1 -0
  80. package/dist/cli/loop/worktree.js +181 -0
  81. package/dist/cli/loop/worktree.js.map +1 -0
  82. package/dist/cli/registry.d.ts.map +1 -1
  83. package/dist/cli/registry.js +3 -0
  84. package/dist/cli/registry.js.map +1 -1
  85. package/dist/core/analyzers/stack.d.ts +2 -0
  86. package/dist/core/analyzers/stack.d.ts.map +1 -1
  87. package/dist/core/analyzers/stack.js +9 -6
  88. package/dist/core/analyzers/stack.js.map +1 -1
  89. package/dist/core/constants.d.ts +2 -0
  90. package/dist/core/constants.d.ts.map +1 -1
  91. package/dist/core/constants.js +2 -0
  92. package/dist/core/constants.js.map +1 -1
  93. package/dist/core/docs.d.ts +50 -0
  94. package/dist/core/docs.d.ts.map +1 -0
  95. package/dist/core/docs.js +67 -0
  96. package/dist/core/docs.js.map +1 -0
  97. package/dist/core/generators/roadmap.d.ts +6 -1
  98. package/dist/core/generators/roadmap.d.ts.map +1 -1
  99. package/dist/core/generators/roadmap.js +150 -0
  100. package/dist/core/generators/roadmap.js.map +1 -1
  101. package/dist/core/guard.d.ts +1 -1
  102. package/dist/core/guard.d.ts.map +1 -1
  103. package/dist/core/guard.js +8 -0
  104. package/dist/core/guard.js.map +1 -1
  105. package/dist/core/index.d.ts +5 -2
  106. package/dist/core/index.d.ts.map +1 -1
  107. package/dist/core/index.js +5 -2
  108. package/dist/core/index.js.map +1 -1
  109. package/dist/core/vision.d.ts +10 -0
  110. package/dist/core/vision.d.ts.map +1 -1
  111. package/dist/core/vision.js +37 -0
  112. package/dist/core/vision.js.map +1 -1
  113. package/dist/mcp/index.test.js +30 -15
  114. package/dist/mcp/index.test.js.map +1 -1
  115. package/dist/mcp/registry.d.ts.map +1 -1
  116. package/dist/mcp/registry.js +29 -0
  117. package/dist/mcp/registry.js.map +1 -1
  118. package/package.json +1 -1
@@ -0,0 +1,98 @@
1
+ export interface LoopConfig {
2
+ modelLocal: string;
3
+ modelApi: string;
4
+ ollamaApiBase: string;
5
+ ollamaFlashAttention: boolean;
6
+ ollamaKvCacheType: string;
7
+ modelApiTimeout: number;
8
+ modelLocalTimeout: number;
9
+ escalateOnFail: boolean;
10
+ agentGuideMaxWords: number;
11
+ modelRegenThreshold: number;
12
+ loopTestCmd: string;
13
+ backlogPath: string;
14
+ resultsDir: string;
15
+ logDir: string;
16
+ agentGuide: string;
17
+ sprintHistory: string;
18
+ }
19
+ export declare const DEFAULT_LOOP_CONFIG: LoopConfig;
20
+ export declare const ENV_VAR_MAP: Record<string, keyof LoopConfig>;
21
+ /** Source of a config value (for --show display) */
22
+ export type ConfigSource = 'env' | 'file' | 'default';
23
+ export interface ConfigWithSources {
24
+ config: LoopConfig;
25
+ sources: Record<keyof LoopConfig, ConfigSource>;
26
+ }
27
+ export interface BacklogFile {
28
+ generated_at: string;
29
+ _enrichMeta?: {
30
+ version: number;
31
+ };
32
+ sprints: BacklogSprint[];
33
+ }
34
+ export interface BacklogSprint {
35
+ id: string;
36
+ title: string;
37
+ strategy: 'hardening' | 'testing' | 'cleanup' | 'documentation' | 'hardening-overflow';
38
+ par: number;
39
+ slope: number;
40
+ type: 'feature' | 'bugfix' | 'chore';
41
+ tickets: BacklogTicket[];
42
+ }
43
+ export interface BacklogTicket {
44
+ key: string;
45
+ title: string;
46
+ club: Club;
47
+ description: string;
48
+ acceptance_criteria: string[];
49
+ modules: string[];
50
+ max_files: number;
51
+ estimated_tokens?: number;
52
+ files?: {
53
+ primary: string[];
54
+ };
55
+ }
56
+ export type Club = 'putter' | 'wedge' | 'short_iron' | 'long_iron' | 'driver';
57
+ export interface TicketResult {
58
+ ticket: string;
59
+ title: string;
60
+ club: string;
61
+ max_files: number;
62
+ primary_model: string;
63
+ final_model: string;
64
+ escalated: boolean;
65
+ tests_passing: boolean;
66
+ noop: boolean;
67
+ }
68
+ export interface SprintResult {
69
+ sprint_id: string;
70
+ title: string;
71
+ strategy: string;
72
+ completed_at: string;
73
+ branch: string;
74
+ tickets_total: number;
75
+ tickets_passing: number;
76
+ tickets_noop: number;
77
+ tickets: TicketResult[];
78
+ pr_number?: number;
79
+ merge_status?: 'merged' | 'blocked' | 'skipped';
80
+ merge_block_reason?: string;
81
+ }
82
+ export interface ModelConfig {
83
+ generated_at: string;
84
+ ticket_count: number;
85
+ escalation_save_rate: number;
86
+ success_rates: Record<string, {
87
+ total: number;
88
+ passing: number;
89
+ rate: number;
90
+ }>;
91
+ cost_per_success: Record<string, number>;
92
+ recommendations: Record<string, {
93
+ model: 'api' | 'local';
94
+ reason: string;
95
+ }>;
96
+ notes: string[];
97
+ }
98
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/loop/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ // Loop orchestration types — derived from actual backlog.json, model-config.json, and result schemas
2
+ export const DEFAULT_LOOP_CONFIG = {
3
+ modelLocal: 'ollama/qwen3-coder-next-fast',
4
+ modelApi: 'openrouter/anthropic/claude-haiku-4-5',
5
+ ollamaApiBase: 'http://localhost:11434',
6
+ ollamaFlashAttention: true,
7
+ ollamaKvCacheType: 'q8_0',
8
+ modelApiTimeout: 1800,
9
+ modelLocalTimeout: 1800,
10
+ escalateOnFail: true,
11
+ agentGuideMaxWords: 5000,
12
+ modelRegenThreshold: 10,
13
+ loopTestCmd: "pnpm vitest run --exclude '**/guards.test.ts'",
14
+ backlogPath: 'slope-loop/backlog.json',
15
+ resultsDir: 'slope-loop/results',
16
+ logDir: 'slope-loop/logs',
17
+ agentGuide: 'slope-loop/slope-loop-guide/SKILL.md',
18
+ sprintHistory: 'slope-loop/slope-loop-guide/references/sprint-history.md',
19
+ };
20
+ // Mapping from LoopConfig keys to environment variable names
21
+ export const ENV_VAR_MAP = {
22
+ MODEL_LOCAL: 'modelLocal',
23
+ MODEL_API: 'modelApi',
24
+ OLLAMA_API_BASE: 'ollamaApiBase',
25
+ OLLAMA_FLASH_ATTENTION: 'ollamaFlashAttention',
26
+ OLLAMA_KV_CACHE_TYPE: 'ollamaKvCacheType',
27
+ MODEL_API_TIMEOUT: 'modelApiTimeout',
28
+ MODEL_LOCAL_TIMEOUT: 'modelLocalTimeout',
29
+ ESCALATE_ON_FAIL: 'escalateOnFail',
30
+ AGENT_GUIDE_MAX_WORDS: 'agentGuideMaxWords',
31
+ MODEL_REGEN_THRESHOLD: 'modelRegenThreshold',
32
+ LOOP_TEST_CMD: 'loopTestCmd',
33
+ LOOP_BACKLOG_PATH: 'backlogPath',
34
+ LOOP_RESULTS_DIR: 'resultsDir',
35
+ LOOP_LOG_DIR: 'logDir',
36
+ };
37
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/loop/types.ts"],"names":[],"mappings":"AAAA,qGAAqG;AAuBrG,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,UAAU,EAAE,8BAA8B;IAC1C,QAAQ,EAAE,uCAAuC;IACjD,aAAa,EAAE,wBAAwB;IACvC,oBAAoB,EAAE,IAAI;IAC1B,iBAAiB,EAAE,MAAM;IACzB,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,IAAI;IACvB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,mBAAmB,EAAE,EAAE;IACvB,WAAW,EAAE,+CAA+C;IAC5D,WAAW,EAAE,yBAAyB;IACtC,UAAU,EAAE,oBAAoB;IAChC,MAAM,EAAE,iBAAiB;IACzB,UAAU,EAAE,sCAAsC;IAClD,aAAa,EAAE,0DAA0D;CAC1E,CAAC;AAEF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,WAAW,GAAqC;IAC3D,WAAW,EAAE,YAAY;IACzB,SAAS,EAAE,UAAU;IACrB,eAAe,EAAE,eAAe;IAChC,sBAAsB,EAAE,sBAAsB;IAC9C,oBAAoB,EAAE,mBAAmB;IACzC,iBAAiB,EAAE,iBAAiB;IACpC,mBAAmB,EAAE,mBAAmB;IACxC,gBAAgB,EAAE,gBAAgB;IAClC,qBAAqB,EAAE,oBAAoB;IAC3C,qBAAqB,EAAE,qBAAqB;IAC5C,aAAa,EAAE,aAAa;IAC5B,iBAAiB,EAAE,aAAa;IAChC,gBAAgB,EAAE,YAAY;IAC9B,YAAY,EAAE,QAAQ;CACvB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { Logger } from './logger.js';
2
+ export interface WorktreeInfo {
3
+ path: string;
4
+ branch: string;
5
+ created: boolean;
6
+ }
7
+ /**
8
+ * Create (or reuse) a git worktree for a sprint.
9
+ * Runs pnpm install + build in the new worktree.
10
+ */
11
+ export declare function createWorktree(sprintId: string, mainRepo: string, log: Logger): WorktreeInfo;
12
+ /**
13
+ * Refresh the semantic index in a worktree if stale.
14
+ */
15
+ export declare function refreshIndex(worktreePath: string, log: Logger): void;
16
+ /**
17
+ * Enrich backlog if not already enriched.
18
+ */
19
+ export declare function enrichBacklog(backlogPath: string, worktreePath: string, log: Logger): void;
20
+ /**
21
+ * Remove a worktree and optionally its branch.
22
+ */
23
+ export declare function removeWorktree(worktreePath: string, branch: string, mainRepo: string, log: Logger): void;
24
+ /** Get the current HEAD SHA */
25
+ export declare function getHeadSha(cwd: string): string;
26
+ /** Count commits between two SHAs */
27
+ export declare function countCommits(fromSha: string, toSha: string, cwd: string): number;
28
+ /** Push branch to origin */
29
+ export declare function pushBranch(branch: string, cwd: string, log: Logger): boolean;
30
+ //# sourceMappingURL=worktree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../../src/cli/loop/worktree.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AA0CD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,YAAY,CA4Cd;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAoBpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAW1F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,IAAI,CAeN;AAED,+BAA+B;AAC/B,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,qCAAqC;AACrC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOhF;AAED,4BAA4B;AAC5B,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAQ5E"}
@@ -0,0 +1,181 @@
1
+ import { execSync, execFileSync } from 'node:child_process';
2
+ import { existsSync, mkdirSync, copyFileSync, symlinkSync, readdirSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ const BRANCH_PREFIX = 'slope-loop';
5
+ /**
6
+ * Mirror .slope/ directory from main repo into worktree.
7
+ * - Config files (*.json) are copied (small, static)
8
+ * - Database files (*.db) are symlinked (shared state, embeddings)
9
+ * - WAL/SHM files are NOT symlinked (SQLite manages them per-connection)
10
+ */
11
+ function mirrorSlopeDir(mainRepo, worktreePath, log) {
12
+ const srcDir = join(mainRepo, '.slope');
13
+ if (!existsSync(srcDir))
14
+ return;
15
+ const destDir = join(worktreePath, '.slope');
16
+ try {
17
+ mkdirSync(destDir, { recursive: true });
18
+ }
19
+ catch {
20
+ return;
21
+ }
22
+ try {
23
+ const entries = readdirSync(srcDir, { withFileTypes: true });
24
+ for (const entry of entries) {
25
+ if (!entry.isFile())
26
+ continue;
27
+ const srcPath = join(srcDir, entry.name);
28
+ const destPath = join(destDir, entry.name);
29
+ if (entry.name.endsWith('.db')) {
30
+ // Symlink database so worktree shares the same store
31
+ try {
32
+ symlinkSync(srcPath, destPath);
33
+ }
34
+ catch { /* already exists or permission issue */ }
35
+ }
36
+ else if (entry.name.endsWith('.json')) {
37
+ // Copy config files
38
+ try {
39
+ copyFileSync(srcPath, destPath);
40
+ }
41
+ catch { /* ok */ }
42
+ }
43
+ }
44
+ log.info('Mirrored .slope/ config into worktree');
45
+ }
46
+ catch {
47
+ log.warn('Failed to mirror .slope/ into worktree — index/context may be unavailable');
48
+ }
49
+ }
50
+ /**
51
+ * Create (or reuse) a git worktree for a sprint.
52
+ * Runs pnpm install + build in the new worktree.
53
+ */
54
+ export function createWorktree(sprintId, mainRepo, log) {
55
+ const branch = `${BRANCH_PREFIX}/${sprintId}`;
56
+ const worktreePath = join(mainRepo, `.slope-loop-worktree-${sprintId}`);
57
+ // Prune stale worktree refs
58
+ try {
59
+ execFileSync('git', ['worktree', 'prune'], { cwd: mainRepo, stdio: 'pipe' });
60
+ }
61
+ catch { /* ok */ }
62
+ if (existsSync(worktreePath)) {
63
+ log.info(`Reusing existing worktree: ${worktreePath}`);
64
+ return { path: worktreePath, branch, created: false };
65
+ }
66
+ try {
67
+ execFileSync('git', ['worktree', 'add', worktreePath, '-b', branch], {
68
+ cwd: mainRepo,
69
+ stdio: 'pipe',
70
+ });
71
+ }
72
+ catch (err) {
73
+ throw new Error(`Failed to create worktree: ${err.message}`);
74
+ }
75
+ log.info(`Created worktree: ${worktreePath} (branch: ${branch})`);
76
+ // Mirror .slope/ config into worktree (gitignored, so not present by default)
77
+ mirrorSlopeDir(mainRepo, worktreePath, log);
78
+ // Install deps and build in the new worktree
79
+ log.info('Installing dependencies in worktree...');
80
+ try {
81
+ execSync('pnpm install --frozen-lockfile', { cwd: worktreePath, stdio: 'pipe', timeout: 120_000 });
82
+ }
83
+ catch {
84
+ log.warn('pnpm install failed in worktree — continuing anyway');
85
+ }
86
+ log.info('Building in worktree...');
87
+ try {
88
+ execSync('pnpm build', { cwd: worktreePath, stdio: 'pipe', timeout: 120_000 });
89
+ }
90
+ catch {
91
+ log.warn('pnpm build failed in worktree — continuing anyway');
92
+ }
93
+ return { path: worktreePath, branch, created: true };
94
+ }
95
+ /**
96
+ * Refresh the semantic index in a worktree if stale.
97
+ */
98
+ export function refreshIndex(worktreePath, log) {
99
+ try {
100
+ const currentSha = execFileSync('git', ['rev-parse', 'HEAD'], { cwd: worktreePath, encoding: 'utf8' }).trim();
101
+ let indexSha = '';
102
+ try {
103
+ const statusJson = execFileSync('pnpm', ['slope', 'index', '--status', '--json'], {
104
+ cwd: worktreePath,
105
+ encoding: 'utf8',
106
+ });
107
+ const parsed = JSON.parse(statusJson);
108
+ indexSha = parsed.lastSha ?? '';
109
+ }
110
+ catch { /* no index yet */ }
111
+ if (currentSha !== indexSha) {
112
+ log.info('Updating semantic index...');
113
+ execFileSync('pnpm', ['slope', 'index'], { cwd: worktreePath, stdio: 'pipe', timeout: 120_000 });
114
+ }
115
+ }
116
+ catch {
117
+ log.warn('Semantic index refresh failed — using stale index');
118
+ }
119
+ }
120
+ /**
121
+ * Enrich backlog if not already enriched.
122
+ */
123
+ export function enrichBacklog(backlogPath, worktreePath, log) {
124
+ log.info('Enriching backlog with file context...');
125
+ try {
126
+ execFileSync('pnpm', ['slope', 'enrich', backlogPath], {
127
+ cwd: worktreePath,
128
+ stdio: 'pipe',
129
+ timeout: 120_000,
130
+ });
131
+ }
132
+ catch {
133
+ log.warn('Backlog enrichment failed — continuing without enrichment');
134
+ }
135
+ }
136
+ /**
137
+ * Remove a worktree and optionally its branch.
138
+ */
139
+ export function removeWorktree(worktreePath, branch, mainRepo, log) {
140
+ try {
141
+ execFileSync('git', ['worktree', 'remove', worktreePath, '--force'], { cwd: mainRepo, stdio: 'pipe' });
142
+ log.info(`Removed worktree: ${worktreePath}`);
143
+ }
144
+ catch {
145
+ log.warn(`Failed to remove worktree: ${worktreePath}`);
146
+ }
147
+ // Safe branch delete (-d, not -D) — refuses if unmerged
148
+ try {
149
+ execFileSync('git', ['branch', '-d', branch], { cwd: mainRepo, stdio: 'pipe' });
150
+ log.info(`Deleted branch: ${branch}`);
151
+ }
152
+ catch {
153
+ log.info(`Branch ${branch} has unmerged changes — keeping`);
154
+ }
155
+ }
156
+ /** Get the current HEAD SHA */
157
+ export function getHeadSha(cwd) {
158
+ return execFileSync('git', ['rev-parse', 'HEAD'], { cwd, encoding: 'utf8' }).trim();
159
+ }
160
+ /** Count commits between two SHAs */
161
+ export function countCommits(fromSha, toSha, cwd) {
162
+ try {
163
+ const count = execFileSync('git', ['rev-list', '--count', `${fromSha}..${toSha}`], { cwd, encoding: 'utf8' }).trim();
164
+ return parseInt(count, 10) || 0;
165
+ }
166
+ catch {
167
+ return 0;
168
+ }
169
+ }
170
+ /** Push branch to origin */
171
+ export function pushBranch(branch, cwd, log) {
172
+ try {
173
+ execFileSync('git', ['push', '-u', 'origin', branch], { cwd, stdio: 'pipe' });
174
+ return true;
175
+ }
176
+ catch {
177
+ log.warn(`git push failed for branch ${branch}`);
178
+ return false;
179
+ }
180
+ }
181
+ //# sourceMappingURL=worktree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../../src/cli/loop/worktree.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;CACzE;AAED,qGAAqG;AACrG,eAAO,MAAM,oBAAoB,2BAA4B,CAAC;AAE9D,eAAO,MAAM,oBAAoB,EAAE,SAAS,cAAc,EAgDzD,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;CACzE;AAED,qGAAqG;AACrG,eAAO,MAAM,oBAAoB,2BAA4B,CAAC;AAE9D,eAAO,MAAM,oBAAoB,EAAE,SAAS,cAAc,EAoDzD,CAAC"}
@@ -39,10 +39,13 @@ export const CLI_COMMAND_REGISTRY = [
39
39
  { cmd: 'roadmap', desc: 'Strategic planning and roadmap tools', category: 'planning' },
40
40
  { cmd: 'vision', desc: 'Display project vision document', category: 'planning' },
41
41
  { cmd: 'initiative', desc: 'Multi-sprint initiative orchestration', category: 'planning' },
42
+ // ── Loop ─────────────────────────────────────────────
43
+ { cmd: 'loop', desc: 'Autonomous sprint execution loop', category: 'tooling' },
42
44
  // ── Indexing ──────────────────────────────────────────────────────
43
45
  { cmd: 'index-cmd', desc: 'Semantic embedding index management', category: 'tooling' },
44
46
  { cmd: 'context', desc: 'Semantic context search for agents', category: 'tooling' },
45
47
  { cmd: 'prep', desc: 'Generate execution plan for a ticket', category: 'tooling' },
46
48
  { cmd: 'enrich', desc: 'Batch-enrich backlog with file context', category: 'tooling' },
49
+ { cmd: 'docs', desc: 'Generate documentation manifest and changelog', category: 'tooling' },
47
50
  ];
48
51
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  import type { StackProfile } from './types.js';
2
+ /** Detect package manager from lock files in the given directory. */
3
+ export declare function detectPackageManager(cwd: string): string | null;
2
4
  export declare function analyzeStack(cwd: string): Promise<StackProfile>;
3
5
  //# sourceMappingURL=stack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../src/core/analyzers/stack.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAmD/C,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA6GrE"}
1
+ {"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../src/core/analyzers/stack.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAmD/C,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK/D;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAwGrE"}
@@ -47,6 +47,14 @@ function readJson(path) {
47
47
  return null;
48
48
  }
49
49
  }
50
+ /** Detect package manager from lock files in the given directory. */
51
+ export function detectPackageManager(cwd) {
52
+ for (const [lockFile, pm] of Object.entries(LOCK_TO_PM)) {
53
+ if (existsSync(join(cwd, lockFile)))
54
+ return pm;
55
+ }
56
+ return null;
57
+ }
50
58
  export async function analyzeStack(cwd) {
51
59
  const languages = {};
52
60
  const frameworks = [];
@@ -77,12 +85,7 @@ export async function analyzeStack(cwd) {
77
85
  }
78
86
  }
79
87
  // Detect package manager from lock files
80
- for (const [lockFile, pm] of Object.entries(LOCK_TO_PM)) {
81
- if (existsSync(join(cwd, lockFile))) {
82
- packageManager = pm;
83
- break;
84
- }
85
- }
88
+ packageManager = detectPackageManager(cwd) ?? undefined;
86
89
  // Parse package.json for frameworks and runtime
87
90
  const pkgJson = readJson(join(cwd, 'package.json'));
88
91
  if (pkgJson) {
@@ -1 +1 @@
1
- {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../src/core/analyzers/stack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../src/core/analyzers/stack.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export declare const HAZARD_SEVERITY_PENALTIES: Record<HazardSeverity, number>;
11
11
  export declare const TRAINING_TYPE_MAP: Partial<Record<SprintType, TrainingType>>;
12
12
  /** Maps review types to hazard types for finding → hazard conversion */
13
13
  export declare const REVIEW_TYPE_HAZARD_MAP: Record<ReviewType, HazardType>;
14
+ /** Stale session cleanup threshold (2 hours in ms) */
15
+ export declare const STALE_SESSION_THRESHOLD_MS = 7200000;
14
16
  /** Default nutrition items to assess per sprint */
15
17
  export declare const NUTRITION_CHECKLIST: NutritionCategory[];
16
18
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAElI,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAI3D,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,aAAa,iGAMhB,CAAC;AAEX,4CAA4C;AAC5C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAMnD,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAKpE,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAIvE,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,CAMjE,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,EAMlD,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAElI,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAI3D,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,aAAa,iGAMhB,CAAC;AAEX,4CAA4C;AAC5C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAMnD,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAKpE,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAIvE,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,CAMjE,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,0BAA0B,UAAY,CAAC;AAEpD,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,EAMlD,CAAC"}
@@ -41,6 +41,8 @@ export const REVIEW_TYPE_HAZARD_MAP = {
41
41
  security: 'water',
42
42
  ux: 'trees',
43
43
  };
44
+ /** Stale session cleanup threshold (2 hours in ms) */
45
+ export const STALE_SESSION_THRESHOLD_MS = 7_200_000;
44
46
  /** Default nutrition items to assess per sprint */
45
47
  export const NUTRITION_CHECKLIST = [
46
48
  'hydration',
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAEA,6CAA6C;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAqC;IAC9D,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,eAAe;IACf,kBAAkB;IAClB,UAAU;IACV,cAAc;IACd,mBAAmB;CACX,CAAC;AAEX,4CAA4C;AAC5C,MAAM,CAAC,MAAM,YAAY,GAA+B;IACtD,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO;IACb,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ;IACd,CAAC,CAAC,CAAC,EAAE,KAAK;IACV,CAAC,CAAC,CAAC,EAAE,OAAO;IACZ,CAAC,CAAC,CAAC,EAAE,cAAc;CACpB,CAAC;AAEF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,yBAAyB,GAAmC;IACvE,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAA8C;IAC1E,QAAQ,EAAE,eAAe;IACzB,QAAQ,EAAE,mBAAmB;IAC7B,eAAe,EAAE,kBAAkB;CACpC,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAmC;IACpE,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,OAAO;IACb,aAAa,EAAE,OAAO;IACtB,QAAQ,EAAE,OAAO;IACjB,EAAE,EAAE,OAAO;CACZ,CAAC;AAEF,mDAAmD;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAwB;IACtD,WAAW;IACX,MAAM;IACN,UAAU;IACV,aAAa;IACb,YAAY;CACb,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAEA,6CAA6C;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAqC;IAC9D,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,eAAe;IACf,kBAAkB;IAClB,UAAU;IACV,cAAc;IACd,mBAAmB;CACX,CAAC;AAEX,4CAA4C;AAC5C,MAAM,CAAC,MAAM,YAAY,GAA+B;IACtD,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO;IACb,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ;IACd,CAAC,CAAC,CAAC,EAAE,KAAK;IACV,CAAC,CAAC,CAAC,EAAE,OAAO;IACZ,CAAC,CAAC,CAAC,EAAE,cAAc;CACpB,CAAC;AAEF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,yBAAyB,GAAmC;IACvE,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAA8C;IAC1E,QAAQ,EAAE,eAAe;IACzB,QAAQ,EAAE,mBAAmB;IAC7B,eAAe,EAAE,kBAAkB;CACpC,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAmC;IACpE,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,OAAO;IACb,aAAa,EAAE,OAAO;IACtB,QAAQ,EAAE,OAAO;IACjB,EAAE,EAAE,OAAO;CACZ,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAEpD,mDAAmD;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAwB;IACtD,WAAW;IACX,MAAM;IACN,UAAU;IACV,aAAa;IACb,YAAY;CACb,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { CliCommandMeta } from '../cli/registry.js';
2
+ import type { GuardDefinition } from './guard.js';
3
+ import type { MetaphorDefinition } from './metaphor.js';
4
+ import type { RoleDefinition } from './roles.js';
5
+ import { PAR_THRESHOLDS, SLOPE_FACTORS, SCORE_LABELS, HAZARD_SEVERITY_PENALTIES } from './constants.js';
6
+ export interface ChangelogChange {
7
+ type: 'feat' | 'fix' | 'chore' | 'docs' | 'refactor' | 'test' | 'other';
8
+ scope?: string;
9
+ description: string;
10
+ breaking: boolean;
11
+ hash?: string;
12
+ }
13
+ export interface ChangelogEntry {
14
+ version: string;
15
+ date: string;
16
+ changes: ChangelogChange[];
17
+ }
18
+ export interface ChangelogSection {
19
+ status: 'success' | 'partial' | 'unavailable';
20
+ entries: ChangelogEntry[];
21
+ reason?: string;
22
+ }
23
+ export interface DocsManifestInput {
24
+ version: string;
25
+ gitSha: string;
26
+ changelog: ChangelogSection;
27
+ commands: readonly CliCommandMeta[];
28
+ }
29
+ export interface DocsManifest {
30
+ version: string;
31
+ generatedAt: string;
32
+ gitSha: string;
33
+ checksums: Record<string, string>;
34
+ commands: readonly CliCommandMeta[];
35
+ guards: GuardDefinition[];
36
+ metaphors: MetaphorDefinition[];
37
+ roles: RoleDefinition[];
38
+ constants: {
39
+ parThresholds: typeof PAR_THRESHOLDS;
40
+ slopeFactors: typeof SLOPE_FACTORS;
41
+ scoreLabels: typeof SCORE_LABELS;
42
+ hazardPenalties: typeof HAZARD_SEVERITY_PENALTIES;
43
+ };
44
+ changelog: ChangelogSection;
45
+ }
46
+ /** Compute a deterministic SHA-256 checksum for a data section */
47
+ export declare function computeSectionChecksum(data: unknown): string;
48
+ /** Build a complete documentation manifest from pre-computed input. Pure function — no I/O. */
49
+ export declare function buildDocsManifest(input: DocsManifestInput): DocsManifest;
50
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/core/docs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;IAC9C,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE;QACT,aAAa,EAAE,OAAO,cAAc,CAAC;QACrC,YAAY,EAAE,OAAO,aAAa,CAAC;QACnC,WAAW,EAAE,OAAO,YAAY,CAAC;QACjC,eAAe,EAAE,OAAO,yBAAyB,CAAC;KACnD,CAAC;IACF,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAeD,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAI5D;AAID,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAyCxE"}
@@ -0,0 +1,67 @@
1
+ // SLOPE — Documentation Manifest Builder
2
+ // Pure functions — no filesystem or git I/O.
3
+ import { createHash } from 'node:crypto';
4
+ import { GUARD_DEFINITIONS } from './guard.js';
5
+ import { listMetaphors } from './metaphor.js';
6
+ import { listRoles } from './roles.js';
7
+ import { PAR_THRESHOLDS, SLOPE_FACTORS, SCORE_LABELS, HAZARD_SEVERITY_PENALTIES, } from './constants.js';
8
+ // ── Checksum ───────────────────────────────────────────────────
9
+ /** Recursively sort object keys for deterministic serialization */
10
+ function sortObjectKeys(value) {
11
+ if (value === null || typeof value !== 'object')
12
+ return value;
13
+ if (Array.isArray(value))
14
+ return value.map(sortObjectKeys);
15
+ const sorted = {};
16
+ for (const key of Object.keys(value).sort()) {
17
+ sorted[key] = sortObjectKeys(value[key]);
18
+ }
19
+ return sorted;
20
+ }
21
+ /** Compute a deterministic SHA-256 checksum for a data section */
22
+ export function computeSectionChecksum(data) {
23
+ const sorted = sortObjectKeys(data);
24
+ const json = JSON.stringify(sorted);
25
+ return createHash('sha256').update(json).digest('hex');
26
+ }
27
+ // ── Builder ────────────────────────────────────────────────────
28
+ /** Build a complete documentation manifest from pre-computed input. Pure function — no I/O. */
29
+ export function buildDocsManifest(input) {
30
+ const metaphors = listMetaphors();
31
+ if (metaphors.length === 0) {
32
+ console.warn('Warning: metaphor registry is empty — manifest will have no metaphors');
33
+ }
34
+ const roles = listRoles();
35
+ const guards = [...GUARD_DEFINITIONS];
36
+ const constants = {
37
+ parThresholds: PAR_THRESHOLDS,
38
+ slopeFactors: SLOPE_FACTORS,
39
+ scoreLabels: SCORE_LABELS,
40
+ hazardPenalties: HAZARD_SEVERITY_PENALTIES,
41
+ };
42
+ const sections = {
43
+ commands: input.commands,
44
+ guards,
45
+ metaphors,
46
+ roles,
47
+ constants,
48
+ changelog: input.changelog,
49
+ };
50
+ const checksums = {};
51
+ for (const [key, value] of Object.entries(sections)) {
52
+ checksums[key] = computeSectionChecksum(value);
53
+ }
54
+ return {
55
+ version: input.version,
56
+ generatedAt: new Date().toISOString(),
57
+ gitSha: input.gitSha,
58
+ checksums,
59
+ commands: input.commands,
60
+ guards,
61
+ metaphors,
62
+ roles,
63
+ constants,
64
+ changelog: input.changelog,
65
+ };
66
+ }
67
+ //# sourceMappingURL=docs.js.map