@schnick371/devsteps-shared 1.1.0-next.2 → 1.1.0-next.4

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 (55) hide show
  1. package/README.md +29 -0
  2. package/dist/agents.test.d.ts +18 -0
  3. package/dist/agents.test.d.ts.map +1 -0
  4. package/dist/agents.test.js +96 -0
  5. package/dist/agents.test.js.map +1 -0
  6. package/dist/constants/index.d.ts +2 -2
  7. package/dist/constants/index.d.ts.map +1 -1
  8. package/dist/constants/index.js +2 -2
  9. package/dist/constants/index.js.map +1 -1
  10. package/dist/core/add.d.ts.map +1 -1
  11. package/dist/core/add.js +4 -3
  12. package/dist/core/add.js.map +1 -1
  13. package/dist/core/context.d.ts +44 -0
  14. package/dist/core/context.d.ts.map +1 -1
  15. package/dist/core/context.js +326 -1
  16. package/dist/core/context.js.map +1 -1
  17. package/dist/core/context.test.d.ts +10 -0
  18. package/dist/core/context.test.d.ts.map +1 -0
  19. package/dist/core/context.test.js +239 -0
  20. package/dist/core/context.test.js.map +1 -0
  21. package/dist/core/index.d.ts +1 -1
  22. package/dist/core/index.d.ts.map +1 -1
  23. package/dist/core/index.js +1 -1
  24. package/dist/core/index.js.map +1 -1
  25. package/dist/core/update.js +4 -4
  26. package/dist/core/update.js.map +1 -1
  27. package/dist/schemas/cbp-mandate.d.ts +141 -6
  28. package/dist/schemas/cbp-mandate.d.ts.map +1 -1
  29. package/dist/schemas/cbp-mandate.js +121 -18
  30. package/dist/schemas/cbp-mandate.js.map +1 -1
  31. package/dist/schemas/cbp-mandate.test.d.ts +2 -1
  32. package/dist/schemas/cbp-mandate.test.d.ts.map +1 -1
  33. package/dist/schemas/cbp-mandate.test.js +130 -6
  34. package/dist/schemas/cbp-mandate.test.js.map +1 -1
  35. package/dist/utils/backup-github-files.d.ts +34 -0
  36. package/dist/utils/backup-github-files.d.ts.map +1 -0
  37. package/dist/utils/backup-github-files.js +137 -0
  38. package/dist/utils/backup-github-files.js.map +1 -0
  39. package/dist/utils/index.d.ts +25 -1
  40. package/dist/utils/index.d.ts.map +1 -1
  41. package/dist/utils/index.js +36 -1
  42. package/dist/utils/index.js.map +1 -1
  43. package/dist/utils/init-helpers.d.ts +14 -1
  44. package/dist/utils/init-helpers.d.ts.map +1 -1
  45. package/dist/utils/init-helpers.js +37 -2
  46. package/dist/utils/init-helpers.js.map +1 -1
  47. package/dist/utils/normalize.test.d.ts +15 -0
  48. package/dist/utils/normalize.test.d.ts.map +1 -0
  49. package/dist/utils/normalize.test.js +101 -0
  50. package/dist/utils/normalize.test.js.map +1 -0
  51. package/dist/utils/update-copilot-files.d.ts +59 -0
  52. package/dist/utils/update-copilot-files.d.ts.map +1 -0
  53. package/dist/utils/update-copilot-files.js +183 -0
  54. package/dist/utils/update-copilot-files.js.map +1 -0
  55. package/package.json +1 -1
package/README.md CHANGED
@@ -68,6 +68,35 @@ const items = await listItems('/path/to/.devsteps');
68
68
  - `updateItemSchema` - Validation for updates
69
69
  - `linkItemSchema` - Validation for relationships
70
70
 
