centy 0.7.9 → 0.8.1

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 (200) hide show
  1. package/bin/run.js +0 -24
  2. package/dist/commands/compact.d.ts.map +1 -1
  3. package/dist/commands/compact.js +11 -13
  4. package/dist/commands/compact.js.map +1 -1
  5. package/dist/commands/create.d.ts +8 -7
  6. package/dist/commands/create.d.ts.map +1 -1
  7. package/dist/commands/create.js +8 -33
  8. package/dist/commands/create.js.map +1 -1
  9. package/dist/commands/edit.d.ts +9 -0
  10. package/dist/commands/edit.d.ts.map +1 -0
  11. package/dist/commands/edit.js +17 -0
  12. package/dist/commands/edit.js.map +1 -0
  13. package/dist/commands/list/items.d.ts +21 -0
  14. package/dist/commands/list/items.d.ts.map +1 -0
  15. package/dist/commands/list/items.js +97 -0
  16. package/dist/commands/list/items.js.map +1 -0
  17. package/dist/commands/list.d.ts +1 -0
  18. package/dist/commands/list.d.ts.map +1 -1
  19. package/dist/commands/list.js +22 -47
  20. package/dist/commands/list.js.map +1 -1
  21. package/dist/commands/next.d.ts +18 -0
  22. package/dist/commands/next.d.ts.map +1 -0
  23. package/dist/commands/next.js +88 -0
  24. package/dist/commands/next.js.map +1 -0
  25. package/dist/commands/org/delete.d.ts.map +1 -1
  26. package/dist/commands/org/delete.js +1 -0
  27. package/dist/commands/org/delete.js.map +1 -1
  28. package/dist/commands/register/project.d.ts.map +1 -1
  29. package/dist/commands/register/project.js +1 -0
  30. package/dist/commands/register/project.js.map +1 -1
  31. package/dist/commands/update.d.ts +8 -7
  32. package/dist/commands/update.d.ts.map +1 -1
  33. package/dist/commands/update.js +9 -27
  34. package/dist/commands/update.js.map +1 -1
  35. package/dist/commands/workspace/list.d.ts.map +1 -1
  36. package/dist/commands/workspace/list.js +0 -1
  37. package/dist/commands/workspace/list.js.map +1 -1
  38. package/dist/commands/workspace/new.d.ts.map +1 -1
  39. package/dist/commands/workspace/new.js +0 -1
  40. package/dist/commands/workspace/new.js.map +1 -1
  41. package/dist/commands/workspace/open.d.ts.map +1 -1
  42. package/dist/commands/workspace/open.js +0 -3
  43. package/dist/commands/workspace/open.js.map +1 -1
  44. package/dist/daemon/daemon-duplicate-doc.d.ts +2 -2
  45. package/dist/daemon/daemon-duplicate-doc.d.ts.map +1 -1
  46. package/dist/daemon/daemon-duplicate-doc.js +4 -1
  47. package/dist/daemon/daemon-duplicate-doc.js.map +1 -1
  48. package/dist/daemon/daemon-duplicate-issue.d.ts +2 -2
  49. package/dist/daemon/daemon-duplicate-issue.d.ts.map +1 -1
  50. package/dist/daemon/daemon-duplicate-issue.js +4 -1
  51. package/dist/daemon/daemon-duplicate-issue.js.map +1 -1
  52. package/dist/daemon/daemon-get-doc.d.ts +2 -2
  53. package/dist/daemon/daemon-get-doc.d.ts.map +1 -1
  54. package/dist/daemon/daemon-get-doc.js +6 -3
  55. package/dist/daemon/daemon-get-doc.js.map +1 -1
  56. package/dist/daemon/daemon-get-docs-by-slug.d.ts +4 -2
  57. package/dist/daemon/daemon-get-docs-by-slug.d.ts.map +1 -1
  58. package/dist/daemon/daemon-get-docs-by-slug.js +4 -1
  59. package/dist/daemon/daemon-get-docs-by-slug.js.map +1 -1
  60. package/dist/daemon/daemon-get-issue-by-display-number.d.ts +5 -2
  61. package/dist/daemon/daemon-get-issue-by-display-number.d.ts.map +1 -1
  62. package/dist/daemon/daemon-get-issue-by-display-number.js +8 -3
  63. package/dist/daemon/daemon-get-issue-by-display-number.js.map +1 -1
  64. package/dist/daemon/daemon-get-issue.d.ts +2 -2
  65. package/dist/daemon/daemon-get-issue.d.ts.map +1 -1
  66. package/dist/daemon/daemon-get-issue.js +6 -3
  67. package/dist/daemon/daemon-get-issue.js.map +1 -1
  68. package/dist/daemon/daemon-get-issues-by-uuid.d.ts +4 -2
  69. package/dist/daemon/daemon-get-issues-by-uuid.d.ts.map +1 -1
  70. package/dist/daemon/daemon-get-issues-by-uuid.js +4 -1
  71. package/dist/daemon/daemon-get-issues-by-uuid.js.map +1 -1
  72. package/dist/daemon/daemon-list-docs.d.ts +2 -2
  73. package/dist/daemon/daemon-list-docs.d.ts.map +1 -1
  74. package/dist/daemon/daemon-list-docs.js +4 -1
  75. package/dist/daemon/daemon-list-docs.js.map +1 -1
  76. package/dist/daemon/daemon-list-issues.d.ts +2 -2
  77. package/dist/daemon/daemon-list-issues.d.ts.map +1 -1
  78. package/dist/daemon/daemon-list-issues.js +4 -1
  79. package/dist/daemon/daemon-list-issues.js.map +1 -1
  80. package/dist/daemon/daemon-list-items-globally.d.ts +7 -0
  81. package/dist/daemon/daemon-list-items-globally.d.ts.map +1 -0
  82. package/dist/daemon/daemon-list-items-globally.js +54 -0
  83. package/dist/daemon/daemon-list-items-globally.js.map +1 -0
  84. package/dist/daemon/daemon-move-doc.d.ts +2 -2
  85. package/dist/daemon/daemon-move-doc.d.ts.map +1 -1
  86. package/dist/daemon/daemon-move-doc.js +4 -1
  87. package/dist/daemon/daemon-move-doc.js.map +1 -1
  88. package/dist/daemon/daemon-move-issue.d.ts +2 -2
  89. package/dist/daemon/daemon-move-issue.d.ts.map +1 -1
  90. package/dist/daemon/daemon-move-issue.js +4 -1
  91. package/dist/daemon/daemon-move-issue.js.map +1 -1
  92. package/dist/daemon/daemon-update-doc.d.ts +2 -2
  93. package/dist/daemon/daemon-update-doc.d.ts.map +1 -1
  94. package/dist/daemon/daemon-update-doc.js +4 -1
  95. package/dist/daemon/daemon-update-doc.js.map +1 -1
  96. package/dist/daemon/daemon-update-issue.d.ts +2 -2
  97. package/dist/daemon/daemon-update-issue.d.ts.map +1 -1
  98. package/dist/daemon/daemon-update-issue.js +4 -1
  99. package/dist/daemon/daemon-update-issue.js.map +1 -1
  100. package/dist/daemon/generated/centy/v1/centy.d.ts +244 -547
  101. package/dist/daemon/generated/centy/v1/centy.d.ts.map +1 -1
  102. package/dist/daemon/generated/centy/v1/centy.js +0 -19
  103. package/dist/daemon/generated/centy/v1/centy.js.map +1 -1
  104. package/dist/daemon/generated/centy/v1/generic_item.d.ts +25 -99
  105. package/dist/daemon/generated/centy/v1/generic_item.d.ts.map +1 -1
  106. package/dist/daemon/generated/centy/v1/generic_item.js +1 -13
  107. package/dist/daemon/generated/centy/v1/generic_item.js.map +1 -1
  108. package/dist/daemon/grpc-client-data.d.ts +2 -11
  109. package/dist/daemon/grpc-client-data.d.ts.map +1 -1
  110. package/dist/daemon/grpc-client-extended.d.ts +1 -3
  111. package/dist/daemon/grpc-client-extended.d.ts.map +1 -1
  112. package/dist/daemon/grpc-client-init.d.ts +2 -12
  113. package/dist/daemon/grpc-client-init.d.ts.map +1 -1
  114. package/dist/daemon/grpc-client-items.d.ts +2 -2
  115. package/dist/daemon/grpc-client-items.d.ts.map +1 -1
  116. package/dist/daemon/types/feature.d.ts +2 -2
  117. package/dist/daemon/types/feature.d.ts.map +1 -1
  118. package/dist/flags/create-flags.d.ts +11 -0
  119. package/dist/flags/create-flags.d.ts.map +1 -0
  120. package/dist/flags/create-flags.js +38 -0
  121. package/dist/flags/create-flags.js.map +1 -0
  122. package/dist/flags/update-flags.d.ts +11 -0
  123. package/dist/flags/update-flags.d.ts.map +1 -0
  124. package/dist/flags/update-flags.js +31 -0
  125. package/dist/flags/update-flags.js.map +1 -0
  126. package/dist/lib/close/close-issue.d.ts.map +1 -1
  127. package/dist/lib/close/close-issue.js +5 -4
  128. package/dist/lib/close/close-issue.js.map +1 -1
  129. package/dist/lib/close/find-entity.d.ts.map +1 -1
  130. package/dist/lib/close/find-entity.js +1 -1
  131. package/dist/lib/close/find-entity.js.map +1 -1
  132. package/dist/lib/compact/format-dry-run.d.ts +2 -2
  133. package/dist/lib/compact/format-dry-run.d.ts.map +1 -1
  134. package/dist/lib/compact/format-dry-run.js +2 -1
  135. package/dist/lib/compact/format-dry-run.js.map +1 -1
  136. package/dist/lib/create-item-type/features.d.ts.map +1 -1
  137. package/dist/lib/create-item-type/features.js +2 -0
  138. package/dist/lib/create-item-type/features.js.map +1 -1
  139. package/dist/lib/get-doc/cross-project-hint.js +2 -2
  140. package/dist/lib/get-doc/cross-project-hint.js.map +1 -1
  141. package/dist/lib/get-doc/format-doc-output.d.ts +2 -2
  142. package/dist/lib/get-doc/format-doc-output.d.ts.map +1 -1
  143. package/dist/lib/get-doc/format-doc-output.js +2 -2
  144. package/dist/lib/get-doc/format-doc-output.js.map +1 -1
  145. package/dist/lib/get-doc/handle-global-search.d.ts +2 -2
  146. package/dist/lib/get-doc/handle-global-search.d.ts.map +1 -1
  147. package/dist/lib/get-doc/handle-global-search.js +6 -6
  148. package/dist/lib/get-doc/handle-global-search.js.map +1 -1
  149. package/dist/lib/get-doc/handle-not-initialized.js +1 -1
  150. package/dist/lib/get-doc/handle-not-initialized.js.map +1 -1
  151. package/dist/lib/get-issue/cross-project-hint.js +2 -2
  152. package/dist/lib/get-issue/cross-project-hint.js.map +1 -1
  153. package/dist/lib/get-issue/format-issue-output.d.ts +2 -2
  154. package/dist/lib/get-issue/format-issue-output.d.ts.map +1 -1
  155. package/dist/lib/get-issue/format-issue-output.js +4 -4
  156. package/dist/lib/get-issue/format-issue-output.js.map +1 -1
  157. package/dist/lib/get-issue/handle-global-search.d.ts +2 -2
  158. package/dist/lib/get-issue/handle-global-search.d.ts.map +1 -1
  159. package/dist/lib/get-issue/handle-global-search.js +7 -7
  160. package/dist/lib/get-issue/handle-global-search.js.map +1 -1
  161. package/dist/lib/get-issue/handle-not-initialized.js +1 -1
  162. package/dist/lib/get-issue/handle-not-initialized.js.map +1 -1
  163. package/dist/lib/init/config-builder.d.ts.map +1 -1
  164. package/dist/lib/init/config-builder.js +1 -4
  165. package/dist/lib/init/config-builder.js.map +1 -1
  166. package/dist/lib/list-items/format-item-line.d.ts +6 -0
  167. package/dist/lib/list-items/format-item-line.d.ts.map +1 -0
  168. package/dist/lib/list-items/format-item-line.js +13 -0
  169. package/dist/lib/list-items/format-item-line.js.map +1 -0
  170. package/dist/lib/list-items/handle-global-list.d.ts +2 -0
  171. package/dist/lib/list-items/handle-global-list.d.ts.map +1 -0
  172. package/dist/lib/list-items/handle-global-list.js +44 -0
  173. package/dist/lib/list-items/handle-global-list.js.map +1 -0
  174. package/dist/lib/list-items/handle-project-list.d.ts +2 -0
  175. package/dist/lib/list-items/handle-project-list.d.ts.map +1 -0
  176. package/dist/lib/list-items/handle-project-list.js +44 -0
  177. package/dist/lib/list-items/handle-project-list.js.map +1 -0
  178. package/dist/lib/show/format-results.d.ts +2 -2
  179. package/dist/lib/show/format-results.d.ts.map +1 -1
  180. package/dist/lib/show/format-results.js +5 -5
  181. package/dist/lib/show/format-results.js.map +1 -1
  182. package/dist/lib/show/search-entities.d.ts +2 -2
  183. package/dist/lib/show/search-entities.d.ts.map +1 -1
  184. package/dist/utils/apply-link-flags.d.ts +10 -0
  185. package/dist/utils/apply-link-flags.d.ts.map +1 -0
  186. package/dist/utils/apply-link-flags.js +37 -0
  187. package/dist/utils/apply-link-flags.js.map +1 -0
  188. package/oclif.manifest.json +323 -76
  189. package/package.json +1 -1
  190. package/proto/.husky/pre-commit +1 -0
  191. package/proto/README.md +19 -0
  192. package/proto/centy/v1/centy.proto +275 -562
  193. package/proto/centy/v1/generic_item.proto +26 -88
  194. package/proto/cspell.json +5 -0
  195. package/proto/package.json +11 -0
  196. package/proto/pnpm-lock.yaml +833 -0
  197. package/dist/daemon/daemon-get-next-issue-number.d.ts +0 -6
  198. package/dist/daemon/daemon-get-next-issue-number.d.ts.map +0 -1
  199. package/dist/daemon/daemon-get-next-issue-number.js +0 -9
  200. package/dist/daemon/daemon-get-next-issue-number.js.map +0 -1
