centy 0.4.0 → 0.5.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.
- package/dist/commands/add/asset.d.ts.map +1 -1
- package/dist/commands/add/asset.js +5 -1
- package/dist/commands/add/asset.js.map +1 -1
- package/dist/commands/close/issue.d.ts.map +1 -1
- package/dist/commands/close/issue.js +4 -0
- package/dist/commands/close/issue.js.map +1 -1
- package/dist/commands/close.js +4 -0
- package/dist/commands/close.js.map +1 -1
- package/dist/commands/cockpit.d.ts.map +1 -1
- package/dist/commands/cockpit.js +6 -5
- package/dist/commands/cockpit.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +12 -11
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/create/doc.d.ts.map +1 -1
- package/dist/commands/create/doc.js +3 -2
- package/dist/commands/create/doc.js.map +1 -1
- package/dist/commands/create/issue.d.ts +1 -0
- package/dist/commands/create/issue.d.ts.map +1 -1
- package/dist/commands/create/issue.js +6 -0
- package/dist/commands/create/issue.js.map +1 -1
- package/dist/commands/create/item-type.d.ts +20 -0
- package/dist/commands/create/item-type.d.ts.map +1 -0
- package/dist/commands/create/item-type.js +91 -0
- package/dist/commands/create/item-type.js.map +1 -0
- package/dist/commands/create/org.js +2 -2
- package/dist/commands/create/org.js.map +1 -1
- package/dist/commands/create/user.d.ts.map +1 -1
- package/dist/commands/create/user.js +11 -10
- package/dist/commands/create/user.js.map +1 -1
- package/dist/commands/daemon/status.d.ts +13 -0
- package/dist/commands/daemon/status.d.ts.map +1 -0
- package/dist/commands/daemon/status.js +68 -0
- package/dist/commands/daemon/status.js.map +1 -0
- package/dist/commands/delete/asset.js +1 -1
- package/dist/commands/delete/asset.js.map +1 -1
- package/dist/commands/delete/doc.d.ts.map +1 -1
- package/dist/commands/delete/doc.js +5 -3
- package/dist/commands/delete/doc.js.map +1 -1
- package/dist/commands/delete/issue.d.ts.map +1 -1
- package/dist/commands/delete/issue.js +5 -3
- package/dist/commands/delete/issue.js.map +1 -1
- package/dist/commands/delete/user.d.ts.map +1 -1
- package/dist/commands/delete/user.js +5 -3
- package/dist/commands/delete/user.js.map +1 -1
- package/dist/commands/duplicate/doc.js +2 -2
- package/dist/commands/duplicate/doc.js.map +1 -1
- package/dist/commands/duplicate/issue.js +1 -1
- package/dist/commands/duplicate/issue.js.map +1 -1
- package/dist/commands/get/asset.js +1 -1
- package/dist/commands/get/asset.js.map +1 -1
- package/dist/commands/get/project.js.map +1 -1
- package/dist/commands/{get/issue.d.ts → get.d.ts} +4 -4
- package/dist/commands/get.d.ts.map +1 -0
- package/dist/commands/get.js +91 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/init.d.ts +0 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +0 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/link.d.ts +19 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +76 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/{get/user.d.ts → links.d.ts} +4 -3
- package/dist/commands/links.d.ts.map +1 -0
- package/dist/commands/links.js +71 -0
- package/dist/commands/links.js.map +1 -0
- package/dist/commands/list/assets.js +1 -1
- package/dist/commands/list/assets.js.map +1 -1
- package/dist/commands/list/docs.d.ts.map +1 -1
- package/dist/commands/list/docs.js +1 -0
- package/dist/commands/list/docs.js.map +1 -1
- package/dist/commands/list/issues.d.ts.map +1 -1
- package/dist/commands/list/issues.js +3 -2
- package/dist/commands/list/issues.js.map +1 -1
- package/dist/commands/{get/doc.d.ts → list/link-types.d.ts} +3 -9
- package/dist/commands/list/link-types.d.ts.map +1 -0
- package/dist/commands/list/link-types.js +59 -0
- package/dist/commands/list/link-types.js.map +1 -0
- package/dist/commands/list/projects.d.ts.map +1 -1
- package/dist/commands/list/projects.js +2 -1
- package/dist/commands/list/projects.js.map +1 -1
- package/dist/commands/list/users.d.ts.map +1 -1
- package/dist/commands/list/users.js +2 -1
- package/dist/commands/list/users.js.map +1 -1
- package/dist/commands/move/doc.js +1 -1
- package/dist/commands/move/doc.js.map +1 -1
- package/dist/commands/move/issue.js.map +1 -1
- package/dist/commands/project/archive.js.map +1 -1
- package/dist/commands/project/favorite.js.map +1 -1
- package/dist/commands/project/org.js.map +1 -1
- package/dist/commands/project/title.js.map +1 -1
- package/dist/commands/register/project.js.map +1 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +6 -5
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/sync/users.d.ts.map +1 -1
- package/dist/commands/sync/users.js +6 -5
- package/dist/commands/sync/users.js.map +1 -1
- package/dist/commands/unlink.d.ts +19 -0
- package/dist/commands/unlink.d.ts.map +1 -0
- package/dist/commands/unlink.js +75 -0
- package/dist/commands/unlink.js.map +1 -0
- package/dist/commands/update/doc.d.ts +1 -0
- package/dist/commands/update/doc.d.ts.map +1 -1
- package/dist/commands/update/doc.js +5 -3
- package/dist/commands/update/doc.js.map +1 -1
- package/dist/commands/update/issue.d.ts +1 -0
- package/dist/commands/update/issue.d.ts.map +1 -1
- package/dist/commands/update/issue.js +8 -4
- package/dist/commands/update/issue.js.map +1 -1
- package/dist/commands/update/org.d.ts.map +1 -1
- package/dist/commands/update/org.js +8 -4
- package/dist/commands/update/org.js.map +1 -1
- package/dist/commands/update/user.d.ts +1 -0
- package/dist/commands/update/user.d.ts.map +1 -1
- package/dist/commands/update/user.js +15 -12
- package/dist/commands/update/user.js.map +1 -1
- package/dist/commands/version.d.ts +13 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +51 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/workspace/cleanup.js +6 -5
- package/dist/commands/workspace/cleanup.js.map +1 -1
- package/dist/commands/workspace/list.d.ts.map +1 -1
- package/dist/commands/workspace/list.js +1 -1
- package/dist/commands/workspace/list.js.map +1 -1
- package/dist/commands/workspace/open.d.ts.map +1 -1
- package/dist/commands/workspace/open.js +5 -3
- package/dist/commands/workspace/open.js.map +1 -1
- package/dist/daemon/daemon-control-service.js +2 -2
- package/dist/daemon/daemon-control-service.js.map +1 -1
- package/dist/daemon/daemon-create-item-type.d.ts +6 -0
- package/dist/daemon/daemon-create-item-type.d.ts.map +1 -0
- package/dist/daemon/daemon-create-item-type.js +9 -0
- package/dist/daemon/daemon-create-item-type.js.map +1 -0
- package/dist/daemon/daemon-create-link.d.ts +6 -0
- package/dist/daemon/daemon-create-link.d.ts.map +1 -0
- package/dist/daemon/daemon-create-link.js +9 -0
- package/dist/daemon/{daemon-delete-user.js.map → daemon-create-link.js.map} +1 -1
- package/dist/daemon/daemon-delete-item.d.ts +6 -0
- package/dist/daemon/daemon-delete-item.d.ts.map +1 -0
- package/dist/daemon/daemon-delete-item.js +9 -0
- package/dist/daemon/daemon-delete-item.js.map +1 -0
- package/dist/daemon/daemon-delete-link.d.ts +6 -0
- package/dist/daemon/daemon-delete-link.d.ts.map +1 -0
- package/dist/daemon/daemon-delete-link.js +9 -0
- package/dist/daemon/daemon-delete-link.js.map +1 -0
- package/dist/daemon/daemon-get-available-link-types.d.ts +6 -0
- package/dist/daemon/daemon-get-available-link-types.d.ts.map +1 -0
- package/dist/daemon/daemon-get-available-link-types.js +9 -0
- package/dist/daemon/daemon-get-available-link-types.js.map +1 -0
- package/dist/daemon/daemon-get-item.d.ts +6 -0
- package/dist/daemon/daemon-get-item.d.ts.map +1 -0
- package/dist/daemon/daemon-get-item.js +9 -0
- package/dist/daemon/daemon-get-item.js.map +1 -0
- package/dist/daemon/daemon-list-links.d.ts +6 -0
- package/dist/daemon/daemon-list-links.d.ts.map +1 -0
- package/dist/daemon/daemon-list-links.js +9 -0
- package/dist/daemon/{daemon-delete-doc.js.map → daemon-list-links.js.map} +1 -1
- package/dist/daemon/daemon-open-in-temp-workspace.d.ts +2 -2
- package/dist/daemon/daemon-open-in-temp-workspace.d.ts.map +1 -1
- package/dist/daemon/daemon-open-in-temp-workspace.js.map +1 -1
- package/dist/daemon/generated/centy/v1/centy.d.ts +1624 -0
- package/dist/daemon/generated/centy/v1/centy.d.ts.map +1 -0
- package/dist/daemon/generated/centy/v1/centy.js +86 -0
- package/dist/daemon/generated/centy/v1/centy.js.map +1 -0
- package/dist/daemon/generated/centy/v1/generic_item.d.ts +219 -0
- package/dist/daemon/generated/centy/v1/generic_item.d.ts.map +1 -0
- package/dist/daemon/generated/centy/v1/generic_item.js +19 -0
- package/dist/daemon/generated/centy/v1/generic_item.js.map +1 -0
- package/dist/daemon/grpc-client-extended.d.ts +4 -8
- package/dist/daemon/grpc-client-extended.d.ts.map +1 -1
- package/dist/daemon/grpc-client-items.d.ts +19 -0
- package/dist/daemon/grpc-client-items.d.ts.map +1 -0
- package/dist/daemon/grpc-client-items.js +2 -0
- package/dist/daemon/grpc-client-items.js.map +1 -0
- package/dist/daemon/grpc-client-link.d.ts +12 -0
- package/dist/daemon/grpc-client-link.d.ts.map +1 -0
- package/dist/daemon/grpc-client-link.js +2 -0
- package/dist/daemon/grpc-client-link.js.map +1 -0
- package/dist/daemon/load-proto.d.ts +3 -1
- package/dist/daemon/load-proto.d.ts.map +1 -1
- package/dist/daemon/load-proto.js +3 -1
- package/dist/daemon/load-proto.js.map +1 -1
- package/dist/daemon/types/feature.d.ts +1 -1
- package/dist/daemon/types/feature.d.ts.map +1 -1
- package/dist/daemon/types.d.ts +4 -20
- package/dist/daemon/types.d.ts.map +1 -1
- package/dist/daemon/types.js +4 -20
- package/dist/daemon/types.js.map +1 -1
- package/dist/hooks/prerun.d.ts.map +1 -1
- package/dist/hooks/prerun.js +6 -5
- package/dist/hooks/prerun.js.map +1 -1
- package/dist/lib/close/close-issue.d.ts.map +1 -1
- package/dist/lib/close/close-issue.js +4 -0
- package/dist/lib/close/close-issue.js.map +1 -1
- package/dist/lib/compact/compact-parse-error.d.ts +1 -1
- package/dist/lib/compact/compact-parse-error.d.ts.map +1 -1
- package/dist/lib/compact/compact-parse-error.js +2 -2
- package/dist/lib/compact/compact-parse-error.js.map +1 -1
- package/dist/lib/compact/mark-issues.d.ts.map +1 -1
- package/dist/lib/compact/mark-issues.js +2 -1
- package/dist/lib/compact/mark-issues.js.map +1 -1
- package/dist/lib/compact/parse-llm-response.d.ts.map +1 -1
- package/dist/lib/compact/parse-llm-response.js +1 -1
- package/dist/lib/compact/parse-llm-response.js.map +1 -1
- package/dist/lib/compact/save-results.d.ts.map +1 -1
- package/dist/lib/compact/save-results.js +6 -3
- package/dist/lib/compact/save-results.js.map +1 -1
- package/dist/lib/create-issue/create-issue.d.ts.map +1 -1
- package/dist/lib/create-issue/create-issue.js +3 -0
- package/dist/lib/create-issue/create-issue.js.map +1 -1
- package/dist/lib/create-item-type/features.d.ts +18 -0
- package/dist/lib/create-item-type/features.d.ts.map +1 -0
- package/dist/lib/create-item-type/features.js +58 -0
- package/dist/lib/create-item-type/features.js.map +1 -0
- package/dist/lib/get-doc/handle-global-search.d.ts.map +1 -1
- package/dist/lib/get-doc/handle-global-search.js +6 -5
- package/dist/lib/get-doc/handle-global-search.js.map +1 -1
- package/dist/lib/get-issue/handle-global-search.d.ts.map +1 -1
- package/dist/lib/get-issue/handle-global-search.js +6 -5
- package/dist/lib/get-issue/handle-global-search.js.map +1 -1
- package/dist/lib/get-item/format-generic-item.d.ts +6 -0
- package/dist/lib/get-item/format-generic-item.d.ts.map +1 -0
- package/dist/lib/get-item/format-generic-item.js +35 -0
- package/dist/lib/get-item/format-generic-item.js.map +1 -0
- package/dist/lib/get-item/handle-global-get.d.ts +2 -0
- package/dist/lib/get-item/handle-global-get.d.ts.map +1 -0
- package/dist/lib/get-item/handle-global-get.js +18 -0
- package/dist/lib/get-item/handle-global-get.js.map +1 -0
- package/dist/lib/init/config-builder.d.ts.map +1 -1
- package/dist/lib/init/config-builder.js +0 -2
- package/dist/lib/init/config-builder.js.map +1 -1
- package/dist/lib/show/format-results.js.map +1 -1
- package/dist/lib/start/handle-missing-daemon.d.ts.map +1 -1
- package/dist/lib/start/handle-missing-daemon.js +2 -1
- package/dist/lib/start/handle-missing-daemon.js.map +1 -1
- package/dist/lib/start/start-foreground.d.ts.map +1 -1
- package/dist/lib/start/start-foreground.js +6 -3
- package/dist/lib/start/start-foreground.js.map +1 -1
- package/dist/types/create-issue-options.d.ts +2 -0
- package/dist/types/create-issue-options.d.ts.map +1 -1
- package/dist/types/init-options.d.ts +0 -2
- package/dist/types/init-options.d.ts.map +1 -1
- package/dist/utils/parse-link-target.d.ts +5 -0
- package/dist/utils/parse-link-target.d.ts.map +1 -0
- package/dist/utils/parse-link-target.js +16 -0
- package/dist/utils/parse-link-target.js.map +1 -0
- package/dist/utils/resolve-project-path.d.ts.map +1 -1
- package/dist/utils/resolve-project-path.js +4 -0
- package/dist/utils/resolve-project-path.js.map +1 -1
- package/oclif.manifest.json +747 -483
- package/package.json +6 -4
- package/proto/{centy.proto → centy/v1/centy.proto} +44 -15
- package/proto/centy/v1/generic_item.proto +177 -0
- package/dist/commands/get/doc.d.ts.map +0 -1
- package/dist/commands/get/doc.js +0 -99
- package/dist/commands/get/doc.js.map +0 -1
- package/dist/commands/get/issue.d.ts.map +0 -1
- package/dist/commands/get/issue.js +0 -87
- package/dist/commands/get/issue.js.map +0 -1
- package/dist/commands/get/user.d.ts.map +0 -1
- package/dist/commands/get/user.js +0 -75
- package/dist/commands/get/user.js.map +0 -1
- package/dist/daemon/daemon-delete-doc.d.ts +0 -6
- package/dist/daemon/daemon-delete-doc.d.ts.map +0 -1
- package/dist/daemon/daemon-delete-doc.js +0 -9
- package/dist/daemon/daemon-delete-issue.d.ts +0 -6
- package/dist/daemon/daemon-delete-issue.d.ts.map +0 -1
- package/dist/daemon/daemon-delete-issue.js +0 -9
- package/dist/daemon/daemon-delete-issue.js.map +0 -1
- package/dist/daemon/daemon-delete-user.d.ts +0 -6
- package/dist/daemon/daemon-delete-user.d.ts.map +0 -1
- package/dist/daemon/daemon-delete-user.js +0 -9
- package/dist/daemon/types/asset.d.ts +0 -64
- package/dist/daemon/types/asset.d.ts.map +0 -1
- package/dist/daemon/types/asset.js +0 -6
- package/dist/daemon/types/asset.js.map +0 -1
- package/dist/daemon/types/config.d.ts +0 -57
- package/dist/daemon/types/config.d.ts.map +0 -1
- package/dist/daemon/types/config.js +0 -6
- package/dist/daemon/types/config.js.map +0 -1
- package/dist/daemon/types/daemon.d.ts +0 -25
- package/dist/daemon/types/daemon.d.ts.map +0 -1
- package/dist/daemon/types/daemon.js +0 -6
- package/dist/daemon/types/daemon.js.map +0 -1
- package/dist/daemon/types/doc-lifecycle.d.ts +0 -55
- package/dist/daemon/types/doc-lifecycle.d.ts.map +0 -1
- package/dist/daemon/types/doc-lifecycle.js +0 -7
- package/dist/daemon/types/doc-lifecycle.js.map +0 -1
- package/dist/daemon/types/doc.d.ts +0 -93
- package/dist/daemon/types/doc.d.ts.map +0 -1
- package/dist/daemon/types/doc.js +0 -6
- package/dist/daemon/types/doc.js.map +0 -1
- package/dist/daemon/types/entity-action.d.ts +0 -23
- package/dist/daemon/types/entity-action.d.ts.map +0 -1
- package/dist/daemon/types/entity-action.js +0 -6
- package/dist/daemon/types/entity-action.js.map +0 -1
- package/dist/daemon/types/init.d.ts +0 -66
- package/dist/daemon/types/init.d.ts.map +0 -1
- package/dist/daemon/types/init.js +0 -6
- package/dist/daemon/types/init.js.map +0 -1
- package/dist/daemon/types/issue-lifecycle.d.ts +0 -62
- package/dist/daemon/types/issue-lifecycle.d.ts.map +0 -1
- package/dist/daemon/types/issue-lifecycle.js +0 -7
- package/dist/daemon/types/issue-lifecycle.js.map +0 -1
- package/dist/daemon/types/issue-search.d.ts +0 -39
- package/dist/daemon/types/issue-search.d.ts.map +0 -1
- package/dist/daemon/types/issue-search.js +0 -6
- package/dist/daemon/types/issue-search.js.map +0 -1
- package/dist/daemon/types/issue.d.ts +0 -97
- package/dist/daemon/types/issue.d.ts.map +0 -1
- package/dist/daemon/types/issue.js +0 -6
- package/dist/daemon/types/issue.js.map +0 -1
- package/dist/daemon/types/link.d.ts +0 -58
- package/dist/daemon/types/link.d.ts.map +0 -1
- package/dist/daemon/types/link.js +0 -6
- package/dist/daemon/types/link.js.map +0 -1
- package/dist/daemon/types/organization.d.ts +0 -62
- package/dist/daemon/types/organization.d.ts.map +0 -1
- package/dist/daemon/types/organization.js +0 -6
- package/dist/daemon/types/organization.js.map +0 -1
- package/dist/daemon/types/project.d.ts +0 -101
- package/dist/daemon/types/project.d.ts.map +0 -1
- package/dist/daemon/types/project.js +0 -6
- package/dist/daemon/types/project.js.map +0 -1
- package/dist/daemon/types/sync.d.ts +0 -72
- package/dist/daemon/types/sync.d.ts.map +0 -1
- package/dist/daemon/types/sync.js +0 -6
- package/dist/daemon/types/sync.js.map +0 -1
- package/dist/daemon/types/user-lifecycle.d.ts +0 -45
- package/dist/daemon/types/user-lifecycle.d.ts.map +0 -1
- package/dist/daemon/types/user-lifecycle.js +0 -7
- package/dist/daemon/types/user-lifecycle.js.map +0 -1
- package/dist/daemon/types/user.d.ts +0 -67
- package/dist/daemon/types/user.d.ts.map +0 -1
- package/dist/daemon/types/user.js +0 -6
- package/dist/daemon/types/user.js.map +0 -1
- package/dist/daemon/types/workspace-ops.d.ts +0 -66
- package/dist/daemon/types/workspace-ops.d.ts.map +0 -1
- package/dist/daemon/types/workspace-ops.js +0 -7
- package/dist/daemon/types/workspace-ops.js.map +0 -1
- package/dist/daemon/types/workspace.d.ts +0 -70
- package/dist/daemon/types/workspace.d.ts.map +0 -1
- package/dist/daemon/types/workspace.js +0 -6
- package/dist/daemon/types/workspace.js.map +0 -1
- package/dist/lib/get-issue/fetch-and-display.d.ts +0 -12
- package/dist/lib/get-issue/fetch-and-display.d.ts.map +0 -1
- package/dist/lib/get-issue/fetch-and-display.js +0 -39
- package/dist/lib/get-issue/fetch-and-display.js.map +0 -1
|
@@ -0,0 +1,1624 @@
|
|
|
1
|
+
export declare enum FileType {
|
|
2
|
+
FILE_TYPE_UNSPECIFIED = "FILE_TYPE_UNSPECIFIED",
|
|
3
|
+
FILE_TYPE_FILE = "FILE_TYPE_FILE",
|
|
4
|
+
FILE_TYPE_DIRECTORY = "FILE_TYPE_DIRECTORY"
|
|
5
|
+
}
|
|
6
|
+
/** Action types for workspace operations */
|
|
7
|
+
export declare enum LlmAction {
|
|
8
|
+
LLM_ACTION_UNSPECIFIED = "LLM_ACTION_UNSPECIFIED",
|
|
9
|
+
LLM_ACTION_PLAN = "LLM_ACTION_PLAN",
|
|
10
|
+
LLM_ACTION_IMPLEMENT = "LLM_ACTION_IMPLEMENT",
|
|
11
|
+
LLM_ACTION_DEEPDIVE = "LLM_ACTION_DEEPDIVE"
|
|
12
|
+
}
|
|
13
|
+
/** Workspace mode for agent operations */
|
|
14
|
+
export declare enum WorkspaceMode {
|
|
15
|
+
/** WORKSPACE_MODE_UNSPECIFIED - Use project default or prompt user */
|
|
16
|
+
WORKSPACE_MODE_UNSPECIFIED = "WORKSPACE_MODE_UNSPECIFIED",
|
|
17
|
+
/** WORKSPACE_MODE_TEMP - Create temporary worktree */
|
|
18
|
+
WORKSPACE_MODE_TEMP = "WORKSPACE_MODE_TEMP",
|
|
19
|
+
/** WORKSPACE_MODE_CURRENT - Use current project directory */
|
|
20
|
+
WORKSPACE_MODE_CURRENT = "WORKSPACE_MODE_CURRENT"
|
|
21
|
+
}
|
|
22
|
+
/** Editor type for opening workspaces */
|
|
23
|
+
export declare enum EditorType {
|
|
24
|
+
EDITOR_TYPE_UNSPECIFIED = "EDITOR_TYPE_UNSPECIFIED",
|
|
25
|
+
/** EDITOR_TYPE_VSCODE - VS Code editor */
|
|
26
|
+
EDITOR_TYPE_VSCODE = "EDITOR_TYPE_VSCODE",
|
|
27
|
+
/** EDITOR_TYPE_TERMINAL - OS terminal */
|
|
28
|
+
EDITOR_TYPE_TERMINAL = "EDITOR_TYPE_TERMINAL"
|
|
29
|
+
}
|
|
30
|
+
/** Target entity type for links */
|
|
31
|
+
export declare enum LinkTargetType {
|
|
32
|
+
LINK_TARGET_TYPE_UNSPECIFIED = "LINK_TARGET_TYPE_UNSPECIFIED",
|
|
33
|
+
LINK_TARGET_TYPE_ISSUE = "LINK_TARGET_TYPE_ISSUE",
|
|
34
|
+
LINK_TARGET_TYPE_DOC = "LINK_TARGET_TYPE_DOC"
|
|
35
|
+
}
|
|
36
|
+
/** Entity type for actions */
|
|
37
|
+
export declare enum EntityType {
|
|
38
|
+
ENTITY_TYPE_UNSPECIFIED = "ENTITY_TYPE_UNSPECIFIED",
|
|
39
|
+
ENTITY_TYPE_ISSUE = "ENTITY_TYPE_ISSUE",
|
|
40
|
+
ENTITY_TYPE_DOC = "ENTITY_TYPE_DOC"
|
|
41
|
+
}
|
|
42
|
+
/** Action category for grouping in UI */
|
|
43
|
+
export declare enum ActionCategory {
|
|
44
|
+
ACTION_CATEGORY_UNSPECIFIED = "ACTION_CATEGORY_UNSPECIFIED",
|
|
45
|
+
/** ACTION_CATEGORY_CRUD - Create, Delete, Duplicate, Move */
|
|
46
|
+
ACTION_CATEGORY_CRUD = "ACTION_CATEGORY_CRUD",
|
|
47
|
+
/** ACTION_CATEGORY_MODE - Plan, Implement (LLM actions) */
|
|
48
|
+
ACTION_CATEGORY_MODE = "ACTION_CATEGORY_MODE",
|
|
49
|
+
/** ACTION_CATEGORY_STATUS - Status/state changes */
|
|
50
|
+
ACTION_CATEGORY_STATUS = "ACTION_CATEGORY_STATUS",
|
|
51
|
+
/** ACTION_CATEGORY_EXTERNAL - Open in VSCode, external tools */
|
|
52
|
+
ACTION_CATEGORY_EXTERNAL = "ACTION_CATEGORY_EXTERNAL"
|
|
53
|
+
}
|
|
54
|
+
/** Sync mode enum */
|
|
55
|
+
export declare enum SyncMode {
|
|
56
|
+
SYNC_MODE_UNSPECIFIED = "SYNC_MODE_UNSPECIFIED",
|
|
57
|
+
/** SYNC_MODE_FULL - Full sync with remote */
|
|
58
|
+
SYNC_MODE_FULL = "SYNC_MODE_FULL",
|
|
59
|
+
/** SYNC_MODE_LOCAL_ONLY - Local-only mode (no remote) */
|
|
60
|
+
SYNC_MODE_LOCAL_ONLY = "SYNC_MODE_LOCAL_ONLY",
|
|
61
|
+
/** SYNC_MODE_DISABLED - Sync disabled (not a git repo) */
|
|
62
|
+
SYNC_MODE_DISABLED = "SYNC_MODE_DISABLED"
|
|
63
|
+
}
|
|
64
|
+
/** Conflict resolution type */
|
|
65
|
+
export declare enum ConflictResolutionType {
|
|
66
|
+
CONFLICT_RESOLUTION_UNSPECIFIED = "CONFLICT_RESOLUTION_UNSPECIFIED",
|
|
67
|
+
CONFLICT_RESOLUTION_TAKE_OURS = "CONFLICT_RESOLUTION_TAKE_OURS",
|
|
68
|
+
CONFLICT_RESOLUTION_TAKE_THEIRS = "CONFLICT_RESOLUTION_TAKE_THEIRS",
|
|
69
|
+
CONFLICT_RESOLUTION_MERGE = "CONFLICT_RESOLUTION_MERGE"
|
|
70
|
+
}
|
|
71
|
+
export interface InitRequest {
|
|
72
|
+
/** The project directory path where .centy should be initialized */
|
|
73
|
+
projectPath: string;
|
|
74
|
+
/** If true, skip prompts and use defaults (create all, restore all, reset none) */
|
|
75
|
+
force: boolean;
|
|
76
|
+
/** Decisions for files that need user input (only used when force=false) */
|
|
77
|
+
decisions?: ReconciliationDecisions | undefined;
|
|
78
|
+
}
|
|
79
|
+
export interface InitResponse {
|
|
80
|
+
success: boolean;
|
|
81
|
+
error: string;
|
|
82
|
+
/** Summary of what was done */
|
|
83
|
+
created: string[];
|
|
84
|
+
restored: string[];
|
|
85
|
+
reset: string[];
|
|
86
|
+
skipped: string[];
|
|
87
|
+
/** The updated manifest */
|
|
88
|
+
manifest?: Manifest | undefined;
|
|
89
|
+
/** Organization inference result from git remote */
|
|
90
|
+
orgInference?: OrgInferenceResult | undefined;
|
|
91
|
+
}
|
|
92
|
+
export interface GetReconciliationPlanRequest {
|
|
93
|
+
projectPath: string;
|
|
94
|
+
}
|
|
95
|
+
export interface ReconciliationPlan {
|
|
96
|
+
/** Files that need to be created (not on disk, not in manifest) */
|
|
97
|
+
toCreate: FileInfo[];
|
|
98
|
+
/** Files that were deleted but exist in manifest (can be restored) */
|
|
99
|
+
toRestore: FileInfo[];
|
|
100
|
+
/** Files that were modified from original (hash mismatch) */
|
|
101
|
+
toReset: FileInfo[];
|
|
102
|
+
/** Files that are up to date */
|
|
103
|
+
upToDate: FileInfo[];
|
|
104
|
+
/** User-created files (not managed by centy) */
|
|
105
|
+
userFiles: FileInfo[];
|
|
106
|
+
/** Whether user decisions are needed */
|
|
107
|
+
needsDecisions: boolean;
|
|
108
|
+
success: boolean;
|
|
109
|
+
error: string;
|
|
110
|
+
}
|
|
111
|
+
export interface ExecuteReconciliationRequest {
|
|
112
|
+
projectPath: string;
|
|
113
|
+
decisions?: ReconciliationDecisions | undefined;
|
|
114
|
+
}
|
|
115
|
+
export interface ReconciliationDecisions {
|
|
116
|
+
/** Paths of files to restore (from to_restore list) */
|
|
117
|
+
restore: string[];
|
|
118
|
+
/** Paths of files to reset (from to_reset list) */
|
|
119
|
+
reset: string[];
|
|
120
|
+
}
|
|
121
|
+
export interface CreateIssueRequest {
|
|
122
|
+
projectPath: string;
|
|
123
|
+
title: string;
|
|
124
|
+
description: string;
|
|
125
|
+
/** 1 = highest priority, 0 = use default */
|
|
126
|
+
priority: number;
|
|
127
|
+
/** default: "open" */
|
|
128
|
+
status: string;
|
|
129
|
+
customFields: {
|
|
130
|
+
[key: string]: string;
|
|
131
|
+
};
|
|
132
|
+
/** Optional template name (without .md extension) */
|
|
133
|
+
template: string;
|
|
134
|
+
/** Create as draft (default: false) */
|
|
135
|
+
draft: boolean;
|
|
136
|
+
/** Create as organization-wide issue (syncs to all org projects) */
|
|
137
|
+
isOrgIssue: boolean;
|
|
138
|
+
}
|
|
139
|
+
export interface CreateIssueRequest_CustomFieldsEntry {
|
|
140
|
+
key: string;
|
|
141
|
+
value: string;
|
|
142
|
+
}
|
|
143
|
+
export interface CreateIssueResponse {
|
|
144
|
+
success: boolean;
|
|
145
|
+
error: string;
|
|
146
|
+
/** The created issue ID (UUID) */
|
|
147
|
+
id: string;
|
|
148
|
+
/** Human-readable display number (1, 2, 3...) */
|
|
149
|
+
displayNumber: number;
|
|
150
|
+
/** Legacy: same as id (for backward compatibility) */
|
|
151
|
+
issueNumber: string;
|
|
152
|
+
/** Paths to created files */
|
|
153
|
+
createdFiles: string[];
|
|
154
|
+
/** The updated manifest */
|
|
155
|
+
manifest?: Manifest | undefined;
|
|
156
|
+
/** Org-level display number (only for org issues, 0 if not an org issue) */
|
|
157
|
+
orgDisplayNumber: number;
|
|
158
|
+
/** Results from syncing to other org projects (org issues only) */
|
|
159
|
+
syncResults: OrgDocSyncResult[];
|
|
160
|
+
}
|
|
161
|
+
export interface GetNextIssueNumberRequest {
|
|
162
|
+
projectPath: string;
|
|
163
|
+
}
|
|
164
|
+
export interface GetNextIssueNumberResponse {
|
|
165
|
+
issueNumber: string;
|
|
166
|
+
success: boolean;
|
|
167
|
+
error: string;
|
|
168
|
+
}
|
|
169
|
+
/** Issue represents a full issue with all its data */
|
|
170
|
+
export interface Issue {
|
|
171
|
+
/** UUID-based issue ID (folder name) */
|
|
172
|
+
id: string;
|
|
173
|
+
/** Human-readable display number (1, 2, 3...) */
|
|
174
|
+
displayNumber: number;
|
|
175
|
+
/** Legacy: same as id (for backward compatibility) */
|
|
176
|
+
issueNumber: string;
|
|
177
|
+
title: string;
|
|
178
|
+
description: string;
|
|
179
|
+
metadata?: IssueMetadata | undefined;
|
|
180
|
+
}
|
|
181
|
+
export interface IssueMetadata {
|
|
182
|
+
/** Human-readable display number (1, 2, 3...) */
|
|
183
|
+
displayNumber: number;
|
|
184
|
+
/** e.g., "open", "in-progress", "closed" */
|
|
185
|
+
status: string;
|
|
186
|
+
/** 1 = highest priority, N = lowest */
|
|
187
|
+
priority: number;
|
|
188
|
+
/** ISO timestamp */
|
|
189
|
+
createdAt: string;
|
|
190
|
+
/** ISO timestamp */
|
|
191
|
+
updatedAt: string;
|
|
192
|
+
customFields: {
|
|
193
|
+
[key: string]: string;
|
|
194
|
+
};
|
|
195
|
+
/** Human-readable label (e.g., "high", "P1") */
|
|
196
|
+
priorityLabel: string;
|
|
197
|
+
/** Whether this issue is a draft */
|
|
198
|
+
draft: boolean;
|
|
199
|
+
/** ISO timestamp when soft-deleted (empty if not deleted) */
|
|
200
|
+
deletedAt: string;
|
|
201
|
+
/** Whether this is an organization-level issue */
|
|
202
|
+
isOrgIssue: boolean;
|
|
203
|
+
/** Organization slug (empty if not org issue) */
|
|
204
|
+
orgSlug: string;
|
|
205
|
+
/** Org-scoped display number (0 if not org issue) */
|
|
206
|
+
orgDisplayNumber: number;
|
|
207
|
+
}
|
|
208
|
+
export interface IssueMetadata_CustomFieldsEntry {
|
|
209
|
+
key: string;
|
|
210
|
+
value: string;
|
|
211
|
+
}
|
|
212
|
+
export interface GetIssueRequest {
|
|
213
|
+
projectPath: string;
|
|
214
|
+
/** UUID or legacy issue number (e.g., "0001") */
|
|
215
|
+
issueId: string;
|
|
216
|
+
}
|
|
217
|
+
export interface GetIssueByDisplayNumberRequest {
|
|
218
|
+
projectPath: string;
|
|
219
|
+
/** Human-readable number (1, 2, 3...) */
|
|
220
|
+
displayNumber: number;
|
|
221
|
+
}
|
|
222
|
+
/** Wrapper response for GetIssue and GetIssueByDisplayNumber RPCs */
|
|
223
|
+
export interface GetIssueResponse {
|
|
224
|
+
success: boolean;
|
|
225
|
+
error: string;
|
|
226
|
+
issue?: Issue | undefined;
|
|
227
|
+
}
|
|
228
|
+
export interface GetIssuesByUuidRequest {
|
|
229
|
+
/** The UUID to search for (must be valid UUID format) */
|
|
230
|
+
uuid: string;
|
|
231
|
+
}
|
|
232
|
+
/** An issue with its source project path */
|
|
233
|
+
export interface IssueWithProject {
|
|
234
|
+
issue?: Issue | undefined;
|
|
235
|
+
/** Absolute path to the project where this issue was found */
|
|
236
|
+
projectPath: string;
|
|
237
|
+
/** Human-readable project name (directory name) */
|
|
238
|
+
projectName: string;
|
|
239
|
+
/** Human-readable path with ~/ for home dir (use for display only) */
|
|
240
|
+
displayPath: string;
|
|
241
|
+
}
|
|
242
|
+
export interface GetIssuesByUuidResponse {
|
|
243
|
+
issues: IssueWithProject[];
|
|
244
|
+
totalCount: number;
|
|
245
|
+
/** Non-fatal errors (e.g., projects that couldn't be accessed) */
|
|
246
|
+
errors: string[];
|
|
247
|
+
success: boolean;
|
|
248
|
+
error: string;
|
|
249
|
+
}
|
|
250
|
+
export interface ListIssuesRequest {
|
|
251
|
+
projectPath: string;
|
|
252
|
+
/** Optional filters */
|
|
253
|
+
status: string;
|
|
254
|
+
/** Filter by priority (0 = all) */
|
|
255
|
+
priority: number;
|
|
256
|
+
/** Filter by draft status (absent = all, true = drafts only, false = non-drafts only) */
|
|
257
|
+
draft?: boolean | undefined;
|
|
258
|
+
/** Include soft-deleted issues (default: false) */
|
|
259
|
+
includeDeleted: boolean;
|
|
260
|
+
}
|
|
261
|
+
export interface ListIssuesResponse {
|
|
262
|
+
issues: Issue[];
|
|
263
|
+
totalCount: number;
|
|
264
|
+
success: boolean;
|
|
265
|
+
error: string;
|
|
266
|
+
}
|
|
267
|
+
/** Advanced search request */
|
|
268
|
+
export interface AdvancedSearchRequest {
|
|
269
|
+
/** Query string (e.g., "status:open AND priority:1") */
|
|
270
|
+
query: string;
|
|
271
|
+
/** Field to sort by (e.g., "createdAt", "priority") */
|
|
272
|
+
sortBy: string;
|
|
273
|
+
/** Sort order (true = descending) */
|
|
274
|
+
sortDescending: boolean;
|
|
275
|
+
/** Search across all tracked projects */
|
|
276
|
+
multiProject: boolean;
|
|
277
|
+
/** Project path (required if multi_project is false) */
|
|
278
|
+
projectPath: string;
|
|
279
|
+
}
|
|
280
|
+
/** Search result containing issue and project info */
|
|
281
|
+
export interface SearchResultIssue {
|
|
282
|
+
issue?: Issue | undefined;
|
|
283
|
+
projectPath: string;
|
|
284
|
+
projectName: string;
|
|
285
|
+
displayPath: string;
|
|
286
|
+
}
|
|
287
|
+
/** Advanced search response */
|
|
288
|
+
export interface AdvancedSearchResponse {
|
|
289
|
+
success: boolean;
|
|
290
|
+
error: string;
|
|
291
|
+
results: SearchResultIssue[];
|
|
292
|
+
totalCount: number;
|
|
293
|
+
/** Debug: the parsed query representation */
|
|
294
|
+
parsedQuery: string;
|
|
295
|
+
}
|
|
296
|
+
export interface UpdateIssueRequest {
|
|
297
|
+
projectPath: string;
|
|
298
|
+
/** UUID or legacy issue number */
|
|
299
|
+
issueId: string;
|
|
300
|
+
/** Fields to update (empty string = don't update, 0 = don't update priority) */
|
|
301
|
+
title: string;
|
|
302
|
+
description: string;
|
|
303
|
+
status: string;
|
|
304
|
+
/** 0 = don't update, otherwise 1-N */
|
|
305
|
+
priority: number;
|
|
306
|
+
customFields: {
|
|
307
|
+
[key: string]: string;
|
|
308
|
+
};
|
|
309
|
+
/** Update draft status (absent = don't update) */
|
|
310
|
+
draft?: boolean | undefined;
|
|
311
|
+
}
|
|
312
|
+
export interface UpdateIssueRequest_CustomFieldsEntry {
|
|
313
|
+
key: string;
|
|
314
|
+
value: string;
|
|
315
|
+
}
|
|
316
|
+
export interface UpdateIssueResponse {
|
|
317
|
+
success: boolean;
|
|
318
|
+
error: string;
|
|
319
|
+
/** The updated issue */
|
|
320
|
+
issue?: Issue | undefined;
|
|
321
|
+
manifest?: Manifest | undefined;
|
|
322
|
+
/** Results from syncing to other org projects (org issues only) */
|
|
323
|
+
syncResults: OrgDocSyncResult[];
|
|
324
|
+
}
|
|
325
|
+
export interface DeleteIssueRequest {
|
|
326
|
+
projectPath: string;
|
|
327
|
+
/** UUID or legacy issue number */
|
|
328
|
+
issueId: string;
|
|
329
|
+
}
|
|
330
|
+
export interface DeleteIssueResponse {
|
|
331
|
+
success: boolean;
|
|
332
|
+
error: string;
|
|
333
|
+
/** Updated manifest after deletion */
|
|
334
|
+
manifest?: Manifest | undefined;
|
|
335
|
+
}
|
|
336
|
+
/** Soft-delete an issue (set deleted_at timestamp) */
|
|
337
|
+
export interface SoftDeleteIssueRequest {
|
|
338
|
+
projectPath: string;
|
|
339
|
+
/** UUID or legacy issue number */
|
|
340
|
+
issueId: string;
|
|
341
|
+
}
|
|
342
|
+
export interface SoftDeleteIssueResponse {
|
|
343
|
+
success: boolean;
|
|
344
|
+
error: string;
|
|
345
|
+
/** The soft-deleted issue (with deleted_at set) */
|
|
346
|
+
issue?: Issue | undefined;
|
|
347
|
+
/** Updated manifest */
|
|
348
|
+
manifest?: Manifest | undefined;
|
|
349
|
+
}
|
|
350
|
+
/** Restore a soft-deleted issue (clear deleted_at timestamp) */
|
|
351
|
+
export interface RestoreIssueRequest {
|
|
352
|
+
projectPath: string;
|
|
353
|
+
/** UUID or legacy issue number */
|
|
354
|
+
issueId: string;
|
|
355
|
+
}
|
|
356
|
+
export interface RestoreIssueResponse {
|
|
357
|
+
success: boolean;
|
|
358
|
+
error: string;
|
|
359
|
+
/** The restored issue (with deleted_at cleared) */
|
|
360
|
+
issue?: Issue | undefined;
|
|
361
|
+
/** Updated manifest */
|
|
362
|
+
manifest?: Manifest | undefined;
|
|
363
|
+
}
|
|
364
|
+
export interface MoveIssueRequest {
|
|
365
|
+
/** Project containing the issue */
|
|
366
|
+
sourceProjectPath: string;
|
|
367
|
+
/** UUID of the issue to move */
|
|
368
|
+
issueId: string;
|
|
369
|
+
/** Target project path */
|
|
370
|
+
targetProjectPath: string;
|
|
371
|
+
}
|
|
372
|
+
export interface MoveIssueResponse {
|
|
373
|
+
success: boolean;
|
|
374
|
+
error: string;
|
|
375
|
+
/** The moved issue (same UUID, new display_number) */
|
|
376
|
+
issue?: Issue | undefined;
|
|
377
|
+
/** Original display number for reference */
|
|
378
|
+
oldDisplayNumber: number;
|
|
379
|
+
/** Updated source project manifest */
|
|
380
|
+
sourceManifest?: Manifest | undefined;
|
|
381
|
+
/** Updated target project manifest */
|
|
382
|
+
targetManifest?: Manifest | undefined;
|
|
383
|
+
}
|
|
384
|
+
export interface DuplicateIssueRequest {
|
|
385
|
+
/** Project containing the original issue */
|
|
386
|
+
sourceProjectPath: string;
|
|
387
|
+
/** UUID of the issue to duplicate */
|
|
388
|
+
issueId: string;
|
|
389
|
+
/** Target project (can be same as source) */
|
|
390
|
+
targetProjectPath: string;
|
|
391
|
+
/** Optional: override title (default: "Copy of {original}") */
|
|
392
|
+
newTitle: string;
|
|
393
|
+
}
|
|
394
|
+
export interface DuplicateIssueResponse {
|
|
395
|
+
success: boolean;
|
|
396
|
+
error: string;
|
|
397
|
+
/** The new duplicate issue (new UUID, new display_number) */
|
|
398
|
+
issue?: Issue | undefined;
|
|
399
|
+
/** UUID of the original issue */
|
|
400
|
+
originalIssueId: string;
|
|
401
|
+
/** Updated target project manifest */
|
|
402
|
+
manifest?: Manifest | undefined;
|
|
403
|
+
}
|
|
404
|
+
export interface GetManifestRequest {
|
|
405
|
+
projectPath: string;
|
|
406
|
+
}
|
|
407
|
+
/** Wrapper response for GetManifest RPC */
|
|
408
|
+
export interface GetManifestResponse {
|
|
409
|
+
success: boolean;
|
|
410
|
+
error: string;
|
|
411
|
+
manifest?: Manifest | undefined;
|
|
412
|
+
}
|
|
413
|
+
export interface Manifest {
|
|
414
|
+
schemaVersion: number;
|
|
415
|
+
centyVersion: string;
|
|
416
|
+
createdAt: string;
|
|
417
|
+
updatedAt: string;
|
|
418
|
+
}
|
|
419
|
+
export interface FileInfo {
|
|
420
|
+
path: string;
|
|
421
|
+
fileType: FileType;
|
|
422
|
+
hash: string;
|
|
423
|
+
/** For display purposes */
|
|
424
|
+
contentPreview: string;
|
|
425
|
+
}
|
|
426
|
+
export interface GetConfigRequest {
|
|
427
|
+
projectPath: string;
|
|
428
|
+
}
|
|
429
|
+
/** Wrapper response for GetConfig RPC */
|
|
430
|
+
export interface GetConfigResponse {
|
|
431
|
+
success: boolean;
|
|
432
|
+
error: string;
|
|
433
|
+
config?: Config | undefined;
|
|
434
|
+
}
|
|
435
|
+
export interface Config {
|
|
436
|
+
customFields: CustomFieldDefinition[];
|
|
437
|
+
defaults: {
|
|
438
|
+
[key: string]: string;
|
|
439
|
+
};
|
|
440
|
+
/** Number of priority levels (default: 3) */
|
|
441
|
+
priorityLevels: number;
|
|
442
|
+
/** Allowed status values (default: ["open", "in-progress", "closed"]) */
|
|
443
|
+
allowedStates: string[];
|
|
444
|
+
/** Project version (semver, empty = daemon default) */
|
|
445
|
+
version: string;
|
|
446
|
+
/** State name → hex color (e.g., "open" → "#10b981") */
|
|
447
|
+
stateColors: {
|
|
448
|
+
[key: string]: string;
|
|
449
|
+
};
|
|
450
|
+
/** Priority level → hex color (e.g., "1" → "#ef4444") */
|
|
451
|
+
priorityColors: {
|
|
452
|
+
[key: string]: string;
|
|
453
|
+
};
|
|
454
|
+
/** Custom link types (in addition to built-in) */
|
|
455
|
+
customLinkTypes: LinkTypeDefinition[];
|
|
456
|
+
/** Default editor ID for this project (e.g., "vscode", "terminal", "zed") */
|
|
457
|
+
defaultEditor: string;
|
|
458
|
+
/** Lifecycle hooks */
|
|
459
|
+
hooks: HookDefinition[];
|
|
460
|
+
/** Workspace settings */
|
|
461
|
+
workspace?: WorkspaceConfig | undefined;
|
|
462
|
+
}
|
|
463
|
+
export interface Config_DefaultsEntry {
|
|
464
|
+
key: string;
|
|
465
|
+
value: string;
|
|
466
|
+
}
|
|
467
|
+
export interface Config_StateColorsEntry {
|
|
468
|
+
key: string;
|
|
469
|
+
value: string;
|
|
470
|
+
}
|
|
471
|
+
export interface Config_PriorityColorsEntry {
|
|
472
|
+
key: string;
|
|
473
|
+
value: string;
|
|
474
|
+
}
|
|
475
|
+
/** Workspace configuration section */
|
|
476
|
+
export interface WorkspaceConfig {
|
|
477
|
+
/** Auto-update issue status to "in-progress" when opening a temp workspace */
|
|
478
|
+
updateStatusOnOpen?: boolean | undefined;
|
|
479
|
+
}
|
|
480
|
+
export interface CustomFieldDefinition {
|
|
481
|
+
name: string;
|
|
482
|
+
/** "string", "number", "boolean", "enum" */
|
|
483
|
+
fieldType: string;
|
|
484
|
+
required: boolean;
|
|
485
|
+
defaultValue: string;
|
|
486
|
+
/** For enum type */
|
|
487
|
+
enumValues: string[];
|
|
488
|
+
}
|
|
489
|
+
/** Lifecycle hook definition (bash scripts to run before/after operations) */
|
|
490
|
+
export interface HookDefinition {
|
|
491
|
+
/** Pattern like "pre:issue:create" or "*:*:delete" */
|
|
492
|
+
pattern: string;
|
|
493
|
+
/** Bash command to execute */
|
|
494
|
+
command: string;
|
|
495
|
+
/** If true, run in background (post-hooks only) */
|
|
496
|
+
runAsync: boolean;
|
|
497
|
+
/** Timeout in seconds (default: 30) */
|
|
498
|
+
timeout: string;
|
|
499
|
+
/** Whether hook is enabled (default: true) */
|
|
500
|
+
enabled: boolean;
|
|
501
|
+
}
|
|
502
|
+
/** Custom link type definition (for custom relationship types) */
|
|
503
|
+
export interface LinkTypeDefinition {
|
|
504
|
+
/** Link type name (e.g., "depends-on") */
|
|
505
|
+
name: string;
|
|
506
|
+
/** Inverse link type (e.g., "dependency-of") */
|
|
507
|
+
inverse: string;
|
|
508
|
+
/** Optional description */
|
|
509
|
+
description: string;
|
|
510
|
+
}
|
|
511
|
+
export interface UpdateConfigRequest {
|
|
512
|
+
projectPath: string;
|
|
513
|
+
config?: Config | undefined;
|
|
514
|
+
}
|
|
515
|
+
export interface UpdateConfigResponse {
|
|
516
|
+
success: boolean;
|
|
517
|
+
error: string;
|
|
518
|
+
/** The saved config (with any normalization applied) */
|
|
519
|
+
config?: Config | undefined;
|
|
520
|
+
}
|
|
521
|
+
export interface IsInitializedRequest {
|
|
522
|
+
projectPath: string;
|
|
523
|
+
}
|
|
524
|
+
export interface IsInitializedResponse {
|
|
525
|
+
initialized: boolean;
|
|
526
|
+
/** Full path to .centy folder if initialized */
|
|
527
|
+
centyPath: string;
|
|
528
|
+
}
|
|
529
|
+
export interface CreateDocRequest {
|
|
530
|
+
projectPath: string;
|
|
531
|
+
/** Doc title (used to generate slug) */
|
|
532
|
+
title: string;
|
|
533
|
+
/** Markdown content */
|
|
534
|
+
content: string;
|
|
535
|
+
/** Optional custom slug (auto-generated from title if empty) */
|
|
536
|
+
slug: string;
|
|
537
|
+
/** Optional template name (without .md extension) */
|
|
538
|
+
template: string;
|
|
539
|
+
/** Create as organization-wide doc (syncs to all org projects) */
|
|
540
|
+
isOrgDoc: boolean;
|
|
541
|
+
}
|
|
542
|
+
/** Result of syncing an org doc to a project */
|
|
543
|
+
export interface OrgDocSyncResult {
|
|
544
|
+
/** Path of target project */
|
|
545
|
+
projectPath: string;
|
|
546
|
+
/** Whether sync succeeded */
|
|
547
|
+
success: boolean;
|
|
548
|
+
/** Error message if failed */
|
|
549
|
+
error: string;
|
|
550
|
+
}
|
|
551
|
+
export interface CreateDocResponse {
|
|
552
|
+
success: boolean;
|
|
553
|
+
error: string;
|
|
554
|
+
/** The created doc slug */
|
|
555
|
+
slug: string;
|
|
556
|
+
/** Path to created file */
|
|
557
|
+
createdFile: string;
|
|
558
|
+
manifest?: Manifest | undefined;
|
|
559
|
+
/** Results from syncing to other org projects */
|
|
560
|
+
syncResults: OrgDocSyncResult[];
|
|
561
|
+
}
|
|
562
|
+
export interface GetDocRequest {
|
|
563
|
+
projectPath: string;
|
|
564
|
+
/** e.g., "getting-started" */
|
|
565
|
+
slug: string;
|
|
566
|
+
}
|
|
567
|
+
/** Wrapper response for GetDoc RPC */
|
|
568
|
+
export interface GetDocResponse {
|
|
569
|
+
success: boolean;
|
|
570
|
+
error: string;
|
|
571
|
+
doc?: Doc | undefined;
|
|
572
|
+
}
|
|
573
|
+
export interface GetDocsBySlugRequest {
|
|
574
|
+
/** The slug to search for (kebab-case) */
|
|
575
|
+
slug: string;
|
|
576
|
+
}
|
|
577
|
+
/** A doc with its source project path */
|
|
578
|
+
export interface DocWithProject {
|
|
579
|
+
doc?: Doc | undefined;
|
|
580
|
+
/** Absolute path to the project where this doc was found */
|
|
581
|
+
projectPath: string;
|
|
582
|
+
/** Human-readable project name (directory name) */
|
|
583
|
+
projectName: string;
|
|
584
|
+
/** Human-readable path with ~/ for home dir (use for display only) */
|
|
585
|
+
displayPath: string;
|
|
586
|
+
}
|
|
587
|
+
export interface GetDocsBySlugResponse {
|
|
588
|
+
docs: DocWithProject[];
|
|
589
|
+
totalCount: number;
|
|
590
|
+
/** Non-fatal errors (e.g., projects that couldn't be accessed) */
|
|
591
|
+
errors: string[];
|
|
592
|
+
success: boolean;
|
|
593
|
+
error: string;
|
|
594
|
+
}
|
|
595
|
+
export interface ListDocsRequest {
|
|
596
|
+
projectPath: string;
|
|
597
|
+
/** Include soft-deleted docs (default: false) */
|
|
598
|
+
includeDeleted: boolean;
|
|
599
|
+
}
|
|
600
|
+
export interface ListDocsResponse {
|
|
601
|
+
docs: Doc[];
|
|
602
|
+
totalCount: number;
|
|
603
|
+
success: boolean;
|
|
604
|
+
error: string;
|
|
605
|
+
}
|
|
606
|
+
/** Doc represents a documentation file */
|
|
607
|
+
export interface Doc {
|
|
608
|
+
/** e.g., "getting-started" */
|
|
609
|
+
slug: string;
|
|
610
|
+
title: string;
|
|
611
|
+
/** Full markdown content */
|
|
612
|
+
content: string;
|
|
613
|
+
metadata?: DocMetadata | undefined;
|
|
614
|
+
}
|
|
615
|
+
export interface DocMetadata {
|
|
616
|
+
/** ISO timestamp */
|
|
617
|
+
createdAt: string;
|
|
618
|
+
/** ISO timestamp */
|
|
619
|
+
updatedAt: string;
|
|
620
|
+
/** ISO timestamp when soft-deleted (empty if not deleted) */
|
|
621
|
+
deletedAt: string;
|
|
622
|
+
/** Whether this is an organization-level doc */
|
|
623
|
+
isOrgDoc: boolean;
|
|
624
|
+
/** Organization slug (for org docs) */
|
|
625
|
+
orgSlug: string;
|
|
626
|
+
}
|
|
627
|
+
export interface UpdateDocRequest {
|
|
628
|
+
projectPath: string;
|
|
629
|
+
slug: string;
|
|
630
|
+
/** Fields to update (empty string = don't update) */
|
|
631
|
+
title: string;
|
|
632
|
+
content: string;
|
|
633
|
+
/** Rename the doc (empty = keep current slug) */
|
|
634
|
+
newSlug: string;
|
|
635
|
+
}
|
|
636
|
+
export interface UpdateDocResponse {
|
|
637
|
+
success: boolean;
|
|
638
|
+
error: string;
|
|
639
|
+
/** The updated doc */
|
|
640
|
+
doc?: Doc | undefined;
|
|
641
|
+
manifest?: Manifest | undefined;
|
|
642
|
+
/** Results from syncing to other org projects (org docs only) */
|
|
643
|
+
syncResults: OrgDocSyncResult[];
|
|
644
|
+
}
|
|
645
|
+
export interface DeleteDocRequest {
|
|
646
|
+
projectPath: string;
|
|
647
|
+
slug: string;
|
|
648
|
+
}
|
|
649
|
+
export interface DeleteDocResponse {
|
|
650
|
+
success: boolean;
|
|
651
|
+
error: string;
|
|
652
|
+
manifest?: Manifest | undefined;
|
|
653
|
+
}
|
|
654
|
+
/** Soft-delete a doc (set deleted_at timestamp) */
|
|
655
|
+
export interface SoftDeleteDocRequest {
|
|
656
|
+
projectPath: string;
|
|
657
|
+
slug: string;
|
|
658
|
+
}
|
|
659
|
+
export interface SoftDeleteDocResponse {
|
|
660
|
+
success: boolean;
|
|
661
|
+
error: string;
|
|
662
|
+
/** The soft-deleted doc (with deleted_at set) */
|
|
663
|
+
doc?: Doc | undefined;
|
|
664
|
+
manifest?: Manifest | undefined;
|
|
665
|
+
}
|
|
666
|
+
/** Restore a soft-deleted doc (clear deleted_at timestamp) */
|
|
667
|
+
export interface RestoreDocRequest {
|
|
668
|
+
projectPath: string;
|
|
669
|
+
slug: string;
|
|
670
|
+
}
|
|
671
|
+
export interface RestoreDocResponse {
|
|
672
|
+
success: boolean;
|
|
673
|
+
error: string;
|
|
674
|
+
/** The restored doc (with deleted_at cleared) */
|
|
675
|
+
doc?: Doc | undefined;
|
|
676
|
+
manifest?: Manifest | undefined;
|
|
677
|
+
}
|
|
678
|
+
export interface MoveDocRequest {
|
|
679
|
+
/** Project containing the doc */
|
|
680
|
+
sourceProjectPath: string;
|
|
681
|
+
/** Slug of the doc to move */
|
|
682
|
+
slug: string;
|
|
683
|
+
/** Target project path */
|
|
684
|
+
targetProjectPath: string;
|
|
685
|
+
/** Optional: new slug if conflict exists */
|
|
686
|
+
newSlug: string;
|
|
687
|
+
}
|
|
688
|
+
export interface MoveDocResponse {
|
|
689
|
+
success: boolean;
|
|
690
|
+
error: string;
|
|
691
|
+
/** The moved doc */
|
|
692
|
+
doc?: Doc | undefined;
|
|
693
|
+
/** Original slug for reference */
|
|
694
|
+
oldSlug: string;
|
|
695
|
+
/** Updated source project manifest */
|
|
696
|
+
sourceManifest?: Manifest | undefined;
|
|
697
|
+
/** Updated target project manifest */
|
|
698
|
+
targetManifest?: Manifest | undefined;
|
|
699
|
+
}
|
|
700
|
+
export interface DuplicateDocRequest {
|
|
701
|
+
/** Project containing the original doc */
|
|
702
|
+
sourceProjectPath: string;
|
|
703
|
+
/** Slug of the doc to duplicate */
|
|
704
|
+
slug: string;
|
|
705
|
+
/** Target project (can be same as source) */
|
|
706
|
+
targetProjectPath: string;
|
|
707
|
+
/** Optional: override slug (default: "{slug}-copy") */
|
|
708
|
+
newSlug: string;
|
|
709
|
+
/** Optional: override title (default: "Copy of {original}") */
|
|
710
|
+
newTitle: string;
|
|
711
|
+
}
|
|
712
|
+
export interface DuplicateDocResponse {
|
|
713
|
+
success: boolean;
|
|
714
|
+
error: string;
|
|
715
|
+
/** The new duplicate doc */
|
|
716
|
+
doc?: Doc | undefined;
|
|
717
|
+
/** Slug of the original doc */
|
|
718
|
+
originalSlug: string;
|
|
719
|
+
/** Updated target project manifest */
|
|
720
|
+
manifest?: Manifest | undefined;
|
|
721
|
+
}
|
|
722
|
+
/** Asset represents file metadata */
|
|
723
|
+
export interface Asset {
|
|
724
|
+
/** Original filename */
|
|
725
|
+
filename: string;
|
|
726
|
+
/** SHA-256 hash */
|
|
727
|
+
hash: string;
|
|
728
|
+
/** File size in bytes */
|
|
729
|
+
size: string;
|
|
730
|
+
/** MIME type (e.g., "image/png") */
|
|
731
|
+
mimeType: string;
|
|
732
|
+
/** Whether this is a shared asset */
|
|
733
|
+
isShared: boolean;
|
|
734
|
+
/** ISO timestamp */
|
|
735
|
+
createdAt: string;
|
|
736
|
+
}
|
|
737
|
+
export interface AddAssetRequest {
|
|
738
|
+
projectPath: string;
|
|
739
|
+
/** Issue ID (required for issue-specific assets) */
|
|
740
|
+
issueId: string;
|
|
741
|
+
/** Filename to save as */
|
|
742
|
+
filename: string;
|
|
743
|
+
/** Binary file data */
|
|
744
|
+
data: Buffer;
|
|
745
|
+
/** If true, store as shared asset (default: false) */
|
|
746
|
+
isShared: boolean;
|
|
747
|
+
}
|
|
748
|
+
export interface AddAssetResponse {
|
|
749
|
+
success: boolean;
|
|
750
|
+
error: string;
|
|
751
|
+
/** The created asset info */
|
|
752
|
+
asset?: Asset | undefined;
|
|
753
|
+
/** Full path to the asset file */
|
|
754
|
+
path: string;
|
|
755
|
+
manifest?: Manifest | undefined;
|
|
756
|
+
}
|
|
757
|
+
export interface ListAssetsRequest {
|
|
758
|
+
projectPath: string;
|
|
759
|
+
/** Issue ID to list assets for */
|
|
760
|
+
issueId: string;
|
|
761
|
+
/** Include shared assets in result (default: false) */
|
|
762
|
+
includeShared: boolean;
|
|
763
|
+
}
|
|
764
|
+
export interface ListAssetsResponse {
|
|
765
|
+
assets: Asset[];
|
|
766
|
+
totalCount: number;
|
|
767
|
+
success: boolean;
|
|
768
|
+
error: string;
|
|
769
|
+
}
|
|
770
|
+
export interface GetAssetRequest {
|
|
771
|
+
projectPath: string;
|
|
772
|
+
/** Issue ID (required for issue-specific assets) */
|
|
773
|
+
issueId: string;
|
|
774
|
+
/** Asset filename */
|
|
775
|
+
filename: string;
|
|
776
|
+
/** Whether to look for a shared asset */
|
|
777
|
+
isShared: boolean;
|
|
778
|
+
}
|
|
779
|
+
export interface GetAssetResponse {
|
|
780
|
+
success: boolean;
|
|
781
|
+
error: string;
|
|
782
|
+
/** Binary file data */
|
|
783
|
+
data: Buffer;
|
|
784
|
+
/** Asset metadata */
|
|
785
|
+
asset?: Asset | undefined;
|
|
786
|
+
}
|
|
787
|
+
export interface DeleteAssetRequest {
|
|
788
|
+
projectPath: string;
|
|
789
|
+
/** Issue ID (required for issue-specific assets) */
|
|
790
|
+
issueId: string;
|
|
791
|
+
/** Asset filename */
|
|
792
|
+
filename: string;
|
|
793
|
+
/** Whether to delete a shared asset */
|
|
794
|
+
isShared: boolean;
|
|
795
|
+
}
|
|
796
|
+
export interface DeleteAssetResponse {
|
|
797
|
+
success: boolean;
|
|
798
|
+
error: string;
|
|
799
|
+
/** Deleted filename */
|
|
800
|
+
filename: string;
|
|
801
|
+
/** Whether it was a shared asset */
|
|
802
|
+
wasShared: boolean;
|
|
803
|
+
manifest?: Manifest | undefined;
|
|
804
|
+
}
|
|
805
|
+
export interface ListSharedAssetsRequest {
|
|
806
|
+
projectPath: string;
|
|
807
|
+
}
|
|
808
|
+
/** Returned by API (enriched with live data from disk) */
|
|
809
|
+
export interface ProjectInfo {
|
|
810
|
+
/** Absolute path to project (use this for API calls) */
|
|
811
|
+
path: string;
|
|
812
|
+
/** ISO timestamp */
|
|
813
|
+
firstAccessed: string;
|
|
814
|
+
/** ISO timestamp */
|
|
815
|
+
lastAccessed: string;
|
|
816
|
+
/** Fetched live from .centy/issues/ */
|
|
817
|
+
issueCount: number;
|
|
818
|
+
/** Fetched live from .centy/docs/ */
|
|
819
|
+
docCount: number;
|
|
820
|
+
/** Fetched live (manifest exists) */
|
|
821
|
+
initialized: boolean;
|
|
822
|
+
/** Fetched live (directory name) */
|
|
823
|
+
name: string;
|
|
824
|
+
/** User-marked favorite status */
|
|
825
|
+
isFavorite: boolean;
|
|
826
|
+
/** User-marked archived status */
|
|
827
|
+
isArchived: boolean;
|
|
828
|
+
/** Human-readable path with ~/ for home dir (use for display only) */
|
|
829
|
+
displayPath: string;
|
|
830
|
+
/** Organization slug (empty if ungrouped) */
|
|
831
|
+
organizationSlug: string;
|
|
832
|
+
/** Organization display name (for convenience) */
|
|
833
|
+
organizationName: string;
|
|
834
|
+
/** User-scope custom title (from ~/.centy/projects.json) */
|
|
835
|
+
userTitle: string;
|
|
836
|
+
/** Project-scope custom title (from .centy/project.json) */
|
|
837
|
+
projectTitle: string;
|
|
838
|
+
}
|
|
839
|
+
export interface ListProjectsRequest {
|
|
840
|
+
/** Include projects where path no longer exists */
|
|
841
|
+
includeStale: boolean;
|
|
842
|
+
/** Include projects without .centy manifest */
|
|
843
|
+
includeUninitialized: boolean;
|
|
844
|
+
/** Include archived projects (default: false) */
|
|
845
|
+
includeArchived: boolean;
|
|
846
|
+
/** Filter by organization (empty = all) */
|
|
847
|
+
organizationSlug: string;
|
|
848
|
+
/** Only show projects without organization */
|
|
849
|
+
ungroupedOnly: boolean;
|
|
850
|
+
/** Include projects in system temp directory (default: false) */
|
|
851
|
+
includeTemp: boolean;
|
|
852
|
+
}
|
|
853
|
+
export interface ListProjectsResponse {
|
|
854
|
+
projects: ProjectInfo[];
|
|
855
|
+
totalCount: number;
|
|
856
|
+
success: boolean;
|
|
857
|
+
error: string;
|
|
858
|
+
}
|
|
859
|
+
export interface RegisterProjectRequest {
|
|
860
|
+
/** Path to register */
|
|
861
|
+
projectPath: string;
|
|
862
|
+
}
|
|
863
|
+
export interface RegisterProjectResponse {
|
|
864
|
+
success: boolean;
|
|
865
|
+
error: string;
|
|
866
|
+
/** The registered project info */
|
|
867
|
+
project?: ProjectInfo | undefined;
|
|
868
|
+
/** Organization inference result from git remote */
|
|
869
|
+
orgInference?: OrgInferenceResult | undefined;
|
|
870
|
+
}
|
|
871
|
+
export interface UntrackProjectRequest {
|
|
872
|
+
projectPath: string;
|
|
873
|
+
}
|
|
874
|
+
export interface UntrackProjectResponse {
|
|
875
|
+
success: boolean;
|
|
876
|
+
error: string;
|
|
877
|
+
}
|
|
878
|
+
export interface GetProjectInfoRequest {
|
|
879
|
+
projectPath: string;
|
|
880
|
+
}
|
|
881
|
+
export interface GetProjectInfoResponse {
|
|
882
|
+
found: boolean;
|
|
883
|
+
project?: ProjectInfo | undefined;
|
|
884
|
+
success: boolean;
|
|
885
|
+
error: string;
|
|
886
|
+
}
|
|
887
|
+
export interface SetProjectFavoriteRequest {
|
|
888
|
+
projectPath: string;
|
|
889
|
+
isFavorite: boolean;
|
|
890
|
+
}
|
|
891
|
+
export interface SetProjectFavoriteResponse {
|
|
892
|
+
success: boolean;
|
|
893
|
+
error: string;
|
|
894
|
+
/** The updated project info */
|
|
895
|
+
project?: ProjectInfo | undefined;
|
|
896
|
+
}
|
|
897
|
+
export interface SetProjectArchivedRequest {
|
|
898
|
+
projectPath: string;
|
|
899
|
+
isArchived: boolean;
|
|
900
|
+
}
|
|
901
|
+
export interface SetProjectArchivedResponse {
|
|
902
|
+
success: boolean;
|
|
903
|
+
error: string;
|
|
904
|
+
/** The updated project info */
|
|
905
|
+
project?: ProjectInfo | undefined;
|
|
906
|
+
}
|
|
907
|
+
export interface SetProjectOrganizationRequest {
|
|
908
|
+
projectPath: string;
|
|
909
|
+
/** Empty to remove from organization */
|
|
910
|
+
organizationSlug: string;
|
|
911
|
+
}
|
|
912
|
+
export interface SetProjectOrganizationResponse {
|
|
913
|
+
success: boolean;
|
|
914
|
+
error: string;
|
|
915
|
+
/** The updated project info */
|
|
916
|
+
project?: ProjectInfo | undefined;
|
|
917
|
+
}
|
|
918
|
+
export interface SetProjectUserTitleRequest {
|
|
919
|
+
projectPath: string;
|
|
920
|
+
/** Custom title (empty to clear) */
|
|
921
|
+
title: string;
|
|
922
|
+
}
|
|
923
|
+
export interface SetProjectUserTitleResponse {
|
|
924
|
+
success: boolean;
|
|
925
|
+
error: string;
|
|
926
|
+
/** The updated project info */
|
|
927
|
+
project?: ProjectInfo | undefined;
|
|
928
|
+
}
|
|
929
|
+
export interface SetProjectTitleRequest {
|
|
930
|
+
projectPath: string;
|
|
931
|
+
/** Custom title (empty to clear) */
|
|
932
|
+
title: string;
|
|
933
|
+
}
|
|
934
|
+
export interface SetProjectTitleResponse {
|
|
935
|
+
success: boolean;
|
|
936
|
+
error: string;
|
|
937
|
+
/** The updated project info */
|
|
938
|
+
project?: ProjectInfo | undefined;
|
|
939
|
+
}
|
|
940
|
+
export interface Organization {
|
|
941
|
+
/** Unique identifier (kebab-case) */
|
|
942
|
+
slug: string;
|
|
943
|
+
/** Display name */
|
|
944
|
+
name: string;
|
|
945
|
+
/** Optional description */
|
|
946
|
+
description: string;
|
|
947
|
+
/** ISO timestamp */
|
|
948
|
+
createdAt: string;
|
|
949
|
+
/** ISO timestamp */
|
|
950
|
+
updatedAt: string;
|
|
951
|
+
/** Number of projects in this org */
|
|
952
|
+
projectCount: number;
|
|
953
|
+
}
|
|
954
|
+
/** Organization inference result from git remote */
|
|
955
|
+
export interface OrgInferenceResult {
|
|
956
|
+
/** The inferred slug (empty if not found) */
|
|
957
|
+
inferredOrgSlug: string;
|
|
958
|
+
/** The inferred display name */
|
|
959
|
+
inferredOrgName: string;
|
|
960
|
+
/** Whether a new org was created */
|
|
961
|
+
orgCreated: boolean;
|
|
962
|
+
/** Existing org if already assigned */
|
|
963
|
+
existingOrgSlug: string;
|
|
964
|
+
/** True if inferred != existing */
|
|
965
|
+
hasMismatch: boolean;
|
|
966
|
+
/** Human-readable status message */
|
|
967
|
+
message: string;
|
|
968
|
+
}
|
|
969
|
+
export interface CreateOrganizationRequest {
|
|
970
|
+
/** Unique slug (auto-generated from name if empty) */
|
|
971
|
+
slug: string;
|
|
972
|
+
/** Display name (required) */
|
|
973
|
+
name: string;
|
|
974
|
+
/** Optional description */
|
|
975
|
+
description: string;
|
|
976
|
+
}
|
|
977
|
+
export interface CreateOrganizationResponse {
|
|
978
|
+
success: boolean;
|
|
979
|
+
error: string;
|
|
980
|
+
organization?: Organization | undefined;
|
|
981
|
+
}
|
|
982
|
+
export interface ListOrganizationsRequest {
|
|
983
|
+
}
|
|
984
|
+
export interface ListOrganizationsResponse {
|
|
985
|
+
organizations: Organization[];
|
|
986
|
+
totalCount: number;
|
|
987
|
+
success: boolean;
|
|
988
|
+
error: string;
|
|
989
|
+
}
|
|
990
|
+
export interface GetOrganizationRequest {
|
|
991
|
+
slug: string;
|
|
992
|
+
}
|
|
993
|
+
export interface GetOrganizationResponse {
|
|
994
|
+
found: boolean;
|
|
995
|
+
organization?: Organization | undefined;
|
|
996
|
+
success: boolean;
|
|
997
|
+
error: string;
|
|
998
|
+
}
|
|
999
|
+
export interface UpdateOrganizationRequest {
|
|
1000
|
+
/** Current slug */
|
|
1001
|
+
slug: string;
|
|
1002
|
+
/** New name (empty = don't change) */
|
|
1003
|
+
name: string;
|
|
1004
|
+
/** New description (empty = don't change) */
|
|
1005
|
+
description: string;
|
|
1006
|
+
/** Rename slug (empty = keep current) */
|
|
1007
|
+
newSlug: string;
|
|
1008
|
+
}
|
|
1009
|
+
export interface UpdateOrganizationResponse {
|
|
1010
|
+
success: boolean;
|
|
1011
|
+
error: string;
|
|
1012
|
+
organization?: Organization | undefined;
|
|
1013
|
+
}
|
|
1014
|
+
export interface DeleteOrganizationRequest {
|
|
1015
|
+
slug: string;
|
|
1016
|
+
}
|
|
1017
|
+
export interface DeleteOrganizationResponse {
|
|
1018
|
+
success: boolean;
|
|
1019
|
+
error: string;
|
|
1020
|
+
/** Projects that are now ungrouped (should be 0 if block deletion) */
|
|
1021
|
+
unassignedProjects: number;
|
|
1022
|
+
}
|
|
1023
|
+
export interface GetDaemonInfoRequest {
|
|
1024
|
+
}
|
|
1025
|
+
export interface DaemonInfo {
|
|
1026
|
+
/** Current daemon version (e.g., "0.1.0") */
|
|
1027
|
+
version: string;
|
|
1028
|
+
/** Absolute path to the running daemon binary */
|
|
1029
|
+
binaryPath: string;
|
|
1030
|
+
/** Whether VS Code is installed and accessible */
|
|
1031
|
+
vscodeAvailable: boolean;
|
|
1032
|
+
}
|
|
1033
|
+
export interface ShutdownRequest {
|
|
1034
|
+
/** Optional delay in seconds before shutdown (default: 0) */
|
|
1035
|
+
delaySeconds: number;
|
|
1036
|
+
}
|
|
1037
|
+
export interface ShutdownResponse {
|
|
1038
|
+
success: boolean;
|
|
1039
|
+
message: string;
|
|
1040
|
+
}
|
|
1041
|
+
export interface RestartRequest {
|
|
1042
|
+
/** Optional delay in seconds before restart (default: 0) */
|
|
1043
|
+
delaySeconds: number;
|
|
1044
|
+
}
|
|
1045
|
+
export interface RestartResponse {
|
|
1046
|
+
success: boolean;
|
|
1047
|
+
message: string;
|
|
1048
|
+
}
|
|
1049
|
+
/** Request to get supported editors (empty request) */
|
|
1050
|
+
export interface GetSupportedEditorsRequest {
|
|
1051
|
+
}
|
|
1052
|
+
/** Information about a supported editor */
|
|
1053
|
+
export interface EditorInfo {
|
|
1054
|
+
/** Editor type enum value (deprecated: use editor_id) */
|
|
1055
|
+
editorType: EditorType;
|
|
1056
|
+
/** Display name (e.g., "VS Code", "Terminal") */
|
|
1057
|
+
name: string;
|
|
1058
|
+
/** Brief description */
|
|
1059
|
+
description: string;
|
|
1060
|
+
/** Whether this editor is available on the current system */
|
|
1061
|
+
available: boolean;
|
|
1062
|
+
/** String-based editor identifier (e.g., "vscode", "terminal", "zed") */
|
|
1063
|
+
editorId: string;
|
|
1064
|
+
/** Whether this editor runs inside a terminal */
|
|
1065
|
+
terminalWrapper: boolean;
|
|
1066
|
+
}
|
|
1067
|
+
/** Response with list of supported editors */
|
|
1068
|
+
export interface GetSupportedEditorsResponse {
|
|
1069
|
+
/** List of supported editors */
|
|
1070
|
+
editors: EditorInfo[];
|
|
1071
|
+
}
|
|
1072
|
+
/** Request for unified OpenInTempWorkspace (new, configurable editor) */
|
|
1073
|
+
export interface OpenInTempWorkspaceWithEditorRequest {
|
|
1074
|
+
/** Source project path */
|
|
1075
|
+
projectPath: string;
|
|
1076
|
+
/** Issue UUID or display number */
|
|
1077
|
+
issueId: string;
|
|
1078
|
+
/** Plan or Implement */
|
|
1079
|
+
action: LlmAction;
|
|
1080
|
+
/** Agent to use (empty = default) */
|
|
1081
|
+
agentName: string;
|
|
1082
|
+
/** Custom TTL in hours (0 = use default 12h) */
|
|
1083
|
+
ttlHours: number;
|
|
1084
|
+
/** Editor ID (e.g., "vscode", "terminal", "zed"). Empty = use project/user default. */
|
|
1085
|
+
editorId: string;
|
|
1086
|
+
}
|
|
1087
|
+
/** Request for unified OpenStandaloneWorkspace (new, configurable editor) */
|
|
1088
|
+
export interface OpenStandaloneWorkspaceWithEditorRequest {
|
|
1089
|
+
/** Source project path */
|
|
1090
|
+
projectPath: string;
|
|
1091
|
+
/** Optional custom name for the workspace */
|
|
1092
|
+
name: string;
|
|
1093
|
+
/** Optional description/goals for this workspace */
|
|
1094
|
+
description: string;
|
|
1095
|
+
/** Custom TTL in hours (0 = use default 12h) */
|
|
1096
|
+
ttlHours: number;
|
|
1097
|
+
/** Agent to use (empty = default) */
|
|
1098
|
+
agentName: string;
|
|
1099
|
+
/** Editor ID (e.g., "vscode", "terminal", "zed"). Empty = use project/user default. */
|
|
1100
|
+
editorId: string;
|
|
1101
|
+
}
|
|
1102
|
+
/** Shared request for OpenInTempVscode and OpenInTempTerminal (deprecated: use OpenInTempWorkspaceWithEditorRequest) */
|
|
1103
|
+
export interface OpenInTempWorkspaceRequest {
|
|
1104
|
+
/** Source project path */
|
|
1105
|
+
projectPath: string;
|
|
1106
|
+
/** Issue UUID or display number */
|
|
1107
|
+
issueId: string;
|
|
1108
|
+
/** Plan or Implement */
|
|
1109
|
+
action: LlmAction;
|
|
1110
|
+
/** Agent to use (empty = default) */
|
|
1111
|
+
agentName: string;
|
|
1112
|
+
/** Custom TTL in hours (0 = use default 12h) */
|
|
1113
|
+
ttlHours: number;
|
|
1114
|
+
}
|
|
1115
|
+
/** Shared response for OpenInTempVscode and OpenInTempTerminal */
|
|
1116
|
+
export interface OpenInTempWorkspaceResponse {
|
|
1117
|
+
success: boolean;
|
|
1118
|
+
error: string;
|
|
1119
|
+
/** Path to the temp workspace */
|
|
1120
|
+
workspacePath: string;
|
|
1121
|
+
/** Resolved issue UUID */
|
|
1122
|
+
issueId: string;
|
|
1123
|
+
/** Issue display number */
|
|
1124
|
+
displayNumber: number;
|
|
1125
|
+
/** ISO timestamp when workspace expires */
|
|
1126
|
+
expiresAt: string;
|
|
1127
|
+
/** Whether the editor (VS Code or Terminal) was successfully opened */
|
|
1128
|
+
editorOpened: boolean;
|
|
1129
|
+
/** True if user must configure update_status_on_start setting */
|
|
1130
|
+
requiresStatusConfig: boolean;
|
|
1131
|
+
/** True if an existing workspace was reopened instead of creating new */
|
|
1132
|
+
workspaceReused: boolean;
|
|
1133
|
+
/** Original creation timestamp (only set if workspace_reused is true) */
|
|
1134
|
+
originalCreatedAt: string;
|
|
1135
|
+
}
|
|
1136
|
+
/** Request to open an agent in a terminal */
|
|
1137
|
+
export interface OpenAgentInTerminalRequest {
|
|
1138
|
+
/** Source project path */
|
|
1139
|
+
projectPath: string;
|
|
1140
|
+
/** Issue UUID or display number */
|
|
1141
|
+
issueId: string;
|
|
1142
|
+
/** Agent to use (empty = default) */
|
|
1143
|
+
agentName: string;
|
|
1144
|
+
/** Temp worktree or current project */
|
|
1145
|
+
workspaceMode: WorkspaceMode;
|
|
1146
|
+
/** Custom TTL in hours (0 = default, only for temp mode) */
|
|
1147
|
+
ttlHours: number;
|
|
1148
|
+
}
|
|
1149
|
+
export interface OpenAgentInTerminalResponse {
|
|
1150
|
+
success: boolean;
|
|
1151
|
+
error: string;
|
|
1152
|
+
/** Path where agent was launched */
|
|
1153
|
+
workingDirectory: string;
|
|
1154
|
+
/** Resolved issue UUID */
|
|
1155
|
+
issueId: string;
|
|
1156
|
+
/** Issue display number */
|
|
1157
|
+
displayNumber: number;
|
|
1158
|
+
/** The agent command that was executed */
|
|
1159
|
+
agentCommand: string;
|
|
1160
|
+
/** Whether terminal was successfully opened */
|
|
1161
|
+
terminalOpened: boolean;
|
|
1162
|
+
/** ISO timestamp (only for temp mode) */
|
|
1163
|
+
expiresAt: string;
|
|
1164
|
+
/** True if user must configure update_status_on_start setting */
|
|
1165
|
+
requiresStatusConfig: boolean;
|
|
1166
|
+
}
|
|
1167
|
+
/** Request to open a standalone workspace (not tied to an issue) */
|
|
1168
|
+
export interface OpenStandaloneWorkspaceRequest {
|
|
1169
|
+
/** Source project path */
|
|
1170
|
+
projectPath: string;
|
|
1171
|
+
/** Optional custom name for the workspace */
|
|
1172
|
+
name: string;
|
|
1173
|
+
/** Optional description/goals for this workspace */
|
|
1174
|
+
description: string;
|
|
1175
|
+
/** Custom TTL in hours (0 = use default 12h) */
|
|
1176
|
+
ttlHours: number;
|
|
1177
|
+
/** Agent to use (empty = default) */
|
|
1178
|
+
agentName: string;
|
|
1179
|
+
}
|
|
1180
|
+
/** Response for opening a standalone workspace */
|
|
1181
|
+
export interface OpenStandaloneWorkspaceResponse {
|
|
1182
|
+
success: boolean;
|
|
1183
|
+
error: string;
|
|
1184
|
+
/** Path to the temp workspace */
|
|
1185
|
+
workspacePath: string;
|
|
1186
|
+
/** Unique workspace identifier (UUID) */
|
|
1187
|
+
workspaceId: string;
|
|
1188
|
+
/** Workspace name (provided or generated) */
|
|
1189
|
+
name: string;
|
|
1190
|
+
/** ISO timestamp when workspace expires */
|
|
1191
|
+
expiresAt: string;
|
|
1192
|
+
/** Whether the editor was successfully opened */
|
|
1193
|
+
editorOpened: boolean;
|
|
1194
|
+
/** True if an existing workspace was reopened */
|
|
1195
|
+
workspaceReused: boolean;
|
|
1196
|
+
/** Original creation timestamp (only set if workspace_reused) */
|
|
1197
|
+
originalCreatedAt: string;
|
|
1198
|
+
}
|
|
1199
|
+
/** A temporary workspace entry */
|
|
1200
|
+
export interface TempWorkspace {
|
|
1201
|
+
/** Absolute path to temp workspace */
|
|
1202
|
+
workspacePath: string;
|
|
1203
|
+
/** Original project path */
|
|
1204
|
+
sourceProjectPath: string;
|
|
1205
|
+
/** Issue UUID (empty for standalone workspaces) */
|
|
1206
|
+
issueId: string;
|
|
1207
|
+
/** Issue display number (0 for standalone) */
|
|
1208
|
+
issueDisplayNumber: number;
|
|
1209
|
+
/** Issue title (empty for standalone) */
|
|
1210
|
+
issueTitle: string;
|
|
1211
|
+
/** Agent being used */
|
|
1212
|
+
agentName: string;
|
|
1213
|
+
/** Plan or Implement */
|
|
1214
|
+
action: LlmAction;
|
|
1215
|
+
/** ISO timestamp */
|
|
1216
|
+
createdAt: string;
|
|
1217
|
+
/** ISO timestamp when workspace expires */
|
|
1218
|
+
expiresAt: string;
|
|
1219
|
+
/** True if this is a standalone workspace (not tied to an issue) */
|
|
1220
|
+
isStandalone: boolean;
|
|
1221
|
+
/** Unique workspace ID (UUID, used for standalone workspaces) */
|
|
1222
|
+
workspaceId: string;
|
|
1223
|
+
/** Custom workspace name (for standalone) */
|
|
1224
|
+
workspaceName: string;
|
|
1225
|
+
/** Custom workspace description (for standalone) */
|
|
1226
|
+
workspaceDescription: string;
|
|
1227
|
+
}
|
|
1228
|
+
export interface ListTempWorkspacesRequest {
|
|
1229
|
+
/** Include expired workspaces (default: false) */
|
|
1230
|
+
includeExpired: boolean;
|
|
1231
|
+
/** Filter by source project (empty = all) */
|
|
1232
|
+
sourceProjectPath: string;
|
|
1233
|
+
}
|
|
1234
|
+
export interface ListTempWorkspacesResponse {
|
|
1235
|
+
workspaces: TempWorkspace[];
|
|
1236
|
+
totalCount: number;
|
|
1237
|
+
/** Number of expired workspaces (not included unless include_expired) */
|
|
1238
|
+
expiredCount: number;
|
|
1239
|
+
success: boolean;
|
|
1240
|
+
error: string;
|
|
1241
|
+
}
|
|
1242
|
+
export interface CloseTempWorkspaceRequest {
|
|
1243
|
+
/** Path to the workspace to close */
|
|
1244
|
+
workspacePath: string;
|
|
1245
|
+
/** Force removal even if VS Code may be open */
|
|
1246
|
+
force: boolean;
|
|
1247
|
+
}
|
|
1248
|
+
export interface CloseTempWorkspaceResponse {
|
|
1249
|
+
success: boolean;
|
|
1250
|
+
error: string;
|
|
1251
|
+
/** Whether git worktree was removed */
|
|
1252
|
+
worktreeRemoved: boolean;
|
|
1253
|
+
/** Whether directory was removed */
|
|
1254
|
+
directoryRemoved: boolean;
|
|
1255
|
+
}
|
|
1256
|
+
export interface CleanupExpiredWorkspacesRequest {
|
|
1257
|
+
}
|
|
1258
|
+
export interface CleanupExpiredWorkspacesResponse {
|
|
1259
|
+
success: boolean;
|
|
1260
|
+
error: string;
|
|
1261
|
+
/** Number of workspaces cleaned up */
|
|
1262
|
+
cleanedCount: number;
|
|
1263
|
+
/** Paths that were cleaned */
|
|
1264
|
+
cleanedPaths: string[];
|
|
1265
|
+
/** Paths that failed to clean */
|
|
1266
|
+
failedPaths: string[];
|
|
1267
|
+
}
|
|
1268
|
+
/** A link between two entities */
|
|
1269
|
+
export interface Link {
|
|
1270
|
+
/** Target entity ID (UUID for issues, slug for docs) */
|
|
1271
|
+
targetId: string;
|
|
1272
|
+
/** Type of the target entity */
|
|
1273
|
+
targetType: LinkTargetType;
|
|
1274
|
+
/** Relationship type (e.g., "blocks", "parent-of") */
|
|
1275
|
+
linkType: string;
|
|
1276
|
+
/** ISO timestamp when link was created */
|
|
1277
|
+
createdAt: string;
|
|
1278
|
+
}
|
|
1279
|
+
/** Create a link between two entities (bidirectional - also creates inverse) */
|
|
1280
|
+
export interface CreateLinkRequest {
|
|
1281
|
+
projectPath: string;
|
|
1282
|
+
/** Source entity ID */
|
|
1283
|
+
sourceId: string;
|
|
1284
|
+
/** Source entity type */
|
|
1285
|
+
sourceType: LinkTargetType;
|
|
1286
|
+
/** Target entity ID */
|
|
1287
|
+
targetId: string;
|
|
1288
|
+
/** Target entity type */
|
|
1289
|
+
targetType: LinkTargetType;
|
|
1290
|
+
/** Link type (e.g., "blocks") */
|
|
1291
|
+
linkType: string;
|
|
1292
|
+
}
|
|
1293
|
+
export interface CreateLinkResponse {
|
|
1294
|
+
success: boolean;
|
|
1295
|
+
error: string;
|
|
1296
|
+
/** The forward link that was created */
|
|
1297
|
+
createdLink?: Link | undefined;
|
|
1298
|
+
/** The inverse link that was created */
|
|
1299
|
+
inverseLink?: Link | undefined;
|
|
1300
|
+
}
|
|
1301
|
+
/** Delete a link between two entities (also deletes inverse) */
|
|
1302
|
+
export interface DeleteLinkRequest {
|
|
1303
|
+
projectPath: string;
|
|
1304
|
+
/** Source entity ID */
|
|
1305
|
+
sourceId: string;
|
|
1306
|
+
/** Source entity type */
|
|
1307
|
+
sourceType: LinkTargetType;
|
|
1308
|
+
/** Target entity ID */
|
|
1309
|
+
targetId: string;
|
|
1310
|
+
/** Target entity type */
|
|
1311
|
+
targetType: LinkTargetType;
|
|
1312
|
+
/** Optional: specific link type to delete (empty = all links between entities) */
|
|
1313
|
+
linkType: string;
|
|
1314
|
+
}
|
|
1315
|
+
export interface DeleteLinkResponse {
|
|
1316
|
+
success: boolean;
|
|
1317
|
+
error: string;
|
|
1318
|
+
/** Number of links deleted (including inverse) */
|
|
1319
|
+
deletedCount: number;
|
|
1320
|
+
}
|
|
1321
|
+
/** List all links for an entity */
|
|
1322
|
+
export interface ListLinksRequest {
|
|
1323
|
+
projectPath: string;
|
|
1324
|
+
/** Entity ID to list links for */
|
|
1325
|
+
entityId: string;
|
|
1326
|
+
/** Entity type */
|
|
1327
|
+
entityType: LinkTargetType;
|
|
1328
|
+
}
|
|
1329
|
+
export interface ListLinksResponse {
|
|
1330
|
+
links: Link[];
|
|
1331
|
+
totalCount: number;
|
|
1332
|
+
success: boolean;
|
|
1333
|
+
error: string;
|
|
1334
|
+
}
|
|
1335
|
+
/** Get all available link types (builtin + custom) */
|
|
1336
|
+
export interface GetAvailableLinkTypesRequest {
|
|
1337
|
+
projectPath: string;
|
|
1338
|
+
}
|
|
1339
|
+
/** Information about a link type */
|
|
1340
|
+
export interface LinkTypeInfo {
|
|
1341
|
+
/** Link type name (e.g., "blocks") */
|
|
1342
|
+
name: string;
|
|
1343
|
+
/** Inverse link type (e.g., "blocked-by") */
|
|
1344
|
+
inverse: string;
|
|
1345
|
+
/** Optional description */
|
|
1346
|
+
description: string;
|
|
1347
|
+
/** Whether this is a built-in type */
|
|
1348
|
+
isBuiltin: boolean;
|
|
1349
|
+
}
|
|
1350
|
+
export interface GetAvailableLinkTypesResponse {
|
|
1351
|
+
linkTypes: LinkTypeInfo[];
|
|
1352
|
+
}
|
|
1353
|
+
/** A project user/team member */
|
|
1354
|
+
export interface User {
|
|
1355
|
+
/** Unique identifier (slug format, e.g., "john-doe") */
|
|
1356
|
+
id: string;
|
|
1357
|
+
/** Display name */
|
|
1358
|
+
name: string;
|
|
1359
|
+
/** Email address (optional) */
|
|
1360
|
+
email: string;
|
|
1361
|
+
/** Git usernames (e.g., GitHub handles) */
|
|
1362
|
+
gitUsernames: string[];
|
|
1363
|
+
/** ISO timestamp */
|
|
1364
|
+
createdAt: string;
|
|
1365
|
+
/** ISO timestamp */
|
|
1366
|
+
updatedAt: string;
|
|
1367
|
+
/** ISO timestamp when soft-deleted (empty if not deleted) */
|
|
1368
|
+
deletedAt: string;
|
|
1369
|
+
}
|
|
1370
|
+
export interface CreateUserRequest {
|
|
1371
|
+
projectPath: string;
|
|
1372
|
+
/** User ID (slug format) */
|
|
1373
|
+
id: string;
|
|
1374
|
+
/** Display name (required) */
|
|
1375
|
+
name: string;
|
|
1376
|
+
/** Email address (optional) */
|
|
1377
|
+
email: string;
|
|
1378
|
+
/** Git usernames (optional) */
|
|
1379
|
+
gitUsernames: string[];
|
|
1380
|
+
}
|
|
1381
|
+
export interface CreateUserResponse {
|
|
1382
|
+
success: boolean;
|
|
1383
|
+
error: string;
|
|
1384
|
+
/** The created user */
|
|
1385
|
+
user?: User | undefined;
|
|
1386
|
+
manifest?: Manifest | undefined;
|
|
1387
|
+
}
|
|
1388
|
+
export interface GetUserRequest {
|
|
1389
|
+
projectPath: string;
|
|
1390
|
+
/** User ID (slug format) */
|
|
1391
|
+
userId: string;
|
|
1392
|
+
}
|
|
1393
|
+
/** Wrapper response for GetUser RPC */
|
|
1394
|
+
export interface GetUserResponse {
|
|
1395
|
+
success: boolean;
|
|
1396
|
+
error: string;
|
|
1397
|
+
user?: User | undefined;
|
|
1398
|
+
}
|
|
1399
|
+
export interface ListUsersRequest {
|
|
1400
|
+
projectPath: string;
|
|
1401
|
+
/** Optional: filter by git username */
|
|
1402
|
+
gitUsername: string;
|
|
1403
|
+
/** Include soft-deleted users (default: false) */
|
|
1404
|
+
includeDeleted: boolean;
|
|
1405
|
+
}
|
|
1406
|
+
export interface ListUsersResponse {
|
|
1407
|
+
users: User[];
|
|
1408
|
+
totalCount: number;
|
|
1409
|
+
success: boolean;
|
|
1410
|
+
error: string;
|
|
1411
|
+
}
|
|
1412
|
+
export interface UpdateUserRequest {
|
|
1413
|
+
projectPath: string;
|
|
1414
|
+
/** User ID (slug format) */
|
|
1415
|
+
userId: string;
|
|
1416
|
+
/** Empty = don't update */
|
|
1417
|
+
name: string;
|
|
1418
|
+
/** Empty = don't update */
|
|
1419
|
+
email: string;
|
|
1420
|
+
/** Empty array = don't update */
|
|
1421
|
+
gitUsernames: string[];
|
|
1422
|
+
}
|
|
1423
|
+
export interface UpdateUserResponse {
|
|
1424
|
+
success: boolean;
|
|
1425
|
+
error: string;
|
|
1426
|
+
/** The updated user */
|
|
1427
|
+
user?: User | undefined;
|
|
1428
|
+
manifest?: Manifest | undefined;
|
|
1429
|
+
}
|
|
1430
|
+
export interface DeleteUserRequest {
|
|
1431
|
+
projectPath: string;
|
|
1432
|
+
/** User ID (slug format) */
|
|
1433
|
+
userId: string;
|
|
1434
|
+
}
|
|
1435
|
+
export interface DeleteUserResponse {
|
|
1436
|
+
success: boolean;
|
|
1437
|
+
error: string;
|
|
1438
|
+
manifest?: Manifest | undefined;
|
|
1439
|
+
}
|
|
1440
|
+
/** Soft-delete a user (set deleted_at timestamp) */
|
|
1441
|
+
export interface SoftDeleteUserRequest {
|
|
1442
|
+
projectPath: string;
|
|
1443
|
+
/** User ID (slug format) */
|
|
1444
|
+
userId: string;
|
|
1445
|
+
}
|
|
1446
|
+
export interface SoftDeleteUserResponse {
|
|
1447
|
+
success: boolean;
|
|
1448
|
+
error: string;
|
|
1449
|
+
/** The soft-deleted user (with deleted_at set) */
|
|
1450
|
+
user?: User | undefined;
|
|
1451
|
+
manifest?: Manifest | undefined;
|
|
1452
|
+
}
|
|
1453
|
+
/** Restore a soft-deleted user (clear deleted_at timestamp) */
|
|
1454
|
+
export interface RestoreUserRequest {
|
|
1455
|
+
projectPath: string;
|
|
1456
|
+
/** User ID (slug format) */
|
|
1457
|
+
userId: string;
|
|
1458
|
+
}
|
|
1459
|
+
export interface RestoreUserResponse {
|
|
1460
|
+
success: boolean;
|
|
1461
|
+
error: string;
|
|
1462
|
+
/** The restored user (with deleted_at cleared) */
|
|
1463
|
+
user?: User | undefined;
|
|
1464
|
+
manifest?: Manifest | undefined;
|
|
1465
|
+
}
|
|
1466
|
+
/** Git contributor found in history */
|
|
1467
|
+
export interface GitContributor {
|
|
1468
|
+
name: string;
|
|
1469
|
+
email: string;
|
|
1470
|
+
}
|
|
1471
|
+
export interface SyncUsersRequest {
|
|
1472
|
+
projectPath: string;
|
|
1473
|
+
/** If true, don't create users, just show what would be created */
|
|
1474
|
+
dryRun: boolean;
|
|
1475
|
+
}
|
|
1476
|
+
export interface SyncUsersResponse {
|
|
1477
|
+
success: boolean;
|
|
1478
|
+
error: string;
|
|
1479
|
+
/** User IDs that were created */
|
|
1480
|
+
created: string[];
|
|
1481
|
+
/** Emails that were skipped (already exist) */
|
|
1482
|
+
skipped: string[];
|
|
1483
|
+
/** Errors during creation */
|
|
1484
|
+
errors: string[];
|
|
1485
|
+
/** For dry run: users that would be created */
|
|
1486
|
+
wouldCreate: GitContributor[];
|
|
1487
|
+
/** For dry run: users that would be skipped */
|
|
1488
|
+
wouldSkip: GitContributor[];
|
|
1489
|
+
manifest?: Manifest | undefined;
|
|
1490
|
+
}
|
|
1491
|
+
/** An action that can be performed on an entity */
|
|
1492
|
+
export interface EntityAction {
|
|
1493
|
+
/** Action identifier (e.g., "delete", "duplicate", "status:closed") */
|
|
1494
|
+
id: string;
|
|
1495
|
+
/** Human-readable label (e.g., "Delete", "Mark as Closed") */
|
|
1496
|
+
label: string;
|
|
1497
|
+
/** Category for grouping in UI */
|
|
1498
|
+
category: ActionCategory;
|
|
1499
|
+
/** Whether action is available for current entity state */
|
|
1500
|
+
enabled: boolean;
|
|
1501
|
+
/** Explanation if action is disabled */
|
|
1502
|
+
disabledReason: string;
|
|
1503
|
+
/** UI hint: show in red, require confirmation */
|
|
1504
|
+
destructive: boolean;
|
|
1505
|
+
/** Optional keyboard shortcut (e.g., "d" for delete) */
|
|
1506
|
+
keyboardShortcut: string;
|
|
1507
|
+
}
|
|
1508
|
+
/** Request to get available actions for an entity */
|
|
1509
|
+
export interface GetEntityActionsRequest {
|
|
1510
|
+
/** Project path for config/state lookup */
|
|
1511
|
+
projectPath: string;
|
|
1512
|
+
/** Type of entity (issue, doc) */
|
|
1513
|
+
entityType: EntityType;
|
|
1514
|
+
/** Optional: entity ID for contextual actions (empty = general actions like "create") */
|
|
1515
|
+
entityId: string;
|
|
1516
|
+
}
|
|
1517
|
+
/** Response with available actions */
|
|
1518
|
+
export interface GetEntityActionsResponse {
|
|
1519
|
+
/** Available actions, ordered by category then priority */
|
|
1520
|
+
actions: EntityAction[];
|
|
1521
|
+
success: boolean;
|
|
1522
|
+
error: string;
|
|
1523
|
+
}
|
|
1524
|
+
/** Sync conflict information */
|
|
1525
|
+
export interface SyncConflict {
|
|
1526
|
+
/** Unique conflict ID */
|
|
1527
|
+
id: string;
|
|
1528
|
+
/** Type of item (issue, doc) */
|
|
1529
|
+
itemType: string;
|
|
1530
|
+
/** ID of the item with conflict */
|
|
1531
|
+
itemId: string;
|
|
1532
|
+
/** Relative file path within .centy */
|
|
1533
|
+
filePath: string;
|
|
1534
|
+
/** When the conflict was detected */
|
|
1535
|
+
createdAt: string;
|
|
1536
|
+
/** Description of the conflict */
|
|
1537
|
+
description: string;
|
|
1538
|
+
/** Base content (common ancestor) */
|
|
1539
|
+
baseContent: string;
|
|
1540
|
+
/** Our version of the content */
|
|
1541
|
+
oursContent: string;
|
|
1542
|
+
/** Their version of the content */
|
|
1543
|
+
theirsContent: string;
|
|
1544
|
+
}
|
|
1545
|
+
/** Request to list sync conflicts */
|
|
1546
|
+
export interface ListSyncConflictsRequest {
|
|
1547
|
+
projectPath: string;
|
|
1548
|
+
}
|
|
1549
|
+
/** Response with list of sync conflicts */
|
|
1550
|
+
export interface ListSyncConflictsResponse {
|
|
1551
|
+
conflicts: SyncConflict[];
|
|
1552
|
+
success: boolean;
|
|
1553
|
+
error: string;
|
|
1554
|
+
}
|
|
1555
|
+
/** Request to get a specific sync conflict */
|
|
1556
|
+
export interface GetSyncConflictRequest {
|
|
1557
|
+
projectPath: string;
|
|
1558
|
+
conflictId: string;
|
|
1559
|
+
}
|
|
1560
|
+
/** Response with sync conflict details */
|
|
1561
|
+
export interface GetSyncConflictResponse {
|
|
1562
|
+
conflict?: SyncConflict | undefined;
|
|
1563
|
+
success: boolean;
|
|
1564
|
+
error: string;
|
|
1565
|
+
}
|
|
1566
|
+
/** Request to resolve a sync conflict */
|
|
1567
|
+
export interface ResolveSyncConflictRequest {
|
|
1568
|
+
projectPath: string;
|
|
1569
|
+
conflictId: string;
|
|
1570
|
+
resolution: ConflictResolutionType;
|
|
1571
|
+
/** Only used when resolution is MERGE */
|
|
1572
|
+
mergedContent: string;
|
|
1573
|
+
}
|
|
1574
|
+
/** Response after resolving a conflict */
|
|
1575
|
+
export interface ResolveSyncConflictResponse {
|
|
1576
|
+
success: boolean;
|
|
1577
|
+
error: string;
|
|
1578
|
+
}
|
|
1579
|
+
/** Request to get sync status */
|
|
1580
|
+
export interface GetSyncStatusRequest {
|
|
1581
|
+
projectPath: string;
|
|
1582
|
+
}
|
|
1583
|
+
/** Response with sync status */
|
|
1584
|
+
export interface GetSyncStatusResponse {
|
|
1585
|
+
/** Current sync mode */
|
|
1586
|
+
mode: SyncMode;
|
|
1587
|
+
/** Whether there are uncommitted changes */
|
|
1588
|
+
hasPendingChanges: boolean;
|
|
1589
|
+
/** Whether there are unpushed commits */
|
|
1590
|
+
hasPendingPush: boolean;
|
|
1591
|
+
/** Number of unresolved conflicts */
|
|
1592
|
+
conflictCount: number;
|
|
1593
|
+
/** Last successful sync timestamp */
|
|
1594
|
+
lastSyncTime: string;
|
|
1595
|
+
success: boolean;
|
|
1596
|
+
error: string;
|
|
1597
|
+
}
|
|
1598
|
+
/** Request to manually trigger sync pull */
|
|
1599
|
+
export interface SyncPullRequest {
|
|
1600
|
+
projectPath: string;
|
|
1601
|
+
}
|
|
1602
|
+
/** Response from sync pull */
|
|
1603
|
+
export interface SyncPullResponse {
|
|
1604
|
+
success: boolean;
|
|
1605
|
+
error: string;
|
|
1606
|
+
/** Whether any changes were pulled */
|
|
1607
|
+
hadChanges: boolean;
|
|
1608
|
+
/** Files with conflicts (if any) */
|
|
1609
|
+
conflictFiles: string[];
|
|
1610
|
+
}
|
|
1611
|
+
/** Request to manually trigger sync push */
|
|
1612
|
+
export interface SyncPushRequest {
|
|
1613
|
+
projectPath: string;
|
|
1614
|
+
/** Optional custom commit message */
|
|
1615
|
+
commitMessage: string;
|
|
1616
|
+
}
|
|
1617
|
+
/** Response from sync push */
|
|
1618
|
+
export interface SyncPushResponse {
|
|
1619
|
+
success: boolean;
|
|
1620
|
+
error: string;
|
|
1621
|
+
/** Whether any changes were pushed */
|
|
1622
|
+
hadChanges: boolean;
|
|
1623
|
+
}
|
|
1624
|
+
//# sourceMappingURL=centy.d.ts.map
|