71
+ ### CBP Schemas (Context Budget Protocol)
72
+
73
+ The `MandateResult` schema is split into two variants to support both backward-compatible reads and strict writes:
74
+
75
+ | Schema | Purpose | Strictness |
76
+ |--------|---------|------------|
77
+ | `ReadMandateResultSchema` | Reading historical and current `.result.json` files | Lenient — tolerates `item_ids:[]`, short analyst names |
78
+ | `WriteMandateResultSchema` | Validating new writes via `write_mandate_result` tool | Strict — requires `item_ids` ≥ 1, `analyst` matching `devsteps-R{N}-{name}` |
79
+ | `MandateResultSchema` | Backward-compat alias → `ReadMandateResultSchema` | Lenient (same as read) |
80
+
81
+ **Write-path constraints (`WriteMandateResultSchema`):**
82
+ - `item_ids`: must contain at least 1 item ID
83
+ - `analyst`: must match regex `/^devsteps-R\d+-/` (e.g., `devsteps-R2-aspect-impact`)
84
+
85
+ **Example:**
86
+ ```typescript
87
+ import {
88
+ ReadMandateResultSchema,
89
+ WriteMandateResultSchema,
90
+ type MandateResult,
91
+ } from '@schnick371/devsteps-shared';
92
+
93
+ // For reading files from disk:
94
+ const parsed = ReadMandateResultSchema.safeParse(rawJson);
95
+
96
+ // For validating new writes:
97
+ const validated = WriteMandateResultSchema.safeParse(newResult);
98
+ ```
99
+
71
100
  ## Documentation
72
101
 
