manifest.json 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. {
  2. "id": "zoho-tasks",
  3. "name": "Zoho Tasks",
  4. "description": "Zoho Projects task management integration for EU data center",
  5. "version": "2.2.0",
  6. "author": "Ferenc Szontagh & Zoë",
  7. "sdkVersion": 1,
  8. "entry": "index.js",
  9. "runtime": "quickjs",
  10. "permissions": {
  11. "allowNetwork": true,
  12. "allowStorage": true
  13. },
  14. "config": [
  15. { "key": "client_id", "label": "Zoho OAuth Client ID", "required": true, "secret": true },
  16. { "key": "client_secret", "label": "Zoho OAuth Client Secret", "required": true, "secret": true },
  17. { "key": "portal_url", "label": "Zoho Projects Portal URL (e.g. https://projects.zoho.eu/portal/myportal)", "required": false, "secret": false }
  18. ],
  19. "tools": [
  20. {
  21. "name": "zoho_auth",
  22. "description": "Authenticate with Zoho Projects (EU). One-time setup exchanges a grant token for refresh+access tokens; status checks current token; resolve_portal picks the portal the plugin operates against.",
  23. "parameters": {
  24. "oneOf": [
  25. {
  26. "type": "object",
  27. "properties": {
  28. "action": { "const": "setup", "description": "Exchange a Zoho grant_token for refresh + access tokens. Run ONCE." },
  29. "grant_token": { "type": "string", "description": "Grant token from Zoho Developer Console (Self Client → Generate)." }
  30. },
  31. "required": ["action", "grant_token"],
  32. "additionalProperties": false
  33. },
  34. {
  35. "type": "object",
  36. "properties": {
  37. "action": { "const": "status", "description": "Check authentication status and token validity." }
  38. },
  39. "required": ["action"],
  40. "additionalProperties": false
  41. },
  42. {
  43. "type": "object",
  44. "properties": {
  45. "action": { "const": "resolve_portal", "description": "Resolve a portal URL or display name to its numeric portal_id and persist it in plugin config." },
  46. "portal_url": { "type": "string", "description": "Full portal URL or portal name slug." },
  47. "portal_name": { "type": "string", "description": "Portal display name to match." }
  48. },
  49. "required": ["action"],
  50. "additionalProperties": false
  51. }
  52. ]
  53. }
  54. },
  55. {
  56. "name": "zoho_project",
  57. "description": "Read-only project queries + reference data needed for task authoring (user zpuids, status ids).",
  58. "parameters": {
  59. "oneOf": [
  60. {
  61. "type": "object",
  62. "properties": {
  63. "action": { "const": "list", "description": "List all accessible projects in the portal." },
  64. "index": { "type": "number", "description": "Page index (default 1)." }
  65. },
  66. "required": ["action"],
  67. "additionalProperties": false
  68. },
  69. {
  70. "type": "object",
  71. "properties": {
  72. "action": { "const": "get", "description": "Get details for a single project." },
  73. "project_id": { "type": "string" }
  74. },
  75. "required": ["action", "project_id"],
  76. "additionalProperties": false
  77. },
  78. {
  79. "type": "object",
  80. "properties": {
  81. "action": { "const": "users", "description": "List portal users. Returns zpuid, name, email — resolve these before assigning a task owner." },
  82. "user_type": { "type": "string", "description": "active or inactive (optional)." },
  83. "index": { "type": "number", "description": "Page index (default 1)." }
  84. },
  85. "required": ["action"],
  86. "additionalProperties": false
  87. },
  88. {
  89. "type": "object",
  90. "properties": {
  91. "action": { "const": "statuses", "description": "List project-local task status IDs. Required input for zoho_task status_id." },
  92. "project_id": { "type": "string" }
  93. },
  94. "required": ["action", "project_id"],
  95. "additionalProperties": false
  96. }
  97. ]
  98. }
  99. },
  100. {
  101. "name": "zoho_task",
  102. "description": "Manage tasks. Resolve owner zpuid via zoho_project action=users; resolve status_id via zoho_project action=statuses.",
  103. "parameters": {
  104. "oneOf": [
  105. {
  106. "type": "object",
  107. "properties": {
  108. "action": { "const": "list", "description": "List tasks in a project with optional filters." },
  109. "project_id": { "type": "string" },
  110. "status": { "type": "string", "description": "all, completed, notcompleted (default all)." },
  111. "priority": { "type": "string", "description": "all, none, low, medium, high." },
  112. "owner": { "type": "string", "description": "all or zpuid." },
  113. "milestone_id": { "type": "string" },
  114. "tasklist_id": { "type": "string" },
  115. "index": { "type": "number", "description": "Page index (default 1)." }
  116. },
  117. "required": ["action", "project_id"],
  118. "additionalProperties": false
  119. },
  120. {
  121. "type": "object",
  122. "properties": {
  123. "action": { "const": "get", "description": "Get full details of a single task." },
  124. "project_id": { "type": "string" },
  125. "task_id": { "type": "string" }
  126. },
  127. "required": ["action", "project_id", "task_id"],
  128. "additionalProperties": false
  129. },
  130. {
  131. "type": "object",
  132. "properties": {
  133. "action": { "const": "create", "description": "Create a new task." },
  134. "project_id": { "type": "string" },
  135. "name": { "type": "string", "description": "Task name/title." },
  136. "description": { "type": "string", "description": "HTML allowed." },
  137. "person_responsible": { "type": "string", "description": "Owner zpuid(s), comma-separated." },
  138. "priority": { "type": "string", "description": "none, low, medium, high." },
  139. "start_date": { "type": "string", "description": "MM-DD-YYYY." },
  140. "end_date": { "type": "string", "description": "MM-DD-YYYY." },
  141. "tasklist_id": { "type": "string" },
  142. "milestone_id": { "type": "string" },
  143. "status_id": { "type": "string", "description": "From zoho_project action=statuses." },
  144. "parent_task_id": { "type": "string", "description": "If set, the new task becomes a subtask of this one." },
  145. "billing_type": { "type": "string", "description": "billable, non_billable." },
  146. "percent_complete": { "type": "string", "description": "0-100." }
  147. },
  148. "required": ["action", "project_id", "name"],
  149. "additionalProperties": false
  150. },
  151. {
  152. "type": "object",
  153. "properties": {
  154. "action": { "const": "update", "description": "Modify an existing task." },
  155. "project_id": { "type": "string" },
  156. "task_id": { "type": "string" },
  157. "name": { "type": "string" },
  158. "description": { "type": "string", "description": "HTML allowed." },
  159. "person_responsible": { "type": "string", "description": "Owner zpuid(s), comma-separated." },
  160. "priority": { "type": "string", "description": "none, low, medium, high." },
  161. "start_date": { "type": "string", "description": "MM-DD-YYYY." },
  162. "end_date": { "type": "string", "description": "MM-DD-YYYY." },
  163. "tasklist_id": { "type": "string" },
  164. "milestone_id": { "type": "string" },
  165. "status_id": { "type": "string" },
  166. "billing_type": { "type": "string" },
  167. "percent_complete": { "type": "string" }
  168. },
  169. "required": ["action", "project_id", "task_id"],
  170. "additionalProperties": false
  171. },
  172. {
  173. "type": "object",
  174. "properties": {
  175. "action": { "const": "delete", "description": "Delete a task." },
  176. "project_id": { "type": "string" },
  177. "task_id": { "type": "string" }
  178. },
  179. "required": ["action", "project_id", "task_id"],
  180. "additionalProperties": false
  181. },
  182. {
  183. "type": "object",
  184. "properties": {
  185. "action": { "const": "subtasks", "description": "List subtasks of a given task." },
  186. "project_id": { "type": "string" },
  187. "task_id": { "type": "string" }
  188. },
  189. "required": ["action", "project_id", "task_id"],
  190. "additionalProperties": false
  191. },
  192. {
  193. "type": "object",
  194. "properties": {
  195. "action": { "const": "my", "description": "Tasks assigned to the authenticated user across all projects." },
  196. "status": { "type": "string", "description": "all, completed, notcompleted." },
  197. "priority": { "type": "string" },
  198. "index": { "type": "number" }
  199. },
  200. "required": ["action"],
  201. "additionalProperties": false
  202. },
  203. {
  204. "type": "object",
  205. "properties": {
  206. "action": { "const": "search", "description": "Keyword search across all projects (or a single project if project_id is set)." },
  207. "query": { "type": "string" },
  208. "project_id": { "type": "string" }
  209. },
  210. "required": ["action", "query"],
  211. "additionalProperties": false
  212. }
  213. ]
  214. }
  215. },
  216. {
  217. "name": "zoho_comment",
  218. "description": "Manage task comments.",
  219. "parameters": {
  220. "oneOf": [
  221. {
  222. "type": "object",
  223. "properties": {
  224. "action": { "const": "list", "description": "List comments on a task." },
  225. "project_id": { "type": "string" },
  226. "task_id": { "type": "string" },
  227. "index": { "type": "number" }
  228. },
  229. "required": ["action", "project_id", "task_id"],
  230. "additionalProperties": false
  231. },
  232. {
  233. "type": "object",
  234. "properties": {
  235. "action": { "const": "add", "description": "Add a comment to a task." },
  236. "project_id": { "type": "string" },
  237. "task_id": { "type": "string" },
  238. "content": { "type": "string", "description": "HTML allowed." }
  239. },
  240. "required": ["action", "project_id", "task_id", "content"],
  241. "additionalProperties": false
  242. },
  243. {
  244. "type": "object",
  245. "properties": {
  246. "action": { "const": "update", "description": "Update an existing comment." },
  247. "project_id": { "type": "string" },
  248. "task_id": { "type": "string" },
  249. "comment_id": { "type": "string" },
  250. "content": { "type": "string", "description": "HTML allowed." }
  251. },
  252. "required": ["action", "project_id", "task_id", "comment_id", "content"],
  253. "additionalProperties": false
  254. },
  255. {
  256. "type": "object",
  257. "properties": {
  258. "action": { "const": "delete", "description": "Delete a comment." },
  259. "project_id": { "type": "string" },
  260. "task_id": { "type": "string" },
  261. "comment_id": { "type": "string" }
  262. },
  263. "required": ["action", "project_id", "task_id", "comment_id"],
  264. "additionalProperties": false
  265. }
  266. ]
  267. }
  268. },
  269. {
  270. "name": "zoho_milestone",
  271. "description": "Manage project milestones.",
  272. "parameters": {
  273. "oneOf": [
  274. {
  275. "type": "object",
  276. "properties": {
  277. "action": { "const": "list", "description": "List milestones in a project." },
  278. "project_id": { "type": "string" },
  279. "status": { "type": "string", "description": "internal, external, upcoming, delayed, completed, all." },
  280. "index": { "type": "number" }
  281. },
  282. "required": ["action", "project_id"],
  283. "additionalProperties": false
  284. },
  285. {
  286. "type": "object",
  287. "properties": {
  288. "action": { "const": "create", "description": "Create a new milestone." },
  289. "project_id": { "type": "string" },
  290. "name": { "type": "string" },
  291. "start_date": { "type": "string", "description": "MM-DD-YYYY." },
  292. "end_date": { "type": "string", "description": "MM-DD-YYYY." },
  293. "owner": { "type": "string", "description": "Owner zpuid." },
  294. "flag": { "type": "string", "description": "internal or external." },
  295. "milestone_type": { "type": "string", "description": "general or custom." }
  296. },
  297. "required": ["action", "project_id", "name"],
  298. "additionalProperties": false
  299. },
  300. {
  301. "type": "object",
  302. "properties": {
  303. "action": { "const": "update", "description": "Update a milestone." },
  304. "project_id": { "type": "string" },
  305. "milestone_id": { "type": "string" },
  306. "name": { "type": "string" },
  307. "start_date": { "type": "string" },
  308. "end_date": { "type": "string" },
  309. "owner": { "type": "string" },
  310. "flag": { "type": "string" },
  311. "status": { "type": "string", "description": "active, archived, completed." }
  312. },
  313. "required": ["action", "project_id", "milestone_id"],
  314. "additionalProperties": false
  315. },
  316. {
  317. "type": "object",
  318. "properties": {
  319. "action": { "const": "delete", "description": "Delete a milestone." },
  320. "project_id": { "type": "string" },
  321. "milestone_id": { "type": "string" }
  322. },
  323. "required": ["action", "project_id", "milestone_id"],
  324. "additionalProperties": false
  325. }
  326. ]
  327. }
  328. },
  329. {
  330. "name": "zoho_tasklist",
  331. "description": "Manage tasklists within a project (or list portal-wide).",
  332. "parameters": {
  333. "oneOf": [
  334. {
  335. "type": "object",
  336. "properties": {
  337. "action": { "const": "list", "description": "List tasklists in a project, or portal-wide if project_id is omitted." },
  338. "project_id": { "type": "string" },
  339. "flag": { "type": "string", "description": "internal or external." },
  340. "index": { "type": "number" }
  341. },
  342. "required": ["action"],
  343. "additionalProperties": false
  344. },
  345. {
  346. "type": "object",
  347. "properties": {
  348. "action": { "const": "get", "description": "Get details of a single tasklist." },
  349. "project_id": { "type": "string" },
  350. "tasklist_id": { "type": "string" }
  351. },
  352. "required": ["action", "project_id", "tasklist_id"],
  353. "additionalProperties": false
  354. },
  355. {
  356. "type": "object",
  357. "properties": {
  358. "action": { "const": "create", "description": "Create a new tasklist." },
  359. "project_id": { "type": "string" },
  360. "name": { "type": "string" },
  361. "milestone_id": { "type": "string" },
  362. "flag": { "type": "string", "description": "internal or external." },
  363. "status": { "type": "string", "description": "active or archived." }
  364. },
  365. "required": ["action", "project_id", "name"],
  366. "additionalProperties": false
  367. },
  368. {
  369. "type": "object",
  370. "properties": {
  371. "action": { "const": "update", "description": "Update a tasklist." },
  372. "project_id": { "type": "string" },
  373. "tasklist_id": { "type": "string" },
  374. "name": { "type": "string" },
  375. "milestone_id": { "type": "string" },
  376. "flag": { "type": "string" },
  377. "status": { "type": "string" }
  378. },
  379. "required": ["action", "project_id", "tasklist_id"],
  380. "additionalProperties": false
  381. },
  382. {
  383. "type": "object",
  384. "properties": {
  385. "action": { "const": "delete", "description": "Delete a tasklist." },
  386. "project_id": { "type": "string" },
  387. "tasklist_id": { "type": "string" }
  388. },
  389. "required": ["action", "project_id", "tasklist_id"],
  390. "additionalProperties": false
  391. }
  392. ]
  393. }
  394. },
  395. {
  396. "name": "zoho_timesheet",
  397. "description": "Manage time log entries against tasks.",
  398. "parameters": {
  399. "oneOf": [
  400. {
  401. "type": "object",
  402. "properties": {
  403. "action": { "const": "list", "description": "List timesheet entries for a project, optionally filtered by task and date range." },
  404. "project_id": { "type": "string" },
  405. "task_id": { "type": "string", "description": "Filter by task id (optional)." },
  406. "from_date": { "type": "string", "description": "MM-DD-YYYY. Default: 30 days ago." },
  407. "to_date": { "type": "string", "description": "MM-DD-YYYY. Default: today." },
  408. "index": { "type": "number", "description": "Page index (default 1)." }
  409. },
  410. "required": ["action", "project_id"],
  411. "additionalProperties": false
  412. },
  413. {
  414. "type": "object",
  415. "properties": {
  416. "action": { "const": "create", "description": "Log time against a task." },
  417. "project_id": { "type": "string" },
  418. "task_id": { "type": "string" },
  419. "hours": { "type": "number", "description": "Hours worked (decimals allowed, e.g. 1.5)." },
  420. "minutes": { "type": "number", "description": "Additional minutes (optional)." },
  421. "date": { "type": "string", "description": "MM-DD-YYYY. Default: today." },
  422. "notes": { "type": "string", "description": "Description of the work done." },
  423. "bill_status": { "type": "string", "description": "Billable or Non Billable. Default: Billable." }
  424. },
  425. "required": ["action", "project_id", "task_id", "hours"],
  426. "additionalProperties": false
  427. },
  428. {
  429. "type": "object",
  430. "properties": {
  431. "action": { "const": "update", "description": "Modify an existing time log entry." },
  432. "project_id": { "type": "string" },
  433. "log_id": { "type": "string" },
  434. "hours": { "type": "number" },
  435. "minutes": { "type": "number" },
  436. "date": { "type": "string", "description": "MM-DD-YYYY." },
  437. "notes": { "type": "string" },
  438. "log_name": { "type": "string" },
  439. "bill_status": { "type": "string" }
  440. },
  441. "required": ["action", "project_id", "log_id"],
  442. "additionalProperties": false
  443. },
  444. {
  445. "type": "object",
  446. "properties": {
  447. "action": { "const": "delete", "description": "Delete a time log entry." },
  448. "project_id": { "type": "string" },
  449. "log_id": { "type": "string" }
  450. },
  451. "required": ["action", "project_id", "log_id"],
  452. "additionalProperties": false
  453. }
  454. ]
  455. }
  456. }
  457. ],
  458. "skills": ["zoho-tasks"]
  459. }