@cleocode/contracts 2026.9.7 → 2026.9.9

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 (151) hide show
  1. package/dist/__tests__/acceptance-gate.test.js +242 -1
  2. package/dist/__tests__/acceptance-gate.test.js.map +1 -1
  3. package/dist/__tests__/evidence-atom-schema.test.js +17 -14
  4. package/dist/__tests__/evidence-atom-schema.test.js.map +1 -1
  5. package/dist/__tests__/memory-wire-shapes.test.js.map +1 -1
  6. package/dist/__tests__/operations-registry.test.js +18 -0
  7. package/dist/__tests__/operations-registry.test.js.map +1 -1
  8. package/dist/acceptance-gate-schema.d.ts +60 -2
  9. package/dist/acceptance-gate-schema.d.ts.map +1 -1
  10. package/dist/acceptance-gate-schema.js +273 -1
  11. package/dist/acceptance-gate-schema.js.map +1 -1
  12. package/dist/acceptance-gate.d.ts +122 -11
  13. package/dist/acceptance-gate.d.ts.map +1 -1
  14. package/dist/acceptance-gate.js +3 -3
  15. package/dist/audit.d.ts +71 -2
  16. package/dist/audit.d.ts.map +1 -1
  17. package/dist/backup-manifest.d.ts +80 -0
  18. package/dist/backup-manifest.d.ts.map +1 -1
  19. package/dist/caamp-markers.d.ts +20 -0
  20. package/dist/caamp-markers.d.ts.map +1 -1
  21. package/dist/capabilities.d.ts +282 -0
  22. package/dist/capabilities.d.ts.map +1 -1
  23. package/dist/changesets.d.ts +4 -4
  24. package/dist/code-symbol.d.ts +33 -0
  25. package/dist/code-symbol.d.ts.map +1 -1
  26. package/dist/daemon/health.d.ts +3 -3
  27. package/dist/data-accessor.d.ts +15 -0
  28. package/dist/data-accessor.d.ts.map +1 -1
  29. package/dist/data-accessor.js.map +1 -1
  30. package/dist/dispatch/__tests__/tasks-gateway-crud-ops.test.js +19 -1
  31. package/dist/dispatch/__tests__/tasks-gateway-crud-ops.test.js.map +1 -1
  32. package/dist/dispatch/operations-registry.d.ts.map +1 -1
  33. package/dist/dispatch/operations-registry.js +684 -3
  34. package/dist/dispatch/operations-registry.js.map +1 -1
  35. package/dist/docs-taxonomy.d.ts +25 -0
  36. package/dist/docs-taxonomy.d.ts.map +1 -1
  37. package/dist/docs-taxonomy.js.map +1 -1
  38. package/dist/evidence-atom-schema.d.ts +7 -6
  39. package/dist/evidence-atom-schema.d.ts.map +1 -1
  40. package/dist/evidence-atom-schema.js +10 -9
  41. package/dist/evidence-atom-schema.js.map +1 -1
  42. package/dist/graph.d.ts +283 -2
  43. package/dist/graph.d.ts.map +1 -1
  44. package/dist/index.d.ts +6 -5
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/invariants/adr-070-orchestration.d.ts.map +1 -1
  48. package/dist/invariants/adr-070-orchestration.js +1 -1
  49. package/dist/invariants/adr-070-orchestration.js.map +1 -1
  50. package/dist/invariants/adr-073-saga.js +2 -2
  51. package/dist/invariants/adr-073-saga.js.map +1 -1
  52. package/dist/jobs.d.ts +329 -3
  53. package/dist/jobs.d.ts.map +1 -1
  54. package/dist/knowledge-health.d.ts +695 -0
  55. package/dist/knowledge-health.d.ts.map +1 -0
  56. package/dist/knowledge-health.js +8 -0
  57. package/dist/knowledge-health.js.map +1 -0
  58. package/dist/llm/catalog-schema.d.ts +4 -4
  59. package/dist/memory/observe.d.ts +4 -2
  60. package/dist/memory/observe.d.ts.map +1 -1
  61. package/dist/memory/search.d.ts +4 -0
  62. package/dist/memory/search.d.ts.map +1 -1
  63. package/dist/nexus-living-brain-ops.d.ts +28 -3
  64. package/dist/nexus-living-brain-ops.d.ts.map +1 -1
  65. package/dist/nexus-tasks-bridge-ops.d.ts +11 -0
  66. package/dist/nexus-tasks-bridge-ops.d.ts.map +1 -1
  67. package/dist/operations/admin.d.ts +10 -4
  68. package/dist/operations/admin.d.ts.map +1 -1
  69. package/dist/operations/docs.d.ts +138 -0
  70. package/dist/operations/docs.d.ts.map +1 -1
  71. package/dist/operations/docs.js +47 -0
  72. package/dist/operations/docs.js.map +1 -1
  73. package/dist/operations/focus.d.ts +7 -0
  74. package/dist/operations/focus.d.ts.map +1 -1
  75. package/dist/operations/nexus.d.ts +7 -2
  76. package/dist/operations/nexus.d.ts.map +1 -1
  77. package/dist/operations/output-contracts-data.d.ts.map +1 -1
  78. package/dist/operations/output-contracts-data.js +31 -3
  79. package/dist/operations/output-contracts-data.js.map +1 -1
  80. package/dist/operations/research.d.ts +33 -0
  81. package/dist/operations/research.d.ts.map +1 -1
  82. package/dist/operations/tasks.d.ts +107 -4
  83. package/dist/operations/tasks.d.ts.map +1 -1
  84. package/dist/operations/tasks.js +5 -0
  85. package/dist/operations/tasks.js.map +1 -1
  86. package/dist/package-artifact.d.ts +112 -0
  87. package/dist/package-artifact.d.ts.map +1 -0
  88. package/dist/package-artifact.js +8 -0
  89. package/dist/package-artifact.js.map +1 -0
  90. package/dist/release/evidence-atoms.d.ts +10 -0
  91. package/dist/release/evidence-atoms.d.ts.map +1 -1
  92. package/dist/release/evidence-atoms.js +6 -0
  93. package/dist/release/evidence-atoms.js.map +1 -1
  94. package/dist/release/plan.d.ts +6 -6
  95. package/dist/resource-governor.d.ts +114 -0
  96. package/dist/resource-governor.d.ts.map +1 -1
  97. package/dist/resource-governor.js.map +1 -1
  98. package/dist/supervisor-ipc/messages.d.ts +6 -6
  99. package/dist/task-record.d.ts +25 -4
  100. package/dist/task-record.d.ts.map +1 -1
  101. package/dist/task.d.ts +55 -36
  102. package/dist/task.d.ts.map +1 -1
  103. package/dist/task.js.map +1 -1
  104. package/dist/tasks/archive.d.ts +3 -3
  105. package/dist/templates/manifest.d.ts +1 -1
  106. package/dist/workgraph.d.ts +5 -3
  107. package/dist/workgraph.d.ts.map +1 -1
  108. package/dist/workgraph.js +19 -0
  109. package/dist/workgraph.js.map +1 -1
  110. package/package.json +2 -2
  111. package/schemas/gate-result.schema.json +350 -1
  112. package/src/__tests__/__snapshots__/operations-registry.test.ts.snap +1 -1
  113. package/src/__tests__/acceptance-gate.test.ts +282 -1
  114. package/src/__tests__/evidence-atom-schema.test.ts +17 -14
  115. package/src/__tests__/memory-wire-shapes.test.ts +2 -0
  116. package/src/__tests__/operations-registry.test.ts +26 -0
  117. package/src/acceptance-gate-schema.ts +320 -14
  118. package/src/acceptance-gate.ts +133 -11
  119. package/src/audit.ts +72 -2
  120. package/src/backup-manifest.ts +88 -0
  121. package/src/caamp-markers.ts +22 -0
  122. package/src/capabilities.ts +311 -0
  123. package/src/code-symbol.ts +37 -0
  124. package/src/data-accessor.ts +16 -0
  125. package/src/dispatch/__tests__/tasks-gateway-crud-ops.test.ts +31 -1
  126. package/src/dispatch/operations-registry.ts +689 -3
  127. package/src/docs-taxonomy.ts +26 -0
  128. package/src/evidence-atom-schema.ts +10 -9
  129. package/src/graph.ts +326 -2
  130. package/src/index.ts +43 -1
  131. package/src/invariants/adr-070-orchestration.ts +2 -1
  132. package/src/invariants/adr-073-saga.ts +2 -2
  133. package/src/jobs.ts +382 -3
  134. package/src/knowledge-health.ts +748 -0
  135. package/src/memory/observe.ts +4 -2
  136. package/src/memory/search.ts +4 -0
  137. package/src/nexus-living-brain-ops.ts +34 -3
  138. package/src/nexus-tasks-bridge-ops.ts +12 -0
  139. package/src/operations/admin.ts +11 -4
  140. package/src/operations/docs.ts +153 -0
  141. package/src/operations/focus.ts +11 -0
  142. package/src/operations/nexus.ts +7 -1
  143. package/src/operations/output-contracts-data.ts +33 -3
  144. package/src/operations/research.ts +36 -0
  145. package/src/operations/tasks.ts +116 -4
  146. package/src/package-artifact.ts +127 -0
  147. package/src/release/evidence-atoms.ts +6 -0
  148. package/src/resource-governor.ts +132 -0
  149. package/src/task-record.ts +27 -4
  150. package/src/task.ts +58 -36
  151. package/src/workgraph.ts +19 -0