73
102
  - [DevSteps Documentation](https://devsteps.dev)
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * CI Validation Suite: .github/agents/ frontmatter integrity
6
+ *
7
+ * Validates that all devsteps-*.agent.md files satisfy the Spider Web Dispatch
8
+ * protocol requirements:
9
+ * - Required YAML frontmatter fields present (description, model, tools)
10
+ * - user-invokable / user-invocable field present on every file
11
+ * - R0 coordinator files are user-invokable: true; all others are false
12
+ * - No file exceeds 150 lines (Copilot-Files-Standards-Specification limit)
13
+ *
14
+ * @see .github/instructions/Copilot-Files-Standards-Specification.instructions.md
15
+ * @see TASK-350
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=agents.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.test.d.ts","sourceRoot":"","sources":["../src/agents.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Copyright © 2025 Thomas Hertel (the@devsteps.dev)
3
+ * Licensed under the Apache License, Version 2.0
4
+ *
5
+ * CI Validation Suite: .github/agents/ frontmatter integrity
6
+ *
7
+ * Validates that all devsteps-*.agent.md files satisfy the Spider Web Dispatch
8
+ * protocol requirements:
9
+ * - Required YAML frontmatter fields present (description, model, tools)
10
+ * - user-invokable / user-invocable field present on every file
11
+ * - R0 coordinator files are user-invokable: true; all others are false
12
+ * - No file exceeds 150 lines (Copilot-Files-Standards-Specification limit)
13
+ *
14
+ * @see .github/instructions/Copilot-Files-Standards-Specification.instructions.md
15
+ * @see TASK-350
16
+ */
17
+ import { describe, expect, it } from 'vitest';
18
+ import { readdirSync, readFileSync } from 'node:fs';
19
+ import { dirname, join, resolve } from 'node:path';
20
+ import { fileURLToPath } from 'node:url';
21
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
+ const workspaceRoot = resolve(__dirname, '../../..');
23
+ const agentsDir = join(workspaceRoot, '.github', 'agents');
24
+ /**
25
+ * Agents that are user-invokable (true).
26
+ * Includes R0 coordinators and special entry-point agents.
27
+ */
28
+ const USER_INVOKABLE_AGENTS = new Set([
29
+ 'devsteps-R0-coord.agent.md',
30
+ 'devsteps-R0-coord-sprint.agent.md',
31
+ 'devsteps-R0-coord-ishikawa.agent.md',
32
+ 'devsteps-R0-coord-solo.agent.md',
33
+ 'devsteps-backlog-curator.agent.md',
34
+ ]);
35
+ /**
36
+ * Parse YAML frontmatter from a markdown file.
37
+ * Only extracts scalar string values — sufficient for agent file validation.
38
+ */
39
+ function parseFrontmatter(content) {
40
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
41
+ if (!match)
42
+ return {};
43
+ const yaml = match[1];
44
+ const result = {};
45
+ // Extract simple key: value pairs (handles quoted and unquoted values)
46
+ const scalarRe = /^([\w-]+):\s*(.+)$/gm;
47
+ let m;
48
+ while ((m = scalarRe.exec(yaml)) !== null) {
49
+ const key = m[1];
50
+ const value = m[2].replace(/^["']|["']$/g, '').trim();
51
+ result[key] = value;
52
+ }
53
+ return result;
54
+ }
55
+ function getAgentFiles() {
56
+ return readdirSync(agentsDir)
57
+ .filter((f) => f.startsWith('devsteps-') && f.endsWith('.agent.md'))
58
+ .sort();
59
+ }
60
+ describe('agent file frontmatter', () => {
61
+ const files = getAgentFiles();
62
+ it('finds at least 30 agent files', () => {
63
+ expect(files.length).toBeGreaterThanOrEqual(30);
64
+ });
65
+ for (const filename of files) {
66
+ const filePath = join(agentsDir, filename);
67
+ const content = readFileSync(filePath, 'utf-8');
68
+ const lines = content.split('\n');
69
+ const fm = parseFrontmatter(content);
70
+ const isCoord = USER_INVOKABLE_AGENTS.has(filename);
71
+ describe(filename, () => {
72
+ it('has description field', () => {
73
+ expect(fm.description, 'description required').toBeTruthy();
74
+ });
75
+ it('has model field', () => {
76
+ expect(fm.model, 'model required').toBeTruthy();
77
+ });
78
+ it('has tools field', () => {
79
+ expect(fm.tools, 'tools required').toBeTruthy();
80
+ });
81
+ it('has user-invokable or user-invocable field', () => {
82
+ const hasField = 'user-invokable' in fm || 'user-invocable' in fm;
83
+ expect(hasField, 'user-invokable/user-invocable required').toBe(true);
84
+ });
85
+ it(`user-invokable/invocable = ${isCoord ? 'true' : 'false'} for ${isCoord ? 'coordinator' : 'leaf'} agent`, () => {
86
+ const value = fm['user-invokable'] ?? fm['user-invocable'];
87
+ const expectedBool = isCoord;
88
+ expect(value === 'true', `expected ${expectedBool} for ${filename}`).toBe(expectedBool);
89
+ });
90
+ it('does not exceed 150 lines', () => {
91
+ expect(lines.length, `${filename} exceeds 150 lines (${lines.length})`).toBeLessThanOrEqual(150);
92
+ });
93
+ });
94
+ }
95
+ });
96
+ //# sourceMappingURL=agents.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.test.js","sourceRoot":"","sources":["../src/agents.test.ts"],"names":[],"mappings":"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"}
@@ -95,8 +95,8 @@ export declare const CBP_LOOP: {
95
95
  readonly MAX_CONFLICT_RESOLUTION_ROUNDS: 2;
96
96
  /** Max Tier-2 parallel T3 dispatches per turn */
97
97
  readonly MAX_PARALLEL_T3_DISPATCHES: 10;
98
- /** Max tokens for MandateResult findings field (~800 tokens) */
99
- readonly MAX_MANDATE_FINDINGS_CHARS: 6000;
98
+ /** Max tokens for MandateResult findings field (~1600 tokens) */
99
+ readonly MAX_MANDATE_FINDINGS_CHARS: 12000;
100
100
  };
101
101
  export type RelationshipTypeValue = (typeof RELATIONSHIP_TYPE)[keyof typeof RELATIONSHIP_TYPE];
102
102
  export type MethodologyValue = (typeof METHODOLOGY)[keyof typeof METHODOLOGY];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;CASZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CAYpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC;AAE/D;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ;IACnB,wEAAwE;;IAExE,wDAAwD;;IAExD,0DAA0D;;IAE1D,kEAAkE;;IAElE,iDAAiD;;IAEjD,gEAAgE;;CAExD,CAAC;AACX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAC/F,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAC9E,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;CASZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;CAYpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC;AAE/D;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ;IACnB,wEAAwE;;IAExE,wDAAwD;;IAExD,0DAA0D;;IAE1D,kEAAkE;;IAElE,iDAAiD;;IAEjD,iEAAiE;;CAEzD,CAAC;AACX,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAC/F,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAC9E,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
@@ -90,7 +90,7 @@ export const CBP_LOOP = {
90
90
  MAX_CONFLICT_RESOLUTION_ROUNDS: 2,
91
91
  /** Max Tier-2 parallel T3 dispatches per turn */
92
92
  MAX_PARALLEL_T3_DISPATCHES: 10,
93
- /** Max tokens for MandateResult findings field (~800 tokens) */
94
- MAX_MANDATE_FINDINGS_CHARS: 6000,
93
+ /** Max tokens for MandateResult findings field (~1600 tokens) */
94
+ MAX_MANDATE_FINDINGS_CHARS: 12000,
95
95
  };
96
96
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;CACtB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;CACR,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;CACJ,CAAC;AAQX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,wEAAwE;IACxE,yBAAyB,EAAE,CAAC;IAC5B,wDAAwD;IACxD,kBAAkB,EAAE,CAAC;IACrB,0DAA0D;IAC1D,wBAAwB,EAAE,CAAC;IAC3B,kEAAkE;IAClE,8BAA8B,EAAE,CAAC;IACjC,iDAAiD;IACjD,0BAA0B,EAAE,EAAE;IAC9B,gEAAgE;IAChE,0BAA0B,EAAE,IAAI;CACxB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;CACtB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;CACR,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;CACJ,CAAC;AAQX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,wEAAwE;IACxE,yBAAyB,EAAE,CAAC;IAC5B,wDAAwD;IACxD,kBAAkB,EAAE,CAAC;IACrB,0DAA0D;IAC1D,wBAAwB,EAAE,CAAC;IAC3B,kEAAkE;IAClE,8BAA8B,EAAE,CAAC;IACjC,iDAAiD;IACjD,0BAA0B,EAAE,EAAE;IAC9B,iEAAiE;IACjE,0BAA0B,EAAE,KAAK;CACzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/core/add.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAU7B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA2E5F"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/core/add.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAW7B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA6E5F"}
package/dist/core/add.js CHANGED
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { existsSync, writeFileSync } from 'node:fs';
9
9
  import { join } from 'node:path';
10
- import { generateItemId, getCurrentTimestamp, getTypePrefix, TYPE_TO_DIRECTORY, } from '../utils/index.js';
10
+ import { generateItemId, getCurrentTimestamp, getTypePrefix, normalizeMarkdown, TYPE_TO_DIRECTORY, } from '../utils/index.js';
11
11
  import { getConfig } from './config.js';
12
12
  import { addItemToIndex, loadCounters, updateCounters } from './index-refs.js';
13
13
  /**
@@ -64,8 +64,9 @@ export async function addItem(devstepsDir, args) {
64
64
  const metadataPath = join(itemDir, `${itemId}.json`);
65
65
  const descriptionPath = join(itemDir, `${itemId}.md`);
66
66
  writeFileSync(metadataPath, JSON.stringify(metadata, null, 2));
67
- // Save description
68
- const description = args.description || `# ${args.title}\n\n<!-- Add detailed description here -->\n`;
67
+ // Save description — normalizeMarkdown converts literal \n sequences from MCP clients
68
+ // to real newlines (BUG-056: GitHub Copilot ≥ v1.0.0 sends escape sequences, not real newlines)
69
+ const description = normalizeMarkdown(args.description || `# ${args.title}\n\n<!-- Add detailed description here -->\n`);
69
70
  writeFileSync(descriptionPath, description);
70
71
  // Update index (auto-migration ensures refs-style always available)
71
72
  const currentCounters = loadCounters(devstepsDir);
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/core/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/core/add.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  * Builds structured project context at quick/standard/deep levels.
7
7
  *
8
8
  * @see STORY-085 Context Command
9
+ * @see STORY-121 Layered AI Context Auto-Delivery
9
10
  */
10
11
  import type { ContextLevel, QuickContext } from '../schemas/project.js';
11
12
  interface PackageInfo {
@@ -24,6 +25,23 @@ interface RecentUpdate {
24
25
  title: string;
25
26
  updated: string;
26
27
  }
28
+ /**
29
+ * Metadata about the freshness and origin of a context response.
30
+ * Included in all context responses (quick, standard, deep).
31
+ * @see STORY-121 TASK-276
32
+ */
33
+ export interface ContextMeta {
34
+ /** ISO 8601 timestamp when this context was generated */
35
+ generated_at: string;
36
+ /** Age of .devsteps/PROJECT.md in decimal hours; Infinity if file absent */
37
+ project_md_age_hours: number;
38
+ /** True when project_md_age_hours > 24 (or PROJECT.md missing) */
39
+ is_stale: boolean;
40
+ /** Context depth level returned */
41
+ level: ContextLevel;
42
+ /** Whether this response was served from in-memory cache */
43
+ cache_hit: boolean;
44
+ }
27
45
  interface ContextResponse {
28
46
  context_level: ContextLevel;
29
47
  tokens_used: number;
@@ -34,6 +52,7 @@ interface ContextResponse {
34
52
  recent_updates: RecentUpdate[];
35
53
  };
36
54
  suggestions?: string[];
55
+ context_meta?: ContextMeta;
37
56
  }
38
57
  /**
39
58
  * Analyze packages from workspace (with caching)
@@ -59,5 +78,30 @@ export declare function estimateTokens(obj: unknown): number;
59
78
  * Get quick context
60
79
  */
61
80
  export declare function getQuickContext(projectDir: string, devstepsDir: string): Promise<ContextResponse>;
81
+ /**
82
+ * Build context_meta block for any context response.
83
+ * Computes PROJECT.md age from filesystem mtime.
84
+ * @see STORY-121 TASK-276
85
+ */
86
+ export declare function buildContextMeta(devstepsDir: string, level: ContextLevel, cacheHit: boolean): Promise<ContextMeta>;
87
+ /**
88
+ * Get standard context — extended project context for AI (< 20K tokens).
89
+ * Includes all quick fields plus open items, blocked items, in-progress summary,
90
+ * recent changes (7 days), key affected paths, and context_meta.
91
+ * @see STORY-121 TASK-273
92
+ */
93
+ export declare function getStandardContext(projectDir: string, devstepsDir: string): Promise<ContextResponse>;
94
+ /**
95
+ * Format a ContextResponse as readable plain text for embedding in AI prompts
96
+ * (used by MCP resource devsteps://project-context).
97
+ * @see STORY-121 TASK-275
98
+ */
99
+ export declare function formatContextAsText(ctx: ContextResponse): string;
100
+ /**
101
+ * Generate PROJECT.md content from live project state.
102
+ * Used by `devsteps context generate` CLI command.
103
+ * @see STORY-121 TASK-272
104
+ */
105
+ export declare function generateProjectMd(projectDir: string, devstepsDir: string): Promise<string>;
62
106
  export {};
63
107
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGxE,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,eAAe;IACvB,aAAa,EAAE,YAAY,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE;QACf,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,YAAY,EAAE,UAAU,CAAC;QACzB,cAAc,EAAE,YAAY,EAAE,CAAC;KAChC,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAyChF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAmC5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAwCjG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAkDrF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAoC1B"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGxE,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,EAAE,OAAO,CAAC;IAClB,mCAAmC;IACnC,KAAK,EAAE,YAAY,CAAC;IACpB,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,eAAe;IACvB,aAAa,EAAE,YAAY,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE;QACf,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,YAAY,EAAE,UAAU,CAAC;QACzB,cAAc,EAAE,YAAY,EAAE,CAAC;KAChC,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,WAAW,CAAC;CAC5B;AAcD;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAyChF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAmC5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAwCjG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAkDrF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAuC1B;AACD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,WAAW,CAAC,CAkBtB;AAmDD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAwD1B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAoEhE;AACD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAwIjB"}