@schnick371/devsteps-shared 0.8.4 → 1.0.0-next.2

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 (148) hide show
  1. package/README.md +8 -3
  2. package/dist/constants/index.d.ts +26 -0
  3. package/dist/constants/index.d.ts.map +1 -1
  4. package/dist/constants/index.js +26 -0
  5. package/dist/constants/index.js.map +1 -1
  6. package/dist/core/add.d.ts +8 -1
  7. package/dist/core/add.d.ts.map +1 -1
  8. package/dist/core/add.js +17 -10
  9. package/dist/core/add.js.map +1 -1
  10. package/dist/core/archive.d.ts +9 -2
  11. package/dist/core/archive.d.ts.map +1 -1
  12. package/dist/core/archive.js +40 -30
  13. package/dist/core/archive.js.map +1 -1
  14. package/dist/core/auto-migrate-detect.d.ts +61 -0
  15. package/dist/core/auto-migrate-detect.d.ts.map +1 -0
  16. package/dist/core/auto-migrate-detect.js +68 -0
  17. package/dist/core/auto-migrate-detect.js.map +1 -0
  18. package/dist/core/auto-migrate-impl.d.ts +32 -0
  19. package/dist/core/auto-migrate-impl.d.ts.map +1 -0
  20. package/dist/core/auto-migrate-impl.js +120 -0
  21. package/dist/core/auto-migrate-impl.js.map +1 -0
  22. package/dist/core/auto-migrate.d.ts +16 -131
  23. package/dist/core/auto-migrate.d.ts.map +1 -1
  24. package/dist/core/auto-migrate.js +25 -318
  25. package/dist/core/auto-migrate.js.map +1 -1
  26. package/dist/core/auto-migrate.test.js +11 -7
  27. package/dist/core/auto-migrate.test.js.map +1 -1
  28. package/dist/core/bulk-update.d.ts +13 -6
  29. package/dist/core/bulk-update.d.ts.map +1 -1
  30. package/dist/core/bulk-update.js +19 -12
  31. package/dist/core/bulk-update.js.map +1 -1
  32. package/dist/core/config.d.ts +7 -0
  33. package/dist/core/config.d.ts.map +1 -1
  34. package/dist/core/config.js +7 -0
  35. package/dist/core/config.js.map +1 -1
  36. package/dist/core/context.d.ts +13 -4
  37. package/dist/core/context.d.ts.map +1 -1
  38. package/dist/core/context.js +22 -13
  39. package/dist/core/context.js.map +1 -1
  40. package/dist/core/get.d.ts +8 -1
  41. package/dist/core/get.d.ts.map +1 -1
  42. package/dist/core/get.js +12 -5
  43. package/dist/core/get.js.map +1 -1
  44. package/dist/core/index-rebuild.d.ts +3 -0
  45. package/dist/core/index-rebuild.d.ts.map +1 -1
  46. package/dist/core/index-rebuild.js +11 -8
  47. package/dist/core/index-rebuild.js.map +1 -1
  48. package/dist/core/index-rebuild.test.js +6 -15
  49. package/dist/core/index-rebuild.test.js.map +1 -1
  50. package/dist/core/index-refs-core.d.ts +114 -0
  51. package/dist/core/index-refs-core.d.ts.map +1 -0
  52. package/dist/core/index-refs-core.js +306 -0
  53. package/dist/core/index-refs-core.js.map +1 -0
  54. package/dist/core/index-refs.d.ts +9 -124
  55. package/dist/core/index-refs.d.ts.map +1 -1
  56. package/dist/core/index-refs.js +19 -345
  57. package/dist/core/index-refs.js.map +1 -1
  58. package/dist/core/index-refs.test.js +3 -3
  59. package/dist/core/index-refs.test.js.map +1 -1
  60. package/dist/core/index.d.ts +19 -10
  61. package/dist/core/index.d.ts.map +1 -1
  62. package/dist/core/index.js +19 -10
  63. package/dist/core/index.js.map +1 -1
  64. package/dist/core/link.d.ts +33 -0
  65. package/dist/core/link.d.ts.map +1 -0
  66. package/dist/core/link.js +102 -0
  67. package/dist/core/link.js.map +1 -0
  68. package/dist/core/list.d.ts +9 -1
  69. package/dist/core/list.d.ts.map +1 -1
  70. package/dist/core/list.js +92 -15
  71. package/dist/core/list.js.map +1 -1
  72. package/dist/core/unlink.d.ts +26 -0
  73. package/dist/core/unlink.d.ts.map +1 -0
  74. package/dist/core/unlink.js +78 -0
  75. package/dist/core/unlink.js.map +1 -0
  76. package/dist/core/update.d.ts +8 -1
  77. package/dist/core/update.d.ts.map +1 -1
  78. package/dist/core/update.js +23 -15
  79. package/dist/core/update.js.map +1 -1
  80. package/dist/core/validation.d.ts +26 -1
  81. package/dist/core/validation.d.ts.map +1 -1
  82. package/dist/core/validation.js +65 -4
  83. package/dist/core/validation.js.map +1 -1
  84. package/dist/index.d.ts +11 -4
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +11 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/schemas/analysis.d.ts +206 -0
  89. package/dist/schemas/analysis.d.ts.map +1 -0
  90. package/dist/schemas/analysis.js +138 -0
  91. package/dist/schemas/analysis.js.map +1 -0
  92. package/dist/schemas/cbp-loops.d.ts +154 -0
  93. package/dist/schemas/cbp-loops.d.ts.map +1 -0
  94. package/dist/schemas/cbp-loops.js +160 -0
  95. package/dist/schemas/cbp-loops.js.map +1 -0
  96. package/dist/schemas/cbp-loops.test.d.ts +10 -0
  97. package/dist/schemas/cbp-loops.test.d.ts.map +1 -0
  98. package/dist/schemas/cbp-loops.test.js +268 -0
  99. package/dist/schemas/cbp-loops.test.js.map +1 -0
  100. package/dist/schemas/cbp-mandate.d.ts +107 -0
  101. package/dist/schemas/cbp-mandate.d.ts.map +1 -0
  102. package/dist/schemas/cbp-mandate.js +107 -0
  103. package/dist/schemas/cbp-mandate.js.map +1 -0
  104. package/dist/schemas/cbp-mandate.test.d.ts +10 -0
  105. package/dist/schemas/cbp-mandate.test.d.ts.map +1 -0
  106. package/dist/schemas/cbp-mandate.test.js +188 -0
  107. package/dist/schemas/cbp-mandate.test.js.map +1 -0
  108. package/dist/schemas/index-refs.schema.d.ts +4 -1
  109. package/dist/schemas/index-refs.schema.d.ts.map +1 -1
  110. package/dist/schemas/index-refs.schema.js +24 -3
  111. package/dist/schemas/index-refs.schema.js.map +1 -1
  112. package/dist/schemas/index.d.ts +17 -7
  113. package/dist/schemas/index.d.ts.map +1 -1
  114. package/dist/schemas/index.js +14 -1
  115. package/dist/schemas/index.js.map +1 -1
  116. package/dist/schemas/project.d.ts +7 -0
  117. package/dist/schemas/project.d.ts.map +1 -1
  118. package/dist/schemas/project.js +7 -0
  119. package/dist/schemas/project.js.map +1 -1
  120. package/dist/schemas/relationships.d.ts +3 -0
  121. package/dist/schemas/relationships.d.ts.map +1 -1
  122. package/dist/schemas/relationships.js +3 -0
  123. package/dist/schemas/relationships.js.map +1 -1
  124. package/dist/types/commands.d.ts +7 -0
  125. package/dist/types/commands.d.ts.map +1 -1
  126. package/dist/types/commands.js +7 -0
  127. package/dist/types/commands.js.map +1 -1
  128. package/dist/types/index-refs.types.d.ts +3 -0
  129. package/dist/types/index-refs.types.d.ts.map +1 -1
  130. package/dist/types/index-refs.types.js +3 -0
  131. package/dist/types/index-refs.types.js.map +1 -1
  132. package/dist/types/index.d.ts +9 -1
  133. package/dist/types/index.d.ts.map +1 -1
  134. package/dist/types/index.js +7 -0
  135. package/dist/types/index.js.map +1 -1
  136. package/dist/utils/cache.d.ts +7 -0
  137. package/dist/utils/cache.d.ts.map +1 -1
  138. package/dist/utils/cache.js +7 -0
  139. package/dist/utils/cache.js.map +1 -1
  140. package/dist/utils/index.d.ts +9 -1
  141. package/dist/utils/index.d.ts.map +1 -1
  142. package/dist/utils/index.js +26 -3
  143. package/dist/utils/index.js.map +1 -1
  144. package/dist/utils/init-helpers.d.ts +30 -0
  145. package/dist/utils/init-helpers.d.ts.map +1 -0
  146. package/dist/utils/init-helpers.js +134 -0
  147. package/dist/utils/init-helpers.js.map +1 -0
  148. package/package.json +1 -1
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Context Budget Protocol (CBP) — Analysis Schemas
6
+ * Zod schemas for T3 archaeology and analysis envelope files.
7
+ *
8
+ * @see EPIC-027 CBP Tier-3 Analysis Tools
9
+ */
10
+ import { z } from 'zod';
11
+ /**
12
+ * Context Budget Protocol (CBP) — Analysis Schemas
13
+ *
14
+ * Defines structured JSON envelopes for AI agent-to-agent handoffs.
15
+ * Aspect agents write AnalysisBriefing to disk (.devsteps/analysis/[ID]/)
16
+ * and return CompressedVerdict envelopes (~150 tokens) in-memory to the coordinator.
17
+ *
18
+ * @see EPIC-027 Context Budget Protocol Infrastructure
19
+ */
20
+ // ─── Aspect types ────────────────────────────────────────────────────────────
21
+ export const AnalysisAspect = z.enum([
22
+ 'impact',
23
+ 'constraints',
24
+ 'quality',
25
+ 'staleness',
26
+ 'integration',
27
+ 'internal', // competitive analyst: codebase
28
+ 'web', // competitive analyst: internet
29
+ 'meta', // coordinator judge verdict
30
+ ]);
31
+ // ─── Verdict types ───────────────────────────────────────────────────────────
32
+ export const AspectVerdict = z.enum([
33
+ 'PROCEED',
34
+ 'PROCEED-WITH-CAUTION',
35
+ 'STOP',
36
+ // staleness-specific
37
+ 'CURRENT',
38
+ 'STALE-PARTIAL',
39
+ 'STALE-OBSOLETE',
40
+ 'STALE-CONFLICT',
41
+ ]);
42
+ // ─── CompressedVerdict ───────────────────────────────────────────────────────
43
+ /**
44
+ * Compressed envelope returned IN-MEMORY by aspect agents to the coordinator.
45
+ * Max ~150 tokens — coordinator reads only this, never the full report.
46
+ */
47
+ export const CompressedVerdictSchema = z.object({
48
+ /** Which aspect produced this envelope */
49
+ aspect: AnalysisAspect,
50
+ /** Proceed / stop / caution signal */
51
+ verdict: AspectVerdict,
52
+ /** 0.0–1.0 confidence in the verdict */
53
+ confidence: z.number().min(0).max(1),
54
+ /** Max 3, max 100 chars each — the coordinator reads these */
55
+ top3_findings: z.array(z.string().max(200)).max(3),
56
+ /** Relative path to the full AnalysisBriefing JSON on disk */
57
+ report_path: z.string(),
58
+ /** ISO 8601 timestamp */
59
+ timestamp: z.string().datetime(),
60
+ // ── Competitive mode fields (aspect = 'internal' | 'web' | 'meta') ───────
61
+ /** Winner agent name (meta verdict only) */
62
+ winner: z.string().optional(),
63
+ /** Rule applied by the judge (meta verdict only) */
64
+ rule_applied: z.string().optional(),
65
+ /** Path to winning implementation briefing (meta verdict only) */
66
+ implementation_briefing: z.string().optional(),
67
+ /** Internet advantage claim (web analyst only) */
68
+ internet_advantage_claim: z.string().optional(),
69
+ /** Arbitrary aspect-specific scalar fields (kept minimal) */
70
+ metadata: z.record(z.string(), z.unknown()).default({}),
71
+ });
72
+ // ─── AnalysisBriefing ────────────────────────────────────────────────────────
73
+ /**
74
+ * Full analysis report written to disk by aspect agents.
75
+ * Path: `.devsteps/analysis/[TASK-ID]/[aspect]-report.json`
76
+ * Contains the CompressedVerdict envelope + full markdown analysis text.
77
+ * Impl-subagent reads this for implementation context.
78
+ */
79
+ export const AnalysisBriefingSchema = z.object({
80
+ /** DevSteps item ID this analysis belongs to */
81
+ task_id: z.string().regex(/^(EPIC|STORY|TASK|REQ|FEAT|BUG|SPIKE|TEST)-\d{3,}$/),
82
+ /** Which aspect this briefing covers */
83
+ aspect: AnalysisAspect,
84
+ /** Name of the agent that produced this briefing */
85
+ analyst: z.string(),
86
+ /** When the briefing was created */
87
+ created: z.string().datetime(),
88
+ /** The compressed envelope (also returned in-memory to coordinator) */
89
+ envelope: CompressedVerdictSchema,
90
+ /** Full markdown analysis text for implementation agents to read */
91
+ full_analysis: z.string(),
92
+ /** Files identified as affected by this analysis */
93
+ affected_files: z.array(z.string()).default([]),
94
+ /** Prioritized action recommendations */
95
+ recommendations: z.array(z.string()).default([]),
96
+ /** Schema version for forward compatibility */
97
+ schema_version: z.literal('1.0').default('1.0'),
98
+ });
99
+ // ─── SprintVerdict ───────────────────────────────────────────────────────────
100
+ /**
101
+ * Meta-verdict written by the coordinator judge in Competitive Mode.
102
+ * Path: `.devsteps/analysis/[TASK-ID]/meta.json`
103
+ */
104
+ export const SprintVerdictSchema = z.object({
105
+ task_id: z.string(),
106
+ mode: z.literal('competitive'),
107
+ winner: z.enum(['devsteps-analyst-internal-subagent', 'devsteps-analyst-web-subagent']),
108
+ rule_applied: z.enum(['RULE 1', 'RULE 2', 'RULE 3', 'RULE 4', 'RULE 5']),
109
+ implementation_briefing: z.string(),
110
+ flags: z.array(z.string()).default([]),
111
+ created: z.string().datetime(),
112
+ schema_version: z.literal('1.0').default('1.0'),
113
+ });
114
+ // ─── EnrichedSprintBrief ─────────────────────────────────────────────────────
115
+ /**
116
+ * Produced by devsteps-planner at sprint start from global archaeology + backlog.
117
+ * Path: `.devsteps/analysis/sprint-[DATE]/enriched-sprint-brief.json`
118
+ */
119
+ export const SprintItemRisk = z.enum(['QUICK', 'STANDARD', 'FULL', 'COMPETITIVE']);
120
+ export const EnrichedSprintItemSchema = z.object({
121
+ item_id: z.string(),
122
+ title: z.string(),
123
+ risk: SprintItemRisk,
124
+ estimated_minutes: z.number().optional(),
125
+ affected_files: z.array(z.string()).default([]),
126
+ depends_on: z.array(z.string()).default([]),
127
+ shared_file_conflicts: z.array(z.string()).default([]),
128
+ notes: z.string().optional(),
129
+ });
130
+ export const EnrichedSprintBriefSchema = z.object({
131
+ sprint_date: z.string(),
132
+ global_context_path: z.string(),
133
+ ordered_items: z.array(EnrichedSprintItemSchema),
134
+ invalidation_cache: z.array(z.string()).default([]),
135
+ created: z.string().datetime(),
136
+ schema_version: z.literal('1.0').default('1.0'),
137
+ });
138
+ //# sourceMappingURL=analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/schemas/analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Context Budget Protocol (CBP) — Loop Control Schemas
6
+ * Zod schemas for rejection feedback, iteration signals, and escalation.
7
+ *
8
+ * @see EPIC-028 CBP Tier-2 Mandate Tools
9
+ */
10
+ import { z } from 'zod';
11
+ /**
12
+ * Context Budget Protocol (CBP) — Loop Control Schemas
13
+ *
14
+ * These schemas enable bounded loops across all tiers without infinite recursion.
15
+ * Every loop MUST have a hard termination bound enforced in the handler.
16
+ *
17
+ * Loop types:
18
+ * - TDD inner loop: test → impl → test (max 3 iterations, Tier-3)
19
+ * - Review-Fix loop: review → rejection → impl → review (max 3 iterations, Tier-2↔Tier-3)
20
+ * - Clarification loop: research → ambiguity → re-research (max 2 iterations, Tier-2)
21
+ * - Adaptive replanning: every 5 items or on risk drift (max once per 5 items, Tier-1)
22
+ *
23
+ * @see EPIC-028 N-Tier Agent Hierarchy
24
+ * @see STORY-108 MandateResult CBP Extension
25
+ * @see SPIKE-015 Tier-4 + Loop Pattern Formalization
26
+ */
27
+ export declare const LoopType: z.ZodEnum<{
28
+ tdd: "tdd";
29
+ "review-fix": "review-fix";
30
+ clarification: "clarification";
31
+ replanning: "replanning";
32
+ }>;
33
+ export type LoopType = z.infer<typeof LoopType>;
34
+ export declare const LoopStatus: z.ZodEnum<{
35
+ continuing: "continuing";
36
+ resolved: "resolved";
37
+ exhausted: "exhausted";
38
+ escalated: "escalated";
39
+ }>;
40
+ export type LoopStatus = z.infer<typeof LoopStatus>;
41
+ /**
42
+ * Written by deep-analyst-quality (Tier-2) when a Tier-3 implementation
43
+ * fails the quality gate. Tier-1 reads this and re-dispatches the Tier-3
44
+ * impl agent with the rejection context attached.
45
+ *
46
+ * Storage: .devsteps/cbp/[sprint_id]/[item_id].rejection-[iteration].json
47
+ * Iteration files are append-only (never overwrite) for audit trail.
48
+ */
49
+ export declare const RejectionIssueSchema: z.ZodObject<{
50
+ file: z.ZodString;
51
+ line: z.ZodOptional<z.ZodNumber>;
52
+ issue: z.ZodString;
53
+ suggestion: z.ZodString;
54
+ }, z.core.$strip>;
55
+ export type RejectionIssue = z.infer<typeof RejectionIssueSchema>;
56
+ export declare const RejectionType: z.ZodEnum<{
57
+ "quality-insufficient": "quality-insufficient";
58
+ "wrong-approach": "wrong-approach";
59
+ "missing-requirement": "missing-requirement";
60
+ "test-failure": "test-failure";
61
+ "type-error": "type-error";
62
+ }>;
63
+ export type RejectionType = z.infer<typeof RejectionType>;
64
+ export declare const RejectionFeedbackSchema: z.ZodObject<{
65
+ target_subagent: z.ZodString;
66
+ iteration: z.ZodNumber;
67
+ rejection_type: z.ZodEnum<{
68
+ "quality-insufficient": "quality-insufficient";
69
+ "wrong-approach": "wrong-approach";
70
+ "missing-requirement": "missing-requirement";
71
+ "test-failure": "test-failure";
72
+ "type-error": "type-error";
73
+ }>;
74
+ violated_criteria: z.ZodArray<z.ZodString>;
75
+ specific_issues: z.ZodArray<z.ZodObject<{
76
+ file: z.ZodString;
77
+ line: z.ZodOptional<z.ZodNumber>;
78
+ issue: z.ZodString;
79
+ suggestion: z.ZodString;
80
+ }, z.core.$strip>>;
81
+ max_iterations_remaining: z.ZodNumber;
82
+ escalate_if_remaining: z.ZodDefault<z.ZodNumber>;
83
+ sprint_id: z.ZodString;
84
+ item_id: z.ZodString;
85
+ created_at: z.ZodString;
86
+ schema_version: z.ZodDefault<z.ZodLiteral<"1.0">>;
87
+ }, z.core.$strip>;
88
+ export type RejectionFeedback = z.infer<typeof RejectionFeedbackSchema>;
89
+ /**
90
+ * Written by any agent in a loop to signal the current loop state to Tier-1.
91
+ * Tier-1 checks this file before each iteration to detect stuck/resolved loops.
92
+ *
93
+ * Storage: .devsteps/cbp/[sprint_id]/[item_id].loop-signal.json
94
+ * OVERWRITES previous signal — represents CURRENT state (not history).
95
+ * Use iteration field to reconstruct history if needed.
96
+ */
97
+ export declare const IterationSignalSchema: z.ZodObject<{
98
+ loop_type: z.ZodEnum<{
99
+ tdd: "tdd";
100
+ "review-fix": "review-fix";
101
+ clarification: "clarification";
102
+ replanning: "replanning";
103
+ }>;
104
+ status: z.ZodEnum<{
105
+ continuing: "continuing";
106
+ resolved: "resolved";
107
+ exhausted: "exhausted";
108
+ escalated: "escalated";
109
+ }>;
110
+ iteration: z.ZodNumber;
111
+ max_iterations: z.ZodNumber;
112
+ sprint_id: z.ZodString;
113
+ item_id: z.ZodString;
114
+ notes: z.ZodOptional<z.ZodString>;
115
+ signaled_at: z.ZodString;
116
+ schema_version: z.ZodDefault<z.ZodLiteral<"1.0">>;
117
+ }, z.core.$strip>;
118
+ export type IterationSignal = z.infer<typeof IterationSignalSchema>;
119
+ /**
120
+ * Written by any agent (any tier) when it cannot proceed without external input.
121
+ * Tier-1 checks for pending escalations before each phase.
122
+ * Escalations PAUSE execution — never silently continue.
123
+ *
124
+ * Storage: .devsteps/cbp/[sprint_id]/escalations/[escalation_id].json
125
+ * Files are NOT overwritten — each escalation gets a unique ID.
126
+ */
127
+ export declare const EscalationType: z.ZodEnum<{
128
+ "human-required": "human-required";
129
+ "contradicting-requirements": "contradicting-requirements";
130
+ "budget-exhausted": "budget-exhausted";
131
+ "architectural-decision": "architectural-decision";
132
+ "scope-ambiguous": "scope-ambiguous";
133
+ }>;
134
+ export type EscalationType = z.infer<typeof EscalationType>;
135
+ export declare const EscalationSignalSchema: z.ZodObject<{
136
+ escalation_id: z.ZodString;
137
+ source_agent: z.ZodString;
138
+ escalation_type: z.ZodEnum<{
139
+ "human-required": "human-required";
140
+ "contradicting-requirements": "contradicting-requirements";
141
+ "budget-exhausted": "budget-exhausted";
142
+ "architectural-decision": "architectural-decision";
143
+ "scope-ambiguous": "scope-ambiguous";
144
+ }>;
145
+ context: z.ZodString;
146
+ decision_needed: z.ZodString;
147
+ blocking_items: z.ZodArray<z.ZodString>;
148
+ suggested_resolution: z.ZodOptional<z.ZodString>;
149
+ sprint_id: z.ZodString;
150
+ escalated_at: z.ZodString;
151
+ schema_version: z.ZodDefault<z.ZodLiteral<"1.0">>;
152
+ }, z.core.$strip>;
153
+ export type EscalationSignal = z.infer<typeof EscalationSignalSchema>;
154
+ //# sourceMappingURL=cbp-loops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbp-loops.d.ts","sourceRoot":"","sources":["../../src/schemas/cbp-loops.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;GAeG;AAIH,eAAO,MAAM,QAAQ;;;;;EAKnB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,UAAU;;;;;EAKrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAIpD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB;;;;;iBAS/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,aAAa;;;;;;EAMxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;iBAuBlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAIxE;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;iBAmBhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;EAMzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;iBAwBjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * Context Budget Protocol (CBP) — Loop Control Schemas
6
+ * Zod schemas for rejection feedback, iteration signals, and escalation.
7
+ *
8
+ * @see EPIC-028 CBP Tier-2 Mandate Tools
9
+ */
10
+ import { z } from 'zod';
11
+ /**
12
+ * Context Budget Protocol (CBP) — Loop Control Schemas
13
+ *
14
+ * These schemas enable bounded loops across all tiers without infinite recursion.
15
+ * Every loop MUST have a hard termination bound enforced in the handler.
16
+ *
17
+ * Loop types:
18
+ * - TDD inner loop: test → impl → test (max 3 iterations, Tier-3)
19
+ * - Review-Fix loop: review → rejection → impl → review (max 3 iterations, Tier-2↔Tier-3)
20
+ * - Clarification loop: research → ambiguity → re-research (max 2 iterations, Tier-2)
21
+ * - Adaptive replanning: every 5 items or on risk drift (max once per 5 items, Tier-1)
22
+ *
23
+ * @see EPIC-028 N-Tier Agent Hierarchy
24
+ * @see STORY-108 MandateResult CBP Extension
25
+ * @see SPIKE-015 Tier-4 + Loop Pattern Formalization
26
+ */
27
+ // ─── Loop Types ───────────────────────────────────────────────────────────────
28
+ export const LoopType = z.enum([
29
+ 'tdd', // Red-Green-Refactor inner loop
30
+ 'review-fix', // Reviewer rejects → impl agent fixes → reviewer re-checks
31
+ 'clarification', // Analyst encounters ambiguity → requests clarification
32
+ 'replanning', // Sprint executor replans after accumulated drift
33
+ ]);
34
+ export const LoopStatus = z.enum([
35
+ 'continuing', // Loop will execute another iteration
36
+ 'resolved', // Loop terminated with success
37
+ 'exhausted', // Max iterations reached without resolution
38
+ 'escalated', // Loop escalated to human or higher tier
39
+ ]);
40
+ // ─── RejectionFeedbackSchema ──────────────────────────────────────────────────
41
+ /**
42
+ * Written by deep-analyst-quality (Tier-2) when a Tier-3 implementation
43
+ * fails the quality gate. Tier-1 reads this and re-dispatches the Tier-3
44
+ * impl agent with the rejection context attached.
45
+ *
46
+ * Storage: .devsteps/cbp/[sprint_id]/[item_id].rejection-[iteration].json
47
+ * Iteration files are append-only (never overwrite) for audit trail.
48
+ */
49
+ export const RejectionIssueSchema = z.object({
50
+ /** Relative file path where the issue was found */
51
+ file: z.string(),
52
+ /** Line number (optional — for precise targeting) */
53
+ line: z.number().int().positive().optional(),
54
+ /** Human-readable description of the issue */
55
+ issue: z.string().max(300),
56
+ /** Concrete suggestion for the impl agent to fix */
57
+ suggestion: z.string().max(300),
58
+ });
59
+ export const RejectionType = z.enum([
60
+ 'quality-insufficient', // Score too low, general quality issues
61
+ 'wrong-approach', // Architectural or pattern decision is wrong
62
+ 'missing-requirement', // One or more acceptance criteria not met
63
+ 'test-failure', // Tests fail (TypeScript errors, assertion failures)
64
+ 'type-error', // TypeScript strict mode violations
65
+ ]);
66
+ export const RejectionFeedbackSchema = z.object({
67
+ /** Which Tier-3 agent produced the rejected output */
68
+ target_subagent: z.string(),
69
+ /** Current loop iteration (1-based) */
70
+ iteration: z.number().int().min(1).max(5),
71
+ /** Classification of the rejection reason */
72
+ rejection_type: RejectionType,
73
+ /** Which acceptance criteria from the story/task were violated */
74
+ violated_criteria: z.array(z.string()).min(1),
75
+ /** Specific, actionable issues for the impl agent */
76
+ specific_issues: z.array(RejectionIssueSchema).min(1).max(20),
77
+ /** How many more iterations remain (countdown) */
78
+ max_iterations_remaining: z.number().int().min(0).max(4),
79
+ /** If remaining iterations ≤ this value, escalate instead of retrying */
80
+ escalate_if_remaining: z.number().int().min(0).max(3).default(0),
81
+ /** Sprint ID for file path construction */
82
+ sprint_id: z.string(),
83
+ /** Which DevSteps item this rejection applies to */
84
+ item_id: z.string(),
85
+ /** ISO 8601 timestamp */
86
+ created_at: z.string().datetime(),
87
+ /** Schema version */
88
+ schema_version: z.literal('1.0').default('1.0'),
89
+ });
90
+ // ─── IterationSignalSchema ────────────────────────────────────────────────────
91
+ /**
92
+ * Written by any agent in a loop to signal the current loop state to Tier-1.
93
+ * Tier-1 checks this file before each iteration to detect stuck/resolved loops.
94
+ *
95
+ * Storage: .devsteps/cbp/[sprint_id]/[item_id].loop-signal.json
96
+ * OVERWRITES previous signal — represents CURRENT state (not history).
97
+ * Use iteration field to reconstruct history if needed.
98
+ */
99
+ export const IterationSignalSchema = z.object({
100
+ /** Which loop type is signaling */
101
+ loop_type: LoopType,
102
+ /** Current loop state */
103
+ status: LoopStatus,
104
+ /** Current iteration number (1-based) */
105
+ iteration: z.number().int().min(1),
106
+ /** Hard maximum — never execute iteration > max_iterations */
107
+ max_iterations: z.number().int().min(1).max(5),
108
+ /** Sprint ID for file path construction */
109
+ sprint_id: z.string(),
110
+ /** Which DevSteps item this loop is for */
111
+ item_id: z.string(),
112
+ /** Optional context for debugging or escalation messages */
113
+ notes: z.string().max(500).optional(),
114
+ /** ISO 8601 timestamp of this signal */
115
+ signaled_at: z.string().datetime(),
116
+ /** Schema version */
117
+ schema_version: z.literal('1.0').default('1.0'),
118
+ });
119
+ // ─── EscalationSignalSchema ───────────────────────────────────────────────────
120
+ /**
121
+ * Written by any agent (any tier) when it cannot proceed without external input.
122
+ * Tier-1 checks for pending escalations before each phase.
123
+ * Escalations PAUSE execution — never silently continue.
124
+ *
125
+ * Storage: .devsteps/cbp/[sprint_id]/escalations/[escalation_id].json
126
+ * Files are NOT overwritten — each escalation gets a unique ID.
127
+ */
128
+ export const EscalationType = z.enum([
129
+ 'human-required', // Cannot continue without user decision
130
+ 'contradicting-requirements', // Two requirements conflict (needs user priority)
131
+ 'budget-exhausted', // Token or time budget depleted
132
+ 'architectural-decision', // Requires architecture choice beyond agent scope
133
+ 'scope-ambiguous', // Acceptance criteria are genuinely unclear
134
+ ]);
135
+ export const EscalationSignalSchema = z.object({
136
+ /** Unique ID for this escalation — used as filename */
137
+ escalation_id: z.string().uuid(),
138
+ /** Which agent triggered the escalation */
139
+ source_agent: z.string(),
140
+ /** Classification of what decision is needed */
141
+ escalation_type: EscalationType,
142
+ /**
143
+ * What led to this escalation — max ~400 tokens.
144
+ * Must be self-contained (no file path references — Tier-1 reads this inline).
145
+ */
146
+ context: z.string().max(3000),
147
+ /** Specific yes/no or choice question for the human or Tier-1 */
148
+ decision_needed: z.string().max(500),
149
+ /** DevSteps item IDs blocked by this escalation */
150
+ blocking_items: z.array(z.string()).min(1),
151
+ /** What the agent suggests (included but not authoritative) */
152
+ suggested_resolution: z.string().max(500).optional(),
153
+ /** Sprint ID for file path construction */
154
+ sprint_id: z.string(),
155
+ /** ISO 8601 timestamp */
156
+ escalated_at: z.string().datetime(),
157
+ /** Schema version */
158
+ schema_version: z.literal('1.0').default('1.0'),
159
+ });
160
+ //# sourceMappingURL=cbp-loops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbp-loops.js","sourceRoot":"","sources":["../../src/schemas/cbp-loops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Unit Tests for CBP Loop Control Schemas
3
+ *
4
+ * Tests: RejectionFeedbackSchema, IterationSignalSchema, EscalationSignalSchema
5
+ *
6
+ * @see STORY-108 MandateResult CBP Extension
7
+ * @see TASK-234 Loop schemas: RejectionFeedback + IterationSignal + EscalationSignal
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=cbp-loops.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbp-loops.test.d.ts","sourceRoot":"","sources":["../../src/schemas/cbp-loops.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}