@@ -39,8 +39,137 @@ export function defineDomain(_domain, ops) {
39
39
  // ---------------------------------------------------------------------------
40
40
  // OPERATIONS — the authoritative registry data
41
41
  // ---------------------------------------------------------------------------
42
+ // Requirement commands carry JSON on the wire; the SDK validates the typed gate.
43
+ const requirementTaskParam = {
44
+ name: 'taskId',
45
+ type: 'string',
46
+ required: true,
47
+ description: 'Task that owns the requirement gates',
48
+ cli: { positional: true },
49
+ };
42
50
  /** The single source of truth for all operations in CLEO. */
43
51
  export const OPERATIONS = [
52
+ {
53
+ gateway: 'mutate',
54
+ domain: 'tasks',
55
+ operation: 'req.add',
56
+ description: 'Add a validated typed requirement gate without executing it',
57
+ tier: 1,
58
+ idempotent: false,
59
+ sessionRequired: true,
60
+ requiredParams: ['taskId', 'gate'],
61
+ params: [
62
+ requirementTaskParam,
63
+ {
64
+ name: 'gate',
65
+ type: 'string',
66
+ required: true,
67
+ description: 'AcceptanceGate JSON; must include kind, description and kind-specific fields',
68
+ cli: { flag: 'gate' },
69
+ },
70
+ ],
71
+ inputSchema: {
72
+ operation: 'tasks.req.add',
73
+ schema: {
74
+ type: 'object',
75
+ required: ['taskId', 'gate'],
76
+ additionalProperties: false,
77
+ properties: {
78
+ taskId: { type: 'string', minLength: 1 },
79
+ gate: { type: 'string', minLength: 1 },
80
+ },
81
+ },
82
+ examples: [
83
+ {
84
+ name: 'test',
85
+ value: {
86
+ taskId: 'T121',
87
+ gate: '{"kind":"test","command":"node","args":["verify.mjs"],"expect":"exit0","description":"Task harness passes","req":"PARTNER-121"}',
88
+ },
89
+ },
90
+ ],
91
+ },
92
+ },
93
+ {
94
+ gateway: 'query',
95
+ domain: 'tasks',
96
+ operation: 'req.list',
97
+ description: 'List named typed requirement gates without executing them',
98
+ tier: 1,
99
+ idempotent: true,
100
+ sessionRequired: false,
101
+ requiredParams: ['taskId'],
102
+ params: [requirementTaskParam],
103
+ inputSchema: {
104
+ operation: 'tasks.req.list',
105
+ schema: {
106
+ type: 'object',
107
+ required: ['taskId'],
108
+ additionalProperties: false,
109
+ properties: { taskId: { type: 'string', minLength: 1 } },
110
+ },
111
+ examples: [{ name: 'task', value: { taskId: 'T121' } }],
112
+ },
113
+ },
114
+ {
115
+ gateway: 'query',
116
+ domain: 'tasks',
117
+ operation: 'req.migrate.preview',
118
+ description: 'Preview typed-gate migration proposals without writing',
119
+ tier: 1,
120
+ idempotent: true,
121
+ sessionRequired: false,
122
+ requiredParams: ['taskId'],
123
+ params: [
124
+ requirementTaskParam,
125
+ {
126
+ name: 'apply',
127
+ type: 'boolean',
128
+ required: false,
129
+ description: 'Must be absent or false for preview',
130
+ },
131
+ ],
132
+ inputSchema: {
133
+ operation: 'tasks.req.migrate.preview',
134
+ schema: {
135
+ type: 'object',
136
+ required: ['taskId'],
137
+ additionalProperties: false,
138
+ properties: { taskId: { type: 'string', minLength: 1 }, apply: { const: false } },
139
+ },
140
+ examples: [{ name: 'preview', value: { taskId: 'T121', apply: false } }],
141
+ },
142
+ },
143
+ {
144
+ gateway: 'mutate',
145
+ domain: 'tasks',
146
+ operation: 'req.migrate',
147
+ description: 'Explicitly apply validated typed-gate migration proposals',
148
+ tier: 1,
149
+ idempotent: false,
150
+ sessionRequired: true,
151
+ requiredParams: ['taskId', 'apply'],
152
+ params: [
153
+ requirementTaskParam,
154
+ {
155
+ name: 'apply',
156
+ type: 'boolean',
157
+ required: true,
158
+ description: 'Must be true to apply proposals',
159
+ cli: { flag: 'apply' },
160
+ },
161
+ ],
162
+ inputSchema: {
163
+ operation: 'tasks.req.migrate',
164
+ schema: {
165
+ type: 'object',
166
+ required: ['taskId', 'apply'],
167
+ additionalProperties: false,
168
+ properties: { taskId: { type: 'string', minLength: 1 }, apply: { const: true } },
169
+ },
170
+ examples: [{ name: 'apply', value: { taskId: 'T121', apply: true } }],
171
+ },
172
+ },
44
173
  {
45
174
  gateway: 'query',
46
175
  domain: 'tasks',
@@ -275,6 +404,13 @@ export const OPERATIONS = [
275
404
  sessionRequired: false,
276
405
  requiredParams: [],
277
406
  params: [
407
+ {
408
+ name: 'includeArchive',
409
+ type: 'boolean',
410
+ required: false,
411
+ description: 'Include archived rows under the same filters',
412
+ cli: { flag: 'include-archive' },
413
+ },
278
414
  { name: 'parent', type: 'string', required: false, description: 'Filter by parent task ID' },
279
415
  { name: 'status', type: 'string', required: false, description: 'Filter by task status' },
280
416
  { name: 'priority', type: 'string', required: false, description: 'Filter by task priority' },
@@ -303,7 +439,7 @@ export const OPERATIONS = [
303
439
  name: 'limit',
304
440
  type: 'number',
305
441
  required: false,
306
- description: 'Maximum number of tasks to return (default 10). Use --all to return every match. (--limit 0 also returns every match, but only on this command — prefer --all.)',
442
+ description: 'Maximum number of tasks to return (default 10). --all or --limit 0 returns every match.',
307
443
  },
308
444
  {
309
445
  name: 'offset',
@@ -2435,7 +2571,7 @@ export const OPERATIONS = [
2435
2571
  type: 'string',
2436
2572
  required: false,
2437
2573
  description: 'Task type',
2438
- enum: ['epic', 'task', 'subtask'],
2574
+ enum: ['saga', 'epic', 'task', 'subtask'],
2439
2575
  cli: { flag: 'type', short: '-t' },
2440
2576
  },
2441
2577
  {
@@ -2488,6 +2624,72 @@ export const OPERATIONS = [
2488
2624
  description: 'Initial note entry for the task',
2489
2625
  cli: { flag: 'notes' },
2490
2626
  },
2627
+ {
2628
+ name: 'dependsWaiver',
2629
+ type: 'string',
2630
+ required: false,
2631
+ description: 'Nonempty reason waiving dependencies for explicit critical priority',
2632
+ cli: { flag: 'depends-waiver' },
2633
+ },
2634
+ {
2635
+ name: 'files',
2636
+ type: 'array',
2637
+ required: false,
2638
+ description: 'Associated repository file paths',
2639
+ cli: { flag: 'files' },
2640
+ },
2641
+ {
2642
+ name: 'dryRun',
2643
+ type: 'boolean',
2644
+ required: false,
2645
+ description: 'Preview creation without task or committed audit writes',
2646
+ cli: { flag: 'dry-run' },
2647
+ },
2648
+ {
2649
+ name: 'parentSearch',
2650
+ type: 'string',
2651
+ required: false,
2652
+ description: 'Search term for resolving the parent task',
2653
+ cli: { flag: 'parent-search' },
2654
+ },
2655
+ {
2656
+ name: 'kind',
2657
+ type: 'string',
2658
+ required: false,
2659
+ description: 'Task intent, independent of hierarchy',
2660
+ enum: ['work', 'research', 'experiment', 'bug', 'spike', 'release'],
2661
+ cli: { flag: 'kind' },
2662
+ },
2663
+ {
2664
+ name: 'scope',
2665
+ type: 'string',
2666
+ required: false,
2667
+ description: 'Task granularity',
2668
+ enum: ['project', 'feature', 'unit'],
2669
+ cli: { flag: 'scope' },
2670
+ },
2671
+ {
2672
+ name: 'severity',
2673
+ type: 'string',
2674
+ required: false,
2675
+ description: 'Project-authorized severity with transactional signed evidence',
2676
+ enum: ['P0', 'P1', 'P2', 'P3'],
2677
+ cli: { flag: 'severity' },
2678
+ },
2679
+ {
2680
+ name: 'forceDuplicate',
2681
+ type: 'boolean',
2682
+ required: false,
2683
+ description: 'Bypass duplicate rejection with committed decision provenance',
2684
+ cli: { flag: 'force-duplicate' },
2685
+ },
2686
+ {
2687
+ name: 'autoDecompose',
2688
+ type: 'boolean',
2689
+ required: false,
2690
+ description: "Move the parent's text acceptance criteria onto a new first subtask when they would otherwise block this add (PM-Core V2 design-point 3) (T12298)",
2691
+ cli: { flag: 'auto-decompose' },
2692
+ },
2491
2693
  ],
2492
2694
  },
2493
2695
  {
@@ -2722,6 +2924,20 @@ export const OPERATIONS = [
2722
2924
  required: false,
2723
2925
  description: 'Remove related-task edges by taskId',
2724
2926
  },
2927
+ {
2928
+ name: 'phase',
2929
+ type: 'string',
2930
+ required: false,
2931
+ description: 'Project-defined phase, independent of pipeline stage',
2932
+ cli: { flag: 'phase' },
2933
+ },
2934
+ {
2935
+ name: 'noAutoComplete',
2936
+ type: 'boolean',
2937
+ required: false,
2938
+ description: 'Disable automatic parent completion',
2939
+ cli: { flag: 'no-auto-complete' },
2940
+ },
2725
2941
  ],
2726
2942
  inputSchema: tasksUpdateInputContract,
2727
2943
  outputSchema: OUTPUT_CONTRACTS['tasks.update'],
@@ -2792,6 +3008,88 @@ export const OPERATIONS = [
2792
3008
  description: 'taskId parameter',
2793
3009
  cli: { positional: true },
2794
3010
  },
3011
+ {
3012
+ name: 'force',
3013
+ type: 'boolean',
3014
+ required: false,
3015
+ description: 'Allow dependents and orphan children unless cascade is enabled',
3016
+ },
3017
+ {
3018
+ name: 'cascade',
3019
+ type: 'boolean',
3020
+ required: false,
3021
+ description: 'Archive all descendants with the selected task',
3022
+ },
3023
+ ],
3024
+ },
3025
+ {
3026
+ gateway: 'mutate',
3027
+ domain: 'tasks',
3028
+ operation: 'reconcile-scope',
3029
+ description: 'tasks.reconcile-scope (mutate) — sweep a saga/epic subtree for tasks whose scope overlaps and propose merge/absorb/split/link; read-only unless --apply',
3030
+ tier: 1,
3031
+ idempotent: true,
3032
+ sessionRequired: false,
3033
+ requiredParams: ['rootId'],
3034
+ params: [
3035
+ {
3036
+ name: 'rootId',
3037
+ type: 'string',
3038
+ required: true,
3039
+ description: 'Saga, epic or other container to sweep (its whole subtree is considered)',
3040
+ cli: { positional: true },
3041
+ },
3042
+ {
3043
+ name: 'apply',
3044
+ type: 'boolean',
3045
+ required: false,
3046
+ description: 'Write the proposed `relates` edges (read-only without it)',
3047
+ cli: { flag: 'apply' },
3048
+ },
3049
+ {
3050
+ name: 'threshold',
3051
+ type: 'number',
3052
+ required: false,
3053
+ description: 'Report pairs at or above this similarity score, 0-1 (default 0.55)',
3054
+ cli: { flag: 'threshold' },
3055
+ },
3056
+ ],
3057
+ },
3058
+ {
3059
+ gateway: 'mutate',
3060
+ domain: 'tasks',
3061
+ operation: 'decompose',
3062
+ description: 'tasks.decompose (mutate) — move a task’s free-text acceptance criteria onto a new first child, turning the leaf into a container (PM-Core V2 design-point 3)',
3063
+ tier: 1,
3064
+ idempotent: false,
3065
+ sessionRequired: false,
3066
+ requiredParams: ['taskId'],
3067
+ params: [
3068
+ {
3069
+ name: 'taskId',
3070
+ type: 'string',
3071
+ required: true,
3072
+ description: 'Task whose text acceptance criteria move to a new child',
3073
+ cli: { positional: true },
3074
+ },
3075
+ {
3076
+ name: 'childTitle',
3077
+ type: 'string',
3078
+ required: false,
3079
+ description: 'Title for the child that inherits the criteria (default: the parent’s)',
3080
+ },
3081
+ {
3082
+ name: 'childDescription',
3083
+ type: 'string',
3084
+ required: false,
3085
+ description: 'Description for the child (default: the parent’s)',
3086
+ },
3087
+ {
3088
+ name: 'dryRun',
3089
+ type: 'boolean',
3090
+ required: false,
3091
+ description: 'Preview the move without writing',
3092
+ },
2795
3093
  ],
2796
3094
  },
2797
3095
  {
@@ -4299,7 +4597,27 @@ export const OPERATIONS = [
4299
4597
  idempotent: false,
4300
4598
  sessionRequired: false,
4301
4599
  requiredParams: [],
4302
- params: [],
4600
+ params: [
4601
+ {
4602
+ name: 'source',
4603
+ type: 'string',
4604
+ required: false,
4605
+ description: 'Source of the reviewed backfill request.',
4606
+ },
4607
+ { name: 'kind', type: 'string', required: false, description: 'Backfill classification.' },
4608
+ {
4609
+ name: 'targetTable',
4610
+ type: 'string',
4611
+ required: false,
4612
+ description: 'Derived brain_page_nodes target only.',
4613
+ },
4614
+ {
4615
+ name: 'nodeIds',
4616
+ type: 'array',
4617
+ required: false,
4618
+ description: 'Exact qualified graph node IDs to stage; all must resolve to missing, eligible typed sources.',
4619
+ },
4620
+ ],
4303
4621
  },
4304
4622
  {
4305
4623
  gateway: 'mutate',
@@ -7337,6 +7655,369 @@ export const OPERATIONS = [
7337
7655
  },
7338
7656
  ],
7339
7657
  },
7658
+ {
7659
+ gateway: 'query',
7660
+ domain: 'docs',
7661
+ operation: 'status',
7662
+ description: 'docs.status (query) — inspect published documentation drift',
7663
+ tier: 1,
7664
+ idempotent: true,
7665
+ sessionRequired: false,
7666
+ requiredParams: [],
7667
+ params: [],
7668
+ },
7669
+ {
7670
+ gateway: 'query',
7671
+ domain: 'docs',
7672
+ operation: 'export',
7673
+ description: 'docs.export (query) — Export a task document',
7674
+ tier: 1,
7675
+ idempotent: true,
7676
+ sessionRequired: false,
7677
+ requiredParams: ['taskId'],
7678
+ params: [
7679
+ {
7680
+ name: 'taskId',
7681
+ type: 'string',
7682
+ required: true,
7683
+ description: 'Task whose document to export',
7684
+ },
7685
+ {
7686
+ name: 'includeAttachments',
7687
+ type: 'boolean',
7688
+ required: false,
7689
+ description: 'Include attachment manifest',
7690
+ },
7691
+ {
7692
+ name: 'includeMemoryRefs',
7693
+ type: 'boolean',
7694
+ required: false,
7695
+ description: 'Include memory references',
7696
+ },
7697
+ ],
7698
+ },
7699
+ {
7700
+ gateway: 'query',
7701
+ domain: 'docs',
7702
+ operation: 'search',
7703
+ description: 'docs.search (query) — Search document content',
7704
+ tier: 1,
7705
+ idempotent: true,
7706
+ sessionRequired: false,
7707
+ requiredParams: ['query'],
7708
+ params: [
7709
+ {
7710
+ name: 'query',
7711
+ type: 'string',
7712
+ required: true,
7713
+ description: 'Document search text',
7714
+ },
7715
+ {
7716
+ name: 'ownerId',
7717
+ type: 'string',
7718
+ required: false,
7719
+ description: 'Optional owner scope',
7720
+ },
7721
+ { name: 'limit', type: 'number', required: false, description: 'Maximum matches' },
7722
+ {
7723
+ name: 'type',
7724
+ type: 'string',
7725
+ required: false,
7726
+ description: 'Document kind filter',
7727
+ },
7728
+ ],
7729
+ },
7730
+ {
7731
+ gateway: 'query',
7732
+ domain: 'docs',
7733
+ operation: 'find',
7734
+ description: 'docs.find (query) — Find similar documents',
7735
+ tier: 1,
7736
+ idempotent: true,
7737
+ sessionRequired: false,
7738
+ requiredParams: ['similarSlug'],
7739
+ params: [
7740
+ {
7741
+ name: 'similarSlug',
7742
+ type: 'string',
7743
+ required: true,
7744
+ description: 'Existing document slug to compare',
7745
+ },
7746
+ { name: 'limit', type: 'number', required: false, description: 'Maximum matches' },
7747
+ {
7748
+ name: 'threshold',
7749
+ type: 'number',
7750
+ required: false,
7751
+ description: 'Minimum similarity',
7752
+ },
7753
+ {
7754
+ name: 'allKinds',
7755
+ type: 'boolean',
7756
+ required: false,
7757
+ description: 'Compare all document kinds',
7758
+ },
7759
+ ],
7760
+ },
7761
+ {
7762
+ gateway: 'query',
7763
+ domain: 'docs',
7764
+ operation: 'merge',
7765
+ description: 'docs.merge (query) — Preview a document merge',
7766
+ tier: 1,
7767
+ idempotent: true,
7768
+ sessionRequired: false,
7769
+ requiredParams: ['attA', 'attB'],
7770
+ params: [
7771
+ {
7772
+ name: 'attA',
7773
+ type: 'string',
7774
+ required: true,
7775
+ description: 'First attachment reference',
7776
+ },
7777
+ {
7778
+ name: 'attB',
7779
+ type: 'string',
7780
+ required: true,
7781
+ description: 'Second attachment reference',
7782
+ },
7783
+ {
7784
+ name: 'strategy',
7785
+ type: 'string',
7786
+ required: false,
7787
+ description: 'three-way, cherry-pick, or multi-diff',
7788
+ },
7789
+ {
7790
+ name: 'base',
7791
+ type: 'string',
7792
+ required: false,
7793
+ description: 'Common ancestor attachment reference',
7794
+ },
7795
+ ],
7796
+ },
7797
+ {
7798
+ gateway: 'query',
7799
+ domain: 'docs',
7800
+ operation: 'rank',
7801
+ description: 'docs.rank (query) — Rank owner documents',
7802
+ tier: 1,
7803
+ idempotent: true,
7804
+ sessionRequired: false,
7805
+ requiredParams: ['ownerId'],
7806
+ params: [
7807
+ {
7808
+ name: 'ownerId',
7809
+ type: 'string',
7810
+ required: true,
7811
+ description: 'Owner whose documents to rank',
7812
+ },
7813
+ {
7814
+ name: 'query',
7815
+ type: 'string',
7816
+ required: false,
7817
+ description: 'Optional ranking query',
7818
+ },
7819
+ ],
7820
+ },
7821
+ {
7822
+ gateway: 'query',
7823
+ domain: 'docs',
7824
+ operation: 'versions',
7825
+ description: 'docs.versions (query) — List document versions',
7826
+ tier: 1,
7827
+ idempotent: true,
7828
+ sessionRequired: false,
7829
+ requiredParams: ['ownerId'],
7830
+ params: [
7831
+ { name: 'ownerId', type: 'string', required: true, description: 'Document owner' },
7832
+ {
7833
+ name: 'name',
7834
+ type: 'string',
7835
+ required: false,
7836
+ description: 'Optional document name',
7837
+ },
7838
+ ],
7839
+ },
7840
+ {
7841
+ gateway: 'mutate',
7842
+ domain: 'docs',
7843
+ operation: 'publish',
7844
+ description: 'docs.publish (mutate) — Publish a document to a file or pull request',
7845
+ tier: 1,
7846
+ idempotent: false,
7847
+ sessionRequired: false,
7848
+ requiredParams: [],
7849
+ params: [
7850
+ {
7851
+ name: 'target',
7852
+ type: 'string',
7853
+ required: false,
7854
+ description: 'Publication target: file or pr',
7855
+ },
7856
+ {
7857
+ name: 'ownerId',
7858
+ type: 'string',
7859
+ required: false,
7860
+ description: 'Required for file publication',
7861
+ },
7862
+ {
7863
+ name: 'toPath',
7864
+ type: 'string',
7865
+ required: false,
7866
+ description: 'Required destination for file publication',
7867
+ },
7868
+ {
7869
+ name: 'attachmentId',
7870
+ type: 'string',
7871
+ required: false,
7872
+ description: 'Attachment to publish',
7873
+ },
7874
+ {
7875
+ name: 'slugOrId',
7876
+ type: 'string',
7877
+ required: false,
7878
+ description: 'Required document reference for PR publication',
7879
+ },
7880
+ {
7881
+ name: 'slug',
7882
+ type: 'string',
7883
+ required: false,
7884
+ description: 'Override document slug',
7885
+ },
7886
+ {
7887
+ name: 'type',
7888
+ type: 'string',
7889
+ required: false,
7890
+ description: 'Override document kind',
7891
+ },
7892
+ { name: 'title', type: 'string', required: false, description: 'Override PR title' },
7893
+ { name: 'body', type: 'string', required: false, description: 'Override PR body' },
7894
+ { name: 'base', type: 'string', required: false, description: 'PR base branch' },
7895
+ ],
7896
+ },
7897
+ {
7898
+ gateway: 'mutate',
7899
+ domain: 'docs',
7900
+ operation: 'publish-pr',
7901
+ description: 'docs.publish-pr (mutate) — Legacy alias for PR publication',
7902
+ tier: 1,
7903
+ idempotent: false,
7904
+ sessionRequired: false,
7905
+ requiredParams: ['slugOrId'],
7906
+ params: [
7907
+ {
7908
+ name: 'slugOrId',
7909
+ type: 'string',
7910
+ required: true,
7911
+ description: 'Document reference to publish',
7912
+ },
7913
+ {
7914
+ name: 'slug',
7915
+ type: 'string',
7916
+ required: false,
7917
+ description: 'Override document slug',
7918
+ },
7919
+ {
7920
+ name: 'type',
7921
+ type: 'string',
7922
+ required: false,
7923
+ description: 'Override document kind',
7924
+ },
7925
+ { name: 'title', type: 'string', required: false, description: 'Override PR title' },
7926
+ { name: 'body', type: 'string', required: false, description: 'Override PR body' },
7927
+ { name: 'base', type: 'string', required: false, description: 'PR base branch' },
7928
+ ],
7929
+ },
7930
+ {
7931
+ gateway: 'mutate',
7932
+ domain: 'docs',
7933
+ operation: 'sync',
7934
+ description: 'docs.sync (mutate) — Sync document content from a file',
7935
+ tier: 1,
7936
+ idempotent: false,
7937
+ sessionRequired: false,
7938
+ requiredParams: ['ownerId', 'fromPath'],
7939
+ params: [
7940
+ { name: 'ownerId', type: 'string', required: true, description: 'Document owner' },
7941
+ {
7942
+ name: 'fromPath',
7943
+ type: 'string',
7944
+ required: true,
7945
+ description: 'Source file path',
7946
+ },
7947
+ {
7948
+ name: 'blobName',
7949
+ type: 'string',
7950
+ required: false,
7951
+ description: 'Document blob name',
7952
+ },
7953
+ {
7954
+ name: 'contentType',
7955
+ type: 'string',
7956
+ required: false,
7957
+ description: 'Document media type',
7958
+ },
7959
+ ],
7960
+ },
7961
+ {
7962
+ gateway: 'mutate',
7963
+ domain: 'docs',
7964
+ operation: 'import',
7965
+ description: 'docs.import (mutate) — Import classified project documents',
7966
+ tier: 1,
7967
+ idempotent: false,
7968
+ sessionRequired: false,
7969
+ requiredParams: ['scanRoot'],
7970
+ params: [
7971
+ {
7972
+ name: 'scanRoot',
7973
+ type: 'string',
7974
+ required: true,
7975
+ description: 'Root directory to scan',
7976
+ },
7977
+ {
7978
+ name: 'dryRun',
7979
+ type: 'boolean',
7980
+ required: false,
7981
+ description: 'Preview without writing',
7982
+ },
7983
+ {
7984
+ name: 'force',
7985
+ type: 'boolean',
7986
+ required: false,
7987
+ description: 'Replace conflicting import mappings',
7988
+ },
7989
+ {
7990
+ name: 'manifestPath',
7991
+ type: 'string',
7992
+ required: false,
7993
+ description: 'Import manifest path',
7994
+ },
7995
+ ],
7996
+ },
7997
+ {
7998
+ gateway: 'query',
7999
+ domain: 'docs',
8000
+ operation: 'audit',
8001
+ description: 'docs.audit (query) — inspect document history or verify audit chain integrity',
8002
+ tier: 1,
8003
+ idempotent: true,
8004
+ sessionRequired: false,
8005
+ requiredParams: [],
8006
+ params: [
8007
+ {
8008
+ name: 'slug',
8009
+ type: 'string',
8010
+ required: false,
8011
+ description: 'Document slug whose history to inspect',
8012
+ },
8013
+ {
8014
+ name: 'verify',
8015
+ type: 'boolean',
8016
+ required: false,
8017
+ description: 'Verify the full audit chain',
8018
+ },
8019
+ ],
8020
+ },
7340
8021
  // ── docs.generate (T798) ─────────────────────────────────────────────────
7341
8022
  {
7342
8023
  gateway: 'query',