@@ -15,45 +15,6 @@ service CentyDaemon {
15
15
  // Execute reconciliation with user decisions
16
16
  rpc ExecuteReconciliation(ExecuteReconciliationRequest) returns (InitResponse);
17
17
 
18
- // Deprecated: Use CreateItem with item_type="issues" instead.
19
- rpc CreateIssue(CreateIssueRequest) returns (CreateIssueResponse);
20
-
21
- // Deprecated: Use GetItem with item_type="issues" instead.
22
- rpc GetIssue(GetIssueRequest) returns (GetIssueResponse);
23
-
24
- // Get a single issue by display number (human-readable number like 1, 2, 3)
25
- rpc GetIssueByDisplayNumber(GetIssueByDisplayNumberRequest) returns (GetIssueResponse);
26
-
27
- // Get issues by UUID across all tracked projects (global search)
28
- rpc GetIssuesByUuid(GetIssuesByUuidRequest) returns (GetIssuesByUuidResponse);
29
-
30
- // Deprecated: Use ListItems with item_type="issues" instead.
31
- rpc ListIssues(ListIssuesRequest) returns (ListIssuesResponse);
32
-
33
- // Advanced issue search with query language
34
- rpc AdvancedSearch(AdvancedSearchRequest) returns (AdvancedSearchResponse);
35
-
36
- // Deprecated: Use UpdateItem with item_type="issues" instead.
37
- rpc UpdateIssue(UpdateIssueRequest) returns (UpdateIssueResponse);
38
-
39
- // Deprecated: Use DeleteItem with item_type="issues" instead.
40
- rpc DeleteIssue(DeleteIssueRequest) returns (DeleteIssueResponse);
41
-
42
- // Deprecated: Use SoftDeleteItem with item_type="issues" instead.
43
- rpc SoftDeleteIssue(SoftDeleteIssueRequest) returns (SoftDeleteIssueResponse);
44
-
45
- // Deprecated: Use RestoreItem with item_type="issues" instead.
46
- rpc RestoreIssue(RestoreIssueRequest) returns (RestoreIssueResponse);
47
-
48
- // Move an issue to another project
49
- rpc MoveIssue(MoveIssueRequest) returns (MoveIssueResponse);
50
-
51
- // Duplicate an issue (same project or different project)
52
- rpc DuplicateIssue(DuplicateIssueRequest) returns (DuplicateIssueResponse);
53
-
54
- // Get the next issue number
55
- rpc GetNextIssueNumber(GetNextIssueNumberRequest) returns (GetNextIssueNumberResponse);
56
-
57
18
  // Read the manifest
58
19
  rpc GetManifest(GetManifestRequest) returns (GetManifestResponse);
59
20
 
@@ -66,38 +27,6 @@ service CentyDaemon {
66
27
  // Check if centy is initialized in a directory
67
28
  rpc IsInitialized(IsInitializedRequest) returns (IsInitializedResponse);
68
29
 
69
- // ============ Doc RPCs ============
70
-
71
- // Deprecated: Use CreateItem with item_type="docs" instead.
72
- rpc CreateDoc(CreateDocRequest) returns (CreateDocResponse);
73
-
74
- // Deprecated: Use GetItem with item_type="docs" instead.
75
- rpc GetDoc(GetDocRequest) returns (GetDocResponse);
76
-
77
- // Get docs by slug across all tracked projects (global search)
78
- rpc GetDocsBySlug(GetDocsBySlugRequest) returns (GetDocsBySlugResponse);
79
-
80
- // Deprecated: Use ListItems with item_type="docs" instead.
81
- rpc ListDocs(ListDocsRequest) returns (ListDocsResponse);
82
-
83
- // Deprecated: Use UpdateItem with item_type="docs" instead.
84
- rpc UpdateDoc(UpdateDocRequest) returns (UpdateDocResponse);
85
-
86
- // Deprecated: Use DeleteItem with item_type="docs" instead.
87
- rpc DeleteDoc(DeleteDocRequest) returns (DeleteDocResponse);
88
-
89
- // Deprecated: Use SoftDeleteItem with item_type="docs" instead.
90
- rpc SoftDeleteDoc(SoftDeleteDocRequest) returns (SoftDeleteDocResponse);
91
-
92
- // Deprecated: Use RestoreItem with item_type="docs" instead.
93
- rpc RestoreDoc(RestoreDocRequest) returns (RestoreDocResponse);
94
-
95
- // Move a doc to another project
96
- rpc MoveDoc(MoveDocRequest) returns (MoveDocResponse);
97
-
98
- // Duplicate a doc (same project or different project)
99
- rpc DuplicateDoc(DuplicateDocRequest) returns (DuplicateDocResponse);
100
-
101
30
  // ============ Asset RPCs ============
102
31
 
103
32
  // Add an asset to an issue or as a shared asset
@@ -161,6 +90,32 @@ service CentyDaemon {
161
90
  // Delete an organization
162
91
  rpc DeleteOrganization(DeleteOrganizationRequest) returns (DeleteOrganizationResponse);
163
92
 
93
+ // ============ Organization Issue RPCs ============
94
+
95
+ // Create an organization-level issue
96
+ rpc CreateOrgIssue(CreateOrgIssueRequest) returns (CreateOrgIssueResponse);
97
+
98
+ // Get an org issue by UUID
99
+ rpc GetOrgIssue(GetOrgIssueRequest) returns (OrgIssue);
100
+
101
+ // Get an org issue by display number
102
+ rpc GetOrgIssueByDisplayNumber(GetOrgIssueByDisplayNumberRequest) returns (OrgIssue);
103
+
104
+ // List org issues with optional filters
105
+ rpc ListOrgIssues(ListOrgIssuesRequest) returns (ListOrgIssuesResponse);
106
+
107
+ // Update an org issue
108
+ rpc UpdateOrgIssue(UpdateOrgIssueRequest) returns (UpdateOrgIssueResponse);
109
+
110
+ // Delete an org issue
111
+ rpc DeleteOrgIssue(DeleteOrgIssueRequest) returns (DeleteOrgIssueResponse);
112
+
113
+ // Get org-level config
114
+ rpc GetOrgConfig(GetOrgConfigRequest) returns (OrgConfig);
115
+
116
+ // Update org-level config
117
+ rpc UpdateOrgConfig(UpdateOrgConfigRequest) returns (UpdateOrgConfigResponse);
118
+
164
119
  // ============ Version RPCs ============
165
120
 
166
121
  // Get daemon version info
@@ -191,9 +146,6 @@ service CentyDaemon {
191
146
  // Open a project in a temporary terminal workspace (deprecated: use OpenInTempWorkspace)
192
147
  rpc OpenInTempTerminal(OpenInTempWorkspaceRequest) returns (OpenInTempWorkspaceResponse);
193
148
 
194
- // Open an agent in a terminal for working on an issue
195
- rpc OpenAgentInTerminal(OpenAgentInTerminalRequest) returns (OpenAgentInTerminalResponse);
196
-
197
149
  // Open a standalone workspace in VS Code (deprecated: use OpenStandaloneWorkspace)
198
150
  rpc OpenStandaloneWorkspaceVscode(OpenStandaloneWorkspaceRequest) returns (OpenStandaloneWorkspaceResponse);
199
151
 
@@ -274,6 +226,14 @@ service CentyDaemon {
274
226
  // Manually trigger a sync push
275
227
  rpc SyncPush(SyncPushRequest) returns (SyncPushResponse);
276
228
 
229
+ // ============ Item Type RPCs ============
230
+
231
+ // Create a new item type dynamically
232
+ rpc CreateItemType(CreateItemTypeRequest) returns (CreateItemTypeResponse);
233
+
234
+ // List all item types for a project
235
+ rpc ListItemTypes(ListItemTypesRequest) returns (ListItemTypesResponse);
236
+
277
237
  // ============ Generic Item RPCs ============
278
238
 
279
239
  // Create a new item of any type
@@ -303,11 +263,14 @@ service CentyDaemon {
303
263
  // Move an item to another project
304
264
  rpc MoveItem(MoveItemRequest) returns (MoveItemResponse);
305
265
 
306
- // Create a new custom item type
307
- rpc CreateItemType(CreateItemTypeRequest) returns (CreateItemTypeResponse);
266
+ // Archive an item by moving it to the archived folder and recording its original type
267
+ rpc ArchiveItem(ArchiveItemRequest) returns (ArchiveItemResponse);
308
268
 
309
- // List all item types for a project
310
- rpc ListItemTypes(ListItemTypesRequest) returns (ListItemTypesResponse);
269
+ // Unarchive an item by moving it back to its original folder
270
+ rpc UnarchiveItem(UnarchiveItemRequest) returns (UnarchiveItemResponse);
271
+
272
+ // Search for an item by ID across all tracked projects
273
+ rpc SearchItems(SearchItemsRequest) returns (SearchItemsResponse);
311
274
  }
312
275
 
313
276
  // ============ Init Messages ============
@@ -321,6 +284,15 @@ message InitRequest {
321
284
 
322
285
  // Decisions for files that need user input (only used when force=false)
323
286
  ReconciliationDecisions decisions = 3;
287
+
288
+ // Optional configuration to apply during initialization.
289
+ // Fields set here will be written to .centy/config.json.
290
+ // Unset/zero-value fields fall back to project defaults.
291
+ Config init_config = 4;
292
+
293
+ // Optional project title to set during initialization (stored in .centy/project.json,
294
+ // visible to all team members). Empty string means no title is set.
295
+ string title = 5;
324
296
  }
325
297
 
326
298
  message InitResponse {
@@ -380,261 +352,6 @@ message ReconciliationDecisions {
380
352
  repeated string reset = 2;
381
353
  }
382
354
 
383
- // ============ Issue Messages ============
384
-
385
- message CreateIssueRequest {
386
- string project_path = 1;
387
- string title = 2;
388
- string description = 3;
389
- int32 priority = 4; // 1 = highest priority, 0 = use default
390
- string status = 5; // default: "open"
391
- map<string, string> custom_fields = 6;
392
- string template = 7; // Optional template name (without .md extension)
393
- bool draft = 8; // Create as draft (default: false)
394
- bool is_org_issue = 9; // Create as organization-wide issue (syncs to all org projects)
395
- }
396
-
397
- message CreateIssueResponse {
398
- bool success = 1;
399
- string error = 2;
400
-
401
- // The created issue ID (UUID)
402
- string id = 3;
403
-
404
- // Human-readable display number (1, 2, 3...)
405
- uint32 display_number = 4;
406
-
407
- // Legacy: same as id (for backward compatibility)
408
- string issue_number = 5;
409
-
410
- // Paths to created files
411
- repeated string created_files = 6;
412
-
413
- // The updated manifest
414
- Manifest manifest = 7;
415
-
416
- // Org-level display number (only for org issues, 0 if not an org issue)
417
- uint32 org_display_number = 8;
418
-
419
- // Results from syncing to other org projects (org issues only)
420
- repeated OrgDocSyncResult sync_results = 9;
421
- }
422
-
423
- message GetNextIssueNumberRequest {
424
- string project_path = 1;
425
- }
426
-
427
- message GetNextIssueNumberResponse {
428
- string issue_number = 1;
429
- bool success = 2;
430
- string error = 3;
431
- }
432
-
433
- // Issue represents a full issue with all its data
434
- message Issue {
435
- // UUID-based issue ID (folder name)
436
- string id = 1;
437
-
438
- // Human-readable display number (1, 2, 3...)
439
- uint32 display_number = 2;
440
-
441
- // Legacy: same as id (for backward compatibility)
442
- string issue_number = 3;
443
-
444
- string title = 4;
445
- string description = 5;
446
- IssueMetadata metadata = 6;
447
- }
448
-
449
- message IssueMetadata {
450
- // Human-readable display number (1, 2, 3...)
451
- uint32 display_number = 1;
452
- string status = 2; // e.g., "open", "in-progress", "closed"
453
- int32 priority = 3; // 1 = highest priority, N = lowest
454
- string created_at = 4; // ISO timestamp
455
- string updated_at = 5; // ISO timestamp
456
- map<string, string> custom_fields = 6;
457
- string priority_label = 7; // Human-readable label (e.g., "high", "P1")
458
- reserved 8, 9; // Removed: compacted, compacted_at (moved to CLI)
459
- bool draft = 10; // Whether this issue is a draft
460
- string deleted_at = 11; // ISO timestamp when soft-deleted (empty if not deleted)
461
- bool is_org_issue = 12; // Whether this is an organization-level issue
462
- string org_slug = 13; // Organization slug (empty if not org issue)
463
- uint32 org_display_number = 14; // Org-scoped display number (0 if not org issue)
464
- }
465
-
466
- message GetIssueRequest {
467
- string project_path = 1;
468
- string issue_id = 2; // UUID or legacy issue number (e.g., "0001")
469
- }
470
-
471
- message GetIssueByDisplayNumberRequest {
472
- string project_path = 1;
473
- uint32 display_number = 2; // Human-readable number (1, 2, 3...)
474
- }
475
-
476
- // Wrapper response for GetIssue and GetIssueByDisplayNumber RPCs
477
- message GetIssueResponse {
478
- bool success = 1;
479
- string error = 2;
480
- Issue issue = 3;
481
- }
482
-
483
- // ============ Global Issue Search Messages ============
484
-
485
- message GetIssuesByUuidRequest {
486
- string uuid = 1; // The UUID to search for (must be valid UUID format)
487
- }
488
-
489
- // An issue with its source project path
490
- message IssueWithProject {
491
- Issue issue = 1;
492
- string project_path = 2; // Absolute path to the project where this issue was found
493
- string project_name = 3; // Human-readable project name (directory name)
494
- string display_path = 4; // Human-readable path with ~/ for home dir (use for display only)
495
- }
496
-
497
- message GetIssuesByUuidResponse {
498
- repeated IssueWithProject issues = 1;
499
- int32 total_count = 2;
500
- repeated string errors = 3; // Non-fatal errors (e.g., projects that couldn't be accessed)
501
- bool success = 4;
502
- string error = 5;
503
- }
504
-
505
- message ListIssuesRequest {
506
- string project_path = 1;
507
-
508
- // Optional filters
509
- string status = 2; // Filter by status (empty = all)
510
- int32 priority = 3; // Filter by priority (0 = all)
511
- optional bool draft = 4; // Filter by draft status (absent = all, true = drafts only, false = non-drafts only)
512
- bool include_deleted = 5; // Include soft-deleted issues (default: false)
513
- }
514
-
515
- message ListIssuesResponse {
516
- repeated Issue issues = 1;
517
- int32 total_count = 2;
518
- bool success = 3;
519
- string error = 4;
520
- }
521
-
522
- // Advanced search request
523
- message AdvancedSearchRequest {
524
- string query = 1; // Query string (e.g., "status:open AND priority:1")
525
- string sort_by = 2; // Field to sort by (e.g., "createdAt", "priority")
526
- bool sort_descending = 3; // Sort order (true = descending)
527
- bool multi_project = 4; // Search across all tracked projects
528
- string project_path = 5; // Project path (required if multi_project is false)
529
- }
530
-
531
- // Search result containing issue and project info
532
- message SearchResultIssue {
533
- Issue issue = 1;
534
- string project_path = 2;
535
- string project_name = 3;
536
- string display_path = 4;
537
- }
538
-
539
- // Advanced search response
540
- message AdvancedSearchResponse {
541
- bool success = 1;
542
- string error = 2;
543
- repeated SearchResultIssue results = 3;
544
- int32 total_count = 4;
545
- string parsed_query = 5; // Debug: the parsed query representation
546
- }
547
-
548
- message UpdateIssueRequest {
549
- string project_path = 1;
550
- string issue_id = 2; // UUID or legacy issue number
551
-
552
- // Fields to update (empty string = don't update, 0 = don't update priority)
553
- string title = 3;
554
- string description = 4;
555
- string status = 5;
556
- int32 priority = 6; // 0 = don't update, otherwise 1-N
557
- map<string, string> custom_fields = 7;
558
- optional bool draft = 8; // Update draft status (absent = don't update)
559
- }
560
-
561
- message UpdateIssueResponse {
562
- bool success = 1;
563
- string error = 2;
564
- Issue issue = 3; // The updated issue
565
- Manifest manifest = 4;
566
- repeated OrgDocSyncResult sync_results = 5; // Results from syncing to other org projects (org issues only)
567
- }
568
-
569
- message DeleteIssueRequest {
570
- string project_path = 1;
571
- string issue_id = 2; // UUID or legacy issue number
572
- }
573
-
574
- message DeleteIssueResponse {
575
- bool success = 1;
576
- string error = 2;
577
- Manifest manifest = 3; // Updated manifest after deletion
578
- }
579
-
580
- // Soft-delete an issue (set deleted_at timestamp)
581
- message SoftDeleteIssueRequest {
582
- string project_path = 1;
583
- string issue_id = 2; // UUID or legacy issue number
584
- }
585
-
586
- message SoftDeleteIssueResponse {
587
- bool success = 1;
588
- string error = 2;
589
- Issue issue = 3; // The soft-deleted issue (with deleted_at set)
590
- Manifest manifest = 4; // Updated manifest
591
- }
592
-
593
- // Restore a soft-deleted issue (clear deleted_at timestamp)
594
- message RestoreIssueRequest {
595
- string project_path = 1;
596
- string issue_id = 2; // UUID or legacy issue number
597
- }
598
-
599
- message RestoreIssueResponse {
600
- bool success = 1;
601
- string error = 2;
602
- Issue issue = 3; // The restored issue (with deleted_at cleared)
603
- Manifest manifest = 4; // Updated manifest
604
- }
605
-
606
- // ============ Issue Move/Duplicate Messages ============
607
-
608
- message MoveIssueRequest {
609
- string source_project_path = 1; // Project containing the issue
610
- string issue_id = 2; // UUID of the issue to move
611
- string target_project_path = 3; // Target project path
612
- }
613
-
614
- message MoveIssueResponse {
615
- bool success = 1;
616
- string error = 2;
617
- Issue issue = 3; // The moved issue (same UUID, new display_number)
618
- uint32 old_display_number = 4; // Original display number for reference
619
- Manifest source_manifest = 5; // Updated source project manifest
620
- Manifest target_manifest = 6; // Updated target project manifest
621
- }
622
-
623
- message DuplicateIssueRequest {
624
- string source_project_path = 1; // Project containing the original issue
625
- string issue_id = 2; // UUID of the issue to duplicate
626
- string target_project_path = 3; // Target project (can be same as source)
627
- string new_title = 4; // Optional: override title (default: "Copy of {original}")
628
- }
629
-
630
- message DuplicateIssueResponse {
631
- bool success = 1;
632
- string error = 2;
633
- Issue issue = 3; // The new duplicate issue (new UUID, new display_number)
634
- string original_issue_id = 4; // UUID of the original issue
635
- Manifest manifest = 5; // Updated target project manifest
636
- }
637
-
638
355
  // ============ Manifest Messages ============
639
356
 
640
357
  message GetManifestRequest {
@@ -648,12 +365,7 @@ message GetManifestResponse {
648
365
  Manifest manifest = 3;
649
366
  }
650
367
 
651
- message Manifest {
652
- int32 schema_version = 1;
653
- string centy_version = 2;
654
- string created_at = 3;
655
- string updated_at = 4;
656
- }
368
+ // Manifest is defined in generic_item.proto (shared across both files)
657
369
 
658
370
  enum FileType {
659
371
  FILE_TYPE_UNSPECIFIED = 0;
@@ -685,7 +397,7 @@ message Config {
685
397
  repeated CustomFieldDefinition custom_fields = 1;
686
398
  map<string, string> defaults = 2;
687
399
  int32 priority_levels = 3; // Number of priority levels (default: 3)
688
- repeated string allowed_states = 4; // Allowed status values (default: ["open", "in-progress", "closed"])
400
+ reserved 4; // Previously: repeated string allowed_states (moved to per-item-type config.yaml)
689
401
  reserved 5; // Previously: string default_state (moved to per-item-type config.yaml)
690
402
  string version = 6; // Project version (semver, empty = daemon default)
691
403
  map<string, string> state_colors = 7; // State name → hex color (e.g., "open" → "#10b981")
@@ -748,184 +460,6 @@ message IsInitializedResponse {
748
460
  string centy_path = 2; // Full path to .centy folder if initialized
749
461
  }
750
462
 
751
- // ============ Doc Messages ============
752
-
753
- message CreateDocRequest {
754
- string project_path = 1;
755
- string title = 2; // Doc title (used to generate slug)
756
- string content = 3; // Markdown content
757
- string slug = 4; // Optional custom slug (auto-generated from title if empty)
758
- string template = 5; // Optional template name (without .md extension)
759
- bool is_org_doc = 6; // Create as organization-wide doc (syncs to all org projects)
760
- }
761
-
762
- // Result of syncing an org doc to a project
763
- message OrgDocSyncResult {
764
- string project_path = 1; // Path of target project
765
- bool success = 2; // Whether sync succeeded
766
- string error = 3; // Error message if failed
767
- }
768
-
769
- message CreateDocResponse {
770
- bool success = 1;
771
- string error = 2;
772
- string slug = 3; // The created doc slug
773
- string created_file = 4; // Path to created file
774
- Manifest manifest = 5;
775
- repeated OrgDocSyncResult sync_results = 6; // Results from syncing to other org projects
776
- }
777
-
778
- message GetDocRequest {
779
- string project_path = 1;
780
- string slug = 2; // e.g., "getting-started"
781
- }
782
-
783
- // Wrapper response for GetDoc RPC
784
- message GetDocResponse {
785
- bool success = 1;
786
- string error = 2;
787
- Doc doc = 3;
788
- }
789
-
790
- // ============ Global Doc Search Messages ============
791
-
792
- message GetDocsBySlugRequest {
793
- string slug = 1; // The slug to search for (kebab-case)
794
- }
795
-
796
- // A doc with its source project path
797
- message DocWithProject {
798
- Doc doc = 1;
799
- string project_path = 2; // Absolute path to the project where this doc was found
800
- string project_name = 3; // Human-readable project name (directory name)
801
- string display_path = 4; // Human-readable path with ~/ for home dir (use for display only)
802
- }
803
-
804
- message GetDocsBySlugResponse {
805
- repeated DocWithProject docs = 1;
806
- int32 total_count = 2;
807
- repeated string errors = 3; // Non-fatal errors (e.g., projects that couldn't be accessed)
808
- bool success = 4;
809
- string error = 5;
810
- }
811
-
812
- message ListDocsRequest {
813
- string project_path = 1;
814
- bool include_deleted = 2; // Include soft-deleted docs (default: false)
815
- }
816
-
817
- message ListDocsResponse {
818
- repeated Doc docs = 1;
819
- int32 total_count = 2;
820
- bool success = 3;
821
- string error = 4;
822
- }
823
-
824
- // Doc represents a documentation file
825
- message Doc {
826
- string slug = 1; // e.g., "getting-started"
827
- string title = 2;
828
- string content = 3; // Full markdown content
829
- DocMetadata metadata = 4;
830
- }
831
-
832
- message DocMetadata {
833
- string created_at = 1; // ISO timestamp
834
- string updated_at = 2; // ISO timestamp
835
- string deleted_at = 3; // ISO timestamp when soft-deleted (empty if not deleted)
836
- bool is_org_doc = 4; // Whether this is an organization-level doc
837
- string org_slug = 5; // Organization slug (for org docs)
838
- }
839
-
840
- message UpdateDocRequest {
841
- string project_path = 1;
842
- string slug = 2;
843
-
844
- // Fields to update (empty string = don't update)
845
- string title = 3;
846
- string content = 4;
847
- string new_slug = 5; // Rename the doc (empty = keep current slug)
848
- }
849
-
850
- message UpdateDocResponse {
851
- bool success = 1;
852
- string error = 2;
853
- Doc doc = 3; // The updated doc
854
- Manifest manifest = 4;
855
- repeated OrgDocSyncResult sync_results = 5; // Results from syncing to other org projects (org docs only)
856
- }
857
-
858
- message DeleteDocRequest {
859
- string project_path = 1;
860
- string slug = 2;
861
- }
862
-
863
- message DeleteDocResponse {
864
- bool success = 1;
865
- string error = 2;
866
- Manifest manifest = 3;
867
- }
868
-
869
- // Soft-delete a doc (set deleted_at timestamp)
870
- message SoftDeleteDocRequest {
871
- string project_path = 1;
872
- string slug = 2;
873
- }
874
-
875
- message SoftDeleteDocResponse {
876
- bool success = 1;
877
- string error = 2;
878
- Doc doc = 3; // The soft-deleted doc (with deleted_at set)
879
- Manifest manifest = 4;
880
- }
881
-
882
- // Restore a soft-deleted doc (clear deleted_at timestamp)
883
- message RestoreDocRequest {
884
- string project_path = 1;
885
- string slug = 2;
886
- }
887
-
888
- message RestoreDocResponse {
889
- bool success = 1;
890
- string error = 2;
891
- Doc doc = 3; // The restored doc (with deleted_at cleared)
892
- Manifest manifest = 4;
893
- }
894
-
895
- // ============ Doc Move/Duplicate Messages ============
896
-
897
- message MoveDocRequest {
898
- string source_project_path = 1; // Project containing the doc
899
- string slug = 2; // Slug of the doc to move
900
- string target_project_path = 3; // Target project path
901
- string new_slug = 4; // Optional: new slug if conflict exists
902
- }
903
-
904
- message MoveDocResponse {
905
- bool success = 1;
906
- string error = 2;
907
- Doc doc = 3; // The moved doc
908
- string old_slug = 4; // Original slug for reference
909
- Manifest source_manifest = 5; // Updated source project manifest
910
- Manifest target_manifest = 6; // Updated target project manifest
911
- }
912
-
913
- message DuplicateDocRequest {
914
- string source_project_path = 1; // Project containing the original doc
915
- string slug = 2; // Slug of the doc to duplicate
916
- string target_project_path = 3; // Target project (can be same as source)
917
- string new_slug = 4; // Optional: override slug (default: "{slug}-copy")
918
- string new_title = 5; // Optional: override title (default: "Copy of {original}")
919
- }
920
-
921
- message DuplicateDocResponse {
922
- bool success = 1;
923
- string error = 2;
924
- Doc doc = 3; // The new duplicate doc
925
- string original_slug = 4; // Slug of the original doc
926
- Manifest manifest = 5; // Updated target project manifest
927
- }
928
-
929
463
  // ============ Asset Messages ============
930
464
 
931
465
  // Asset represents file metadata
@@ -1018,6 +552,8 @@ message ProjectInfo {
1018
552
  string organization_name = 12; // Organization display name (for convenience)
1019
553
  string user_title = 13; // User-scope custom title (from ~/.centy/projects.json)
1020
554
  string project_title = 14; // Project-scope custom title (from .centy/project.json)
555
+ string project_version = 15; // Centy version recorded in manifest (empty if not initialized)
556
+ bool project_behind = 16; // True if project version is behind current daemon version
1021
557
  }
1022
558
 
1023
559
  message ListProjectsRequest {
@@ -1190,6 +726,7 @@ message UpdateOrganizationResponse {
1190
726
 
1191
727
  message DeleteOrganizationRequest {
1192
728
  string slug = 1;
729
+ bool cascade = 2;
1193
730
  }
1194
731
 
1195
732
  message DeleteOrganizationResponse {
@@ -1233,21 +770,6 @@ message RestartResponse {
1233
770
 
1234
771
  // ============ Temp Workspace Messages ============
1235
772
 
1236
- // Action types for workspace operations
1237
- enum LlmAction {
1238
- LLM_ACTION_UNSPECIFIED = 0;
1239
- LLM_ACTION_PLAN = 1;
1240
- LLM_ACTION_IMPLEMENT = 2;
1241
- LLM_ACTION_DEEPDIVE = 3;
1242
- }
1243
-
1244
- // Workspace mode for agent operations
1245
- enum WorkspaceMode {
1246
- WORKSPACE_MODE_UNSPECIFIED = 0; // Use project default or prompt user
1247
- WORKSPACE_MODE_TEMP = 1; // Create temporary worktree
1248
- WORKSPACE_MODE_CURRENT = 2; // Use current project directory
1249
- }
1250
-
1251
773
  // Editor type for opening workspaces
1252
774
  enum EditorType {
1253
775
  EDITOR_TYPE_UNSPECIFIED = 0;
@@ -1277,8 +799,7 @@ message GetSupportedEditorsResponse {
1277
799
  message OpenInTempWorkspaceWithEditorRequest {
1278
800
  string project_path = 1; // Source project path
1279
801
  string issue_id = 2; // Issue UUID or display number
1280
- LlmAction action = 3; // Plan or Implement
1281
- string agent_name = 4; // Agent to use (empty = default)
802
+ reserved 3, 4; // Removed: action (LlmAction), agent_name
1282
803
  uint32 ttl_hours = 5; // Custom TTL in hours (0 = use default 12h)
1283
804
  string editor_id = 6; // Editor ID (e.g., "vscode", "terminal", "zed"). Empty = use project/user default.
1284
805
  }
@@ -1289,7 +810,7 @@ message OpenStandaloneWorkspaceWithEditorRequest {
1289
810
  string name = 2; // Optional custom name for the workspace
1290
811
  string description = 3; // Optional description/goals for this workspace
1291
812
  uint32 ttl_hours = 4; // Custom TTL in hours (0 = use default 12h)
1292
- string agent_name = 5; // Agent to use (empty = default)
813
+ reserved 5; // Removed: agent_name
1293
814
  string editor_id = 6; // Editor ID (e.g., "vscode", "terminal", "zed"). Empty = use project/user default.
1294
815
  }
1295
816
 
@@ -1297,8 +818,7 @@ message OpenStandaloneWorkspaceWithEditorRequest {
1297
818
  message OpenInTempWorkspaceRequest {
1298
819
  string project_path = 1; // Source project path
1299
820
  string issue_id = 2; // Issue UUID or display number
1300
- LlmAction action = 3; // Plan or Implement
1301
- string agent_name = 4; // Agent to use (empty = default)
821
+ reserved 3, 4; // Removed: action (LlmAction), agent_name
1302
822
  uint32 ttl_hours = 5; // Custom TTL in hours (0 = use default 12h)
1303
823
  }
1304
824
 
@@ -1316,34 +836,13 @@ message OpenInTempWorkspaceResponse {
1316
836
  string original_created_at = 10; // Original creation timestamp (only set if workspace_reused is true)
1317
837
  }
1318
838
 
1319
- // Request to open an agent in a terminal
1320
- message OpenAgentInTerminalRequest {
1321
- string project_path = 1; // Source project path
1322
- string issue_id = 2; // Issue UUID or display number
1323
- string agent_name = 3; // Agent to use (empty = default)
1324
- WorkspaceMode workspace_mode = 4; // Temp worktree or current project
1325
- uint32 ttl_hours = 5; // Custom TTL in hours (0 = default, only for temp mode)
1326
- }
1327
-
1328
- message OpenAgentInTerminalResponse {
1329
- bool success = 1;
1330
- string error = 2;
1331
- string working_directory = 3; // Path where agent was launched
1332
- string issue_id = 4; // Resolved issue UUID
1333
- uint32 display_number = 5; // Issue display number
1334
- string agent_command = 6; // The agent command that was executed
1335
- bool terminal_opened = 7; // Whether terminal was successfully opened
1336
- string expires_at = 8; // ISO timestamp (only for temp mode)
1337
- bool requires_status_config = 9; // True if user must configure update_status_on_start setting
1338
- }
1339
-
1340
839
  // Request to open a standalone workspace (not tied to an issue)
1341
840
  message OpenStandaloneWorkspaceRequest {
1342
841
  string project_path = 1; // Source project path
1343
842
  string name = 2; // Optional custom name for the workspace
1344
843
  string description = 3; // Optional description/goals for this workspace
1345
844
  uint32 ttl_hours = 4; // Custom TTL in hours (0 = use default 12h)
1346
- string agent_name = 5; // Agent to use (empty = default)
845
+ reserved 5; // Removed: agent_name
1347
846
  }
1348
847
 
1349
848
  // Response for opening a standalone workspace
@@ -1366,8 +865,7 @@ message TempWorkspace {
1366
865
  string issue_id = 3; // Issue UUID (empty for standalone workspaces)
1367
866
  uint32 issue_display_number = 4; // Issue display number (0 for standalone)
1368
867
  string issue_title = 5; // Issue title (empty for standalone)
1369
- string agent_name = 6; // Agent being used
1370
- LlmAction action = 7; // Plan or Implement
868
+ reserved 6, 7; // Removed: agent_name, action (LlmAction)
1371
869
  string created_at = 8; // ISO timestamp
1372
870
  string expires_at = 9; // ISO timestamp when workspace expires
1373
871
  bool is_standalone = 10; // True if this is a standalone workspace (not tied to an issue)
@@ -1776,3 +1274,218 @@ message SyncPushResponse {
1776
1274
  bool had_changes = 3; // Whether any changes were pushed
1777
1275
  }
1778
1276
 
1277
+ // ============ Item Type Messages ============
1278
+
1279
+ // Toggle-able features for an item type
1280
+ message ItemTypeFeatures {
1281
+ bool display_number = 1; // Enable display numbers (1, 2, 3...)
1282
+ bool status = 2; // Enable status tracking
1283
+ bool priority = 3; // Enable priority levels
1284
+ bool assets = 4; // Enable file attachments
1285
+ bool org_sync = 5; // Enable organization sync
1286
+ bool move = 6; // Enable moving between projects
1287
+ bool duplicate = 7; // Enable duplication
1288
+ bool soft_delete = 8; // Enable soft-deletion (restorable delete)
1289
+ }
1290
+
1291
+ // Request to create a new item type
1292
+ message CreateItemTypeRequest {
1293
+ string project_path = 1;
1294
+ string name = 2; // Singular display name (e.g., "Bug", "Task", "Epic")
1295
+ string plural = 3; // Folder/type key (e.g., "bugs", "tasks", "epics")
1296
+ string identifier = 4; // "uuid" or "slug"
1297
+ ItemTypeFeatures features = 5; // Toggle-able features
1298
+ repeated string statuses = 6; // Allowed statuses (e.g., ["open", "in-progress", "closed"])
1299
+ string default_status = 7; // Default status for new items (must be in statuses list)
1300
+ uint32 priority_levels = 8; // Number of priority levels (0 = none)
1301
+ repeated CustomFieldDefinition custom_fields = 9; // Custom field definitions
1302
+ }
1303
+
1304
+ // Response after creating an item type
1305
+ message CreateItemTypeResponse {
1306
+ bool success = 1;
1307
+ string error = 2;
1308
+ ItemTypeConfigProto config = 3; // The created item type config
1309
+ }
1310
+
1311
+ // Proto representation of an ItemTypeConfig
1312
+ message ItemTypeConfigProto {
1313
+ string name = 1;
1314
+ string plural = 2;
1315
+ string identifier = 3;
1316
+ ItemTypeFeatures features = 4;
1317
+ repeated string statuses = 5;
1318
+ string default_status = 6;
1319
+ uint32 priority_levels = 7;
1320
+ repeated CustomFieldDefinition custom_fields = 8;
1321
+ string icon = 9; // Optional icon identifier (e.g. "clipboard")
1322
+ string template = 10; // Optional template file path
1323
+ }
1324
+
1325
+ message ListItemTypesRequest {
1326
+ string project_path = 1;
1327
+ }
1328
+
1329
+ message ListItemTypesResponse {
1330
+ bool success = 1;
1331
+ string error = 2;
1332
+ repeated ItemTypeConfigProto item_types = 3;
1333
+ int32 total_count = 4;
1334
+ }
1335
+
1336
+ // ============ Generic Item Move Messages ============
1337
+
1338
+ message MoveItemRequest {
1339
+ string source_project_path = 1;
1340
+ string target_project_path = 2;
1341
+ string item_type = 3;
1342
+ string item_id = 4;
1343
+ string new_id = 5; // Optional: for slug renames
1344
+ }
1345
+
1346
+ message MoveItemResponse {
1347
+ bool success = 1;
1348
+ string error = 2;
1349
+ GenericItem item = 3;
1350
+ string old_id = 4;
1351
+ Manifest source_manifest = 5;
1352
+ Manifest target_manifest = 6;
1353
+ }
1354
+
1355
+ // ============ Archive Messages ============
1356
+
1357
+ message ArchiveItemRequest {
1358
+ string project_path = 1;
1359
+ string item_type = 2; // Source folder name (e.g., "issues", "docs")
1360
+ string item_id = 3; // UUID of the item to archive
1361
+ }
1362
+
1363
+ message ArchiveItemResponse {
1364
+ bool success = 1;
1365
+ string error = 2;
1366
+ GenericItem item = 3; // The archived item with original_item_type set
1367
+ }
1368
+
1369
+ message UnarchiveItemRequest {
1370
+ string project_path = 1;
1371
+ string item_id = 2; // UUID of the archived item
1372
+ string target_item_type = 3; // Optional: override original_item_type from metadata
1373
+ }
1374
+
1375
+ message UnarchiveItemResponse {
1376
+ bool success = 1;
1377
+ string error = 2;
1378
+ GenericItem item = 3; // The restored item
1379
+ string original_item_type = 4; // The folder the item was restored to
1380
+ }
1381
+
1382
+ // ============ Organization Issue Messages ============
1383
+
1384
+ message OrgIssueMetadata {
1385
+ uint32 display_number = 1;
1386
+ string status = 2;
1387
+ int32 priority = 3;
1388
+ string created_at = 4;
1389
+ string updated_at = 5;
1390
+ map<string, string> custom_fields = 6;
1391
+ string priority_label = 7;
1392
+ repeated string referenced_projects = 8;
1393
+ }
1394
+
1395
+ message OrgIssue {
1396
+ string id = 1;
1397
+ uint32 display_number = 2;
1398
+ string title = 3;
1399
+ string description = 4;
1400
+ OrgIssueMetadata metadata = 5;
1401
+ }
1402
+
1403
+ message CreateOrgIssueRequest {
1404
+ string organization_slug = 1;
1405
+ string title = 2;
1406
+ string description = 3;
1407
+ int32 priority = 4;
1408
+ string status = 5;
1409
+ map<string, string> custom_fields = 6;
1410
+ repeated string referenced_projects = 7;
1411
+ }
1412
+
1413
+ message CreateOrgIssueResponse {
1414
+ bool success = 1;
1415
+ string error = 2;
1416
+ string id = 3;
1417
+ uint32 display_number = 4;
1418
+ repeated string created_files = 5;
1419
+ }
1420
+
1421
+ message GetOrgIssueRequest {
1422
+ string organization_slug = 1;
1423
+ string issue_id = 2;
1424
+ }
1425
+
1426
+ message GetOrgIssueByDisplayNumberRequest {
1427
+ string organization_slug = 1;
1428
+ uint32 display_number = 2;
1429
+ }
1430
+
1431
+ message ListOrgIssuesRequest {
1432
+ string organization_slug = 1;
1433
+ string status = 2; // Filter by status (empty = all)
1434
+ int32 priority = 3; // Filter by priority (0 = all)
1435
+ string referenced_project = 4; // Filter by referenced project path (empty = all)
1436
+ }
1437
+
1438
+ message ListOrgIssuesResponse {
1439
+ repeated OrgIssue issues = 1;
1440
+ int32 total_count = 2;
1441
+ }
1442
+
1443
+ message UpdateOrgIssueRequest {
1444
+ string organization_slug = 1;
1445
+ string issue_id = 2;
1446
+ string title = 3;
1447
+ string description = 4;
1448
+ string status = 5;
1449
+ int32 priority = 6;
1450
+ map<string, string> custom_fields = 7;
1451
+ repeated string add_referenced_projects = 8;
1452
+ repeated string remove_referenced_projects = 9;
1453
+ }
1454
+
1455
+ message UpdateOrgIssueResponse {
1456
+ bool success = 1;
1457
+ string error = 2;
1458
+ OrgIssue issue = 3;
1459
+ }
1460
+
1461
+ message DeleteOrgIssueRequest {
1462
+ string organization_slug = 1;
1463
+ string issue_id = 2;
1464
+ }
1465
+
1466
+ message DeleteOrgIssueResponse {
1467
+ bool success = 1;
1468
+ string error = 2;
1469
+ }
1470
+
1471
+ message OrgConfig {
1472
+ uint32 priority_levels = 1;
1473
+ repeated CustomFieldDefinition custom_fields = 2;
1474
+ }
1475
+
1476
+ message GetOrgConfigRequest {
1477
+ string organization_slug = 1;
1478
+ }
1479
+
1480
+ message UpdateOrgConfigRequest {
1481
+ string organization_slug = 1;
1482
+ uint32 priority_levels = 2;
1483
+ repeated CustomFieldDefinition custom_fields = 3;
1484
+ }
1485
+
1486
+ message UpdateOrgConfigResponse {
1487
+ bool success = 1;
1488
+ string error = 2;
1489
+ OrgConfig config = 3;
1490
+ }
1491
+