@skrr-ai/cli 0.1.60 → 0.1.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/base-command.js +16 -0
  2. package/dist/commands/agents/create.d.ts +1 -0
  3. package/dist/commands/agents/create.js +8 -1
  4. package/dist/commands/agents/delete.d.ts +14 -0
  5. package/dist/commands/agents/delete.js +52 -4
  6. package/dist/commands/agents/eval/index.d.ts +38 -0
  7. package/dist/commands/agents/eval/index.js +157 -0
  8. package/dist/commands/agents/eval/list.d.ts +13 -0
  9. package/dist/commands/agents/eval/list.js +53 -0
  10. package/dist/commands/agents/eval/show.d.ts +13 -0
  11. package/dist/commands/agents/eval/show.js +36 -0
  12. package/dist/commands/agents/import.d.ts +37 -0
  13. package/dist/commands/agents/import.js +233 -0
  14. package/dist/commands/agents/pull.d.ts +27 -0
  15. package/dist/commands/agents/pull.js +82 -0
  16. package/dist/commands/agents/push.d.ts +28 -0
  17. package/dist/commands/agents/push.js +112 -0
  18. package/dist/commands/agents/releases/ci-publish.d.ts +32 -0
  19. package/dist/commands/agents/releases/ci-publish.js +99 -0
  20. package/dist/commands/agents/releases/create.d.ts +3 -0
  21. package/dist/commands/agents/releases/create.js +27 -6
  22. package/dist/commands/agents/releases/known-issues/add.d.ts +19 -0
  23. package/dist/commands/agents/releases/known-issues/add.js +43 -0
  24. package/dist/commands/agents/releases/known-issues/list.d.ts +17 -0
  25. package/dist/commands/agents/releases/known-issues/list.js +55 -0
  26. package/dist/commands/agents/releases/known-issues/update.d.ts +18 -0
  27. package/dist/commands/agents/releases/known-issues/update.js +47 -0
  28. package/dist/commands/agents/releases/list.js +25 -3
  29. package/dist/commands/agents/releases/rollback.js +12 -4
  30. package/dist/commands/agents/releases/test-install.d.ts +22 -0
  31. package/dist/commands/agents/releases/test-install.js +70 -0
  32. package/dist/commands/agents/releases/trusted-publishers/list.d.ts +17 -0
  33. package/dist/commands/agents/releases/trusted-publishers/list.js +55 -0
  34. package/dist/commands/agents/releases/trusted-publishers/remove.d.ts +17 -0
  35. package/dist/commands/agents/releases/trusted-publishers/remove.js +45 -0
  36. package/dist/commands/agents/releases/trusted-publishers/set.d.ts +27 -0
  37. package/dist/commands/agents/releases/trusted-publishers/set.js +82 -0
  38. package/dist/commands/agents/update.d.ts +1 -0
  39. package/dist/commands/agents/update.js +8 -1
  40. package/dist/commands/agents/usage-cap.d.ts +20 -0
  41. package/dist/commands/agents/usage-cap.js +76 -0
  42. package/dist/commands/agents/validate.d.ts +22 -0
  43. package/dist/commands/agents/validate.js +66 -0
  44. package/dist/commands/agents/visibility.d.ts +13 -0
  45. package/dist/commands/agents/visibility.js +84 -2
  46. package/dist/commands/commerce/fees/show.d.ts +19 -0
  47. package/dist/commands/commerce/fees/show.js +75 -0
  48. package/dist/commands/earnings/index.d.ts +15 -0
  49. package/dist/commands/earnings/index.js +46 -0
  50. package/dist/commands/earnings/payouts.d.ts +12 -0
  51. package/dist/commands/earnings/payouts.js +39 -0
  52. package/dist/commands/earnings/statements.d.ts +19 -0
  53. package/dist/commands/earnings/statements.js +70 -0
  54. package/dist/commands/goals/key-results/create.d.ts +1 -1
  55. package/dist/commands/goals/key-results/create.js +5 -1
  56. package/dist/commands/harnesses/show.js +11 -1
  57. package/dist/commands/logout.js +31 -0
  58. package/dist/commands/machines/show.js +10 -1
  59. package/dist/commands/managed-execution/show.d.ts +10 -0
  60. package/dist/commands/managed-execution/show.js +60 -0
  61. package/dist/commands/spaces/show.js +35 -1
  62. package/dist/commands/step-up.d.ts +23 -0
  63. package/dist/commands/step-up.js +96 -0
  64. package/dist/commands/store/acquisitions/approve.d.ts +30 -0
  65. package/dist/commands/store/acquisitions/approve.js +100 -0
  66. package/dist/commands/store/acquisitions/decline.d.ts +17 -0
  67. package/dist/commands/store/acquisitions/decline.js +47 -0
  68. package/dist/commands/store/acquisitions/show.d.ts +16 -0
  69. package/dist/commands/store/acquisitions/show.js +49 -0
  70. package/dist/commands/store/admissions/approve.d.ts +19 -0
  71. package/dist/commands/store/admissions/approve.js +50 -0
  72. package/dist/commands/store/admissions/list.d.ts +15 -0
  73. package/dist/commands/store/admissions/list.js +60 -0
  74. package/dist/commands/store/admissions/refuse.d.ts +18 -0
  75. package/dist/commands/store/admissions/refuse.js +49 -0
  76. package/dist/commands/store/advisories/artifact.d.ts +15 -0
  77. package/dist/commands/store/advisories/artifact.js +25 -0
  78. package/dist/commands/store/advisories/cancel.d.ts +13 -0
  79. package/dist/commands/store/advisories/cancel.js +34 -0
  80. package/dist/commands/store/advisories/close.d.ts +18 -0
  81. package/dist/commands/store/advisories/close.js +51 -0
  82. package/dist/commands/store/advisories/confirm.d.ts +17 -0
  83. package/dist/commands/store/advisories/confirm.js +40 -0
  84. package/dist/commands/store/advisories/issue.d.ts +20 -0
  85. package/dist/commands/store/advisories/issue.js +59 -0
  86. package/dist/commands/store/advisories/list.d.ts +15 -0
  87. package/dist/commands/store/advisories/list.js +49 -0
  88. package/dist/commands/store/advisories/show.d.ts +13 -0
  89. package/dist/commands/store/advisories/show.js +34 -0
  90. package/dist/commands/store/artifacts/release.d.ts +16 -0
  91. package/dist/commands/store/artifacts/release.js +31 -0
  92. package/dist/commands/store/artifacts/used-by.d.ts +12 -0
  93. package/dist/commands/store/artifacts/used-by.js +20 -0
  94. package/dist/commands/store/browse.d.ts +5 -0
  95. package/dist/commands/store/browse.js +28 -1
  96. package/dist/commands/store/channel.d.ts +21 -0
  97. package/dist/commands/store/channel.js +62 -0
  98. package/dist/commands/store/follow.d.ts +14 -0
  99. package/dist/commands/store/follow.js +45 -0
  100. package/dist/commands/store/governance/policy.d.ts +18 -5
  101. package/dist/commands/store/governance/policy.js +80 -12
  102. package/dist/commands/store/governance/requests.d.ts +28 -0
  103. package/dist/commands/store/governance/requests.js +116 -0
  104. package/dist/commands/store/install.d.ts +3 -0
  105. package/dist/commands/store/install.js +101 -2
  106. package/dist/commands/store/issues.d.ts +26 -0
  107. package/dist/commands/store/issues.js +118 -0
  108. package/dist/commands/store/maintainers/add.d.ts +13 -0
  109. package/dist/commands/store/maintainers/add.js +23 -0
  110. package/dist/commands/store/maintainers/remove.d.ts +13 -0
  111. package/dist/commands/store/maintainers/remove.js +22 -0
  112. package/dist/commands/store/publishers/approve.d.ts +11 -0
  113. package/dist/commands/store/publishers/approve.js +25 -0
  114. package/dist/commands/store/publishers/claim.d.ts +12 -0
  115. package/dist/commands/store/publishers/claim.js +20 -0
  116. package/dist/commands/store/publishers/confirm.d.ts +11 -0
  117. package/dist/commands/store/publishers/confirm.js +17 -0
  118. package/dist/commands/store/publishers/domains/begin.d.ts +12 -0
  119. package/dist/commands/store/publishers/domains/begin.js +20 -0
  120. package/dist/commands/store/publishers/domains/list.d.ts +9 -0
  121. package/dist/commands/store/publishers/domains/list.js +19 -0
  122. package/dist/commands/store/publishers/domains/verify.d.ts +12 -0
  123. package/dist/commands/store/publishers/domains/verify.js +20 -0
  124. package/dist/commands/store/publishers/namespaces.d.ts +8 -0
  125. package/dist/commands/store/publishers/namespaces.js +16 -0
  126. package/dist/commands/store/publishers/verified.d.ts +11 -0
  127. package/dist/commands/store/publishers/verified.js +34 -0
  128. package/dist/commands/store/refund.d.ts +22 -0
  129. package/dist/commands/store/refund.js +80 -0
  130. package/dist/commands/store/report.d.ts +20 -0
  131. package/dist/commands/store/report.js +59 -0
  132. package/dist/commands/store/reports.d.ts +11 -0
  133. package/dist/commands/store/reports.js +52 -0
  134. package/dist/commands/store/signals.d.ts +18 -0
  135. package/dist/commands/store/signals.js +43 -0
  136. package/dist/commands/store/star.d.ts +17 -0
  137. package/dist/commands/store/star.js +41 -0
  138. package/dist/commands/store/stars.d.ts +10 -0
  139. package/dist/commands/store/stars.js +33 -0
  140. package/dist/commands/store/trial.d.ts +11 -0
  141. package/dist/commands/store/trial.js +17 -0
  142. package/dist/commands/store/uninstall.d.ts +19 -0
  143. package/dist/commands/store/uninstall.js +118 -0
  144. package/dist/commands/store/update.d.ts +2 -0
  145. package/dist/commands/store/update.js +60 -2
  146. package/dist/commands/store/updates.d.ts +10 -4
  147. package/dist/commands/store/updates.js +60 -39
  148. package/dist/commands/store/watch.d.ts +18 -0
  149. package/dist/commands/store/watch.js +44 -0
  150. package/dist/commands/subscriptions/health.d.ts +12 -0
  151. package/dist/commands/subscriptions/health.js +39 -0
  152. package/dist/commands/subscriptions/list.js +3 -2
  153. package/dist/commands/subscriptions/status.js +7 -1
  154. package/dist/commands/subscriptions/subscribe.d.ts +9 -2
  155. package/dist/commands/subscriptions/subscribe.js +141 -12
  156. package/dist/commands/tasks/comments/list.js +9 -1
  157. package/dist/commands/tasks/labels/attach.js +15 -2
  158. package/dist/commands/tasks/show.js +17 -3
  159. package/dist/commands/tasks/update.js +15 -4
  160. package/dist/commands/tasks/updates/add.js +5 -1
  161. package/dist/lib/agent-config.js +1 -0
  162. package/dist/lib/agent-evals.d.ts +71 -0
  163. package/dist/lib/agent-evals.js +359 -0
  164. package/dist/lib/agent-spec.d.ts +28 -0
  165. package/dist/lib/agent-spec.js +58 -0
  166. package/dist/lib/auth-storage.d.ts +12 -0
  167. package/dist/lib/auth-storage.js +0 -33
  168. package/dist/lib/commerce.d.ts +8 -0
  169. package/dist/lib/commerce.js +10 -0
  170. package/dist/lib/earnings.d.ts +36 -0
  171. package/dist/lib/earnings.js +164 -0
  172. package/dist/lib/github-oidc.d.ts +13 -0
  173. package/dist/lib/github-oidc.js +41 -0
  174. package/dist/lib/governed-store.d.ts +43 -2
  175. package/dist/lib/governed-store.js +25 -1
  176. package/dist/lib/label-ref.js +16 -0
  177. package/dist/lib/managed-execution.d.ts +10 -0
  178. package/dist/lib/managed-execution.js +43 -0
  179. package/dist/lib/principal-display.d.ts +20 -0
  180. package/dist/lib/principal-display.js +64 -0
  181. package/dist/lib/space-template-source.d.ts +14 -0
  182. package/dist/lib/space-template-source.js +41 -0
  183. package/dist/lib/step-up.d.ts +21 -0
  184. package/dist/lib/step-up.js +44 -0
  185. package/dist/lib/store-acquisition.d.ts +11 -0
  186. package/dist/lib/store-acquisition.js +40 -0
  187. package/dist/lib/store-advisories.d.ts +50 -0
  188. package/dist/lib/store-advisories.js +62 -0
  189. package/dist/lib/task-closure.js +1 -1
  190. package/dist/lib/web-url.d.ts +11 -0
  191. package/dist/lib/web-url.js +14 -0
  192. package/dist/node_modules/@skrr-ai/data-provider/index.js +25471 -24177
  193. package/oclif.manifest.json +38931 -34119
  194. package/package.json +21 -3
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.describeAcquisitionRequestLines = describeAcquisitionRequestLines;
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ /**
6
+ * A purchase an agent asked to make, as the lines a terminal shows (OSK-12240).
7
+ *
8
+ * The same server copy the web approval card renders: every field comes from
9
+ * `GET /api/store/acquisition-requests/:id`, which the fulfillment path built
10
+ * from the listing it resolved. Nothing the requesting agent wrote reaches
11
+ * these lines. The words themselves come from `@skrr-ai/data-provider`, so the
12
+ * terminal and the card cannot describe one request two ways.
13
+ */
14
+ function describeAcquisitionRequestLines(request) {
15
+ const name = request.listingName || request.entityId;
16
+ const version = request.versionLabel ? ` v${request.versionLabel}` : '';
17
+ const kind = request.entityType === 'skill' ? 'skill' : 'agent';
18
+ const status = (0, data_provider_1.describeStoreAcquisitionStatus)(request.status);
19
+ const lines = [
20
+ `${name}${version} (a paid ${kind})`,
21
+ ` Status: ${status.label}${status.detail ? ` — ${status.detail}` : ''}`,
22
+ ` Price: ${(0, data_provider_1.formatStoreAcquisitionPrice)(request.price)} ${request.currency}`,
23
+ ` Refunds: ${(0, data_provider_1.describeStoreAcquisitionRefundTerms)(request.refundTerms)}`,
24
+ ` Buyer terms: ${request.buyerTerms
25
+ ? `${request.buyerTerms.termsVersion} — ${request.buyerTerms.artifactUri}`
26
+ : 'not configured, so this purchase cannot be approved'}`,
27
+ ` Offer: ${request.offerVersionId}`,
28
+ ` Capabilities: ${(0, data_provider_1.describeStoreAcquisitionCapabilities)(request.capabilities, request.capabilityCount)}`,
29
+ ];
30
+ if (request.requestedByAgentId) {
31
+ lines.push(` Asked by: agent ${request.requestedByAgentId}`);
32
+ }
33
+ if (request.entityType === 'skill' && request.targetId) {
34
+ lines.push(` Installs on: agent ${request.targetId}`);
35
+ }
36
+ if (request.expiresAt) {
37
+ lines.push(` Expires: ${request.expiresAt}`);
38
+ }
39
+ return lines;
40
+ }
@@ -0,0 +1,50 @@
1
+ import type { StoreReleaseAdvisory, StoreReleaseAdvisoryCloseAction, StoreReleaseAdvisoryRemedy } from '@skrr-ai/data-provider';
2
+ /**
3
+ * `/api/store/.../advisories` — a Store curator's recall of one published
4
+ * release (OSK-12253).
5
+ *
6
+ * Only the `store_curation` surface (the TRUST role) may use any of these; the
7
+ * server refuses everyone else, a workspace owner or admin included. Issuing
8
+ * takes one curator. Ending an advisory takes two different ones: `close`
9
+ * records the first curator's request to lift or retract it, and `confirm` —
10
+ * which the server refuses for that same curator — ends it.
11
+ *
12
+ * Every route is written out at its own call site rather than composed from a
13
+ * builder, like the rest of the Store CLI: the parity checker reads the
14
+ * LITERAL at the call site.
15
+ */
16
+ export type StoreReleaseAdvisoryResult = {
17
+ advisory: StoreReleaseAdvisory;
18
+ replayed: boolean;
19
+ };
20
+ /** `GET /agents/:id/releases/:releaseId/advisories` */
21
+ export declare function listStoreReleaseAdvisories(agentId: string, releaseId: string, status?: string): Promise<{
22
+ advisories: StoreReleaseAdvisory[];
23
+ }>;
24
+ /** `POST /agents/:id/releases/:releaseId/advisories` — issue one. */
25
+ export declare function issueStoreReleaseAdvisory(agentId: string, releaseId: string, body: {
26
+ remedy: StoreReleaseAdvisoryRemedy;
27
+ summary: string;
28
+ evidenceRefs?: string[];
29
+ }): Promise<StoreReleaseAdvisoryResult>;
30
+ /** `GET /advisories/:advisoryId` */
31
+ export declare function getStoreReleaseAdvisory(advisoryId: string): Promise<{
32
+ advisory: StoreReleaseAdvisory;
33
+ }>;
34
+ /** `POST /advisories/:advisoryId/close-request` — the first of two curators. */
35
+ export declare function requestStoreReleaseAdvisoryClose(advisoryId: string, body: {
36
+ action: StoreReleaseAdvisoryCloseAction;
37
+ note: string;
38
+ }): Promise<StoreReleaseAdvisoryResult>;
39
+ /** `POST /advisories/:advisoryId/close-request/confirm` — the second curator. */
40
+ export declare function confirmStoreReleaseAdvisoryClose(advisoryId: string, body: {
41
+ note: string;
42
+ }): Promise<StoreReleaseAdvisoryResult>;
43
+ /** `DELETE /advisories/:advisoryId/close-request` — keep the recall in force. */
44
+ export declare function cancelStoreReleaseAdvisoryClose(advisoryId: string): Promise<StoreReleaseAdvisoryResult>;
45
+ /**
46
+ * An advisory as a few lines a curator can read: what it does, whether it is
47
+ * still in force, and — when an ending is waiting — who asked, so the second
48
+ * curator can see it is not them.
49
+ */
50
+ export declare function describeStoreReleaseAdvisoryLines(advisory: StoreReleaseAdvisory): string[];
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listStoreReleaseAdvisories = listStoreReleaseAdvisories;
4
+ exports.issueStoreReleaseAdvisory = issueStoreReleaseAdvisory;
5
+ exports.getStoreReleaseAdvisory = getStoreReleaseAdvisory;
6
+ exports.requestStoreReleaseAdvisoryClose = requestStoreReleaseAdvisoryClose;
7
+ exports.confirmStoreReleaseAdvisoryClose = confirmStoreReleaseAdvisoryClose;
8
+ exports.cancelStoreReleaseAdvisoryClose = cancelStoreReleaseAdvisoryClose;
9
+ exports.describeStoreReleaseAdvisoryLines = describeStoreReleaseAdvisoryLines;
10
+ const data_provider_1 = require("@skrr-ai/data-provider");
11
+ const api_fetch_1 = require("./api-fetch");
12
+ const triggers_1 = require("./triggers");
13
+ /** `GET /agents/:id/releases/:releaseId/advisories` */
14
+ async function listStoreReleaseAdvisories(agentId, releaseId, status) {
15
+ return (0, api_fetch_1.apiFetch)((0, triggers_1.withQuery)(`/api/store/agents/${encodeURIComponent(agentId)}/releases/${encodeURIComponent(releaseId)}/advisories`, { status }));
16
+ }
17
+ /** `POST /agents/:id/releases/:releaseId/advisories` — issue one. */
18
+ async function issueStoreReleaseAdvisory(agentId, releaseId, body) {
19
+ return (0, api_fetch_1.apiFetch)(`/api/store/agents/${encodeURIComponent(agentId)}/releases/${encodeURIComponent(releaseId)}/advisories`, { method: 'POST', body });
20
+ }
21
+ /** `GET /advisories/:advisoryId` */
22
+ async function getStoreReleaseAdvisory(advisoryId) {
23
+ return (0, api_fetch_1.apiFetch)(`/api/store/advisories/${encodeURIComponent(advisoryId)}`);
24
+ }
25
+ /** `POST /advisories/:advisoryId/close-request` — the first of two curators. */
26
+ async function requestStoreReleaseAdvisoryClose(advisoryId, body) {
27
+ return (0, api_fetch_1.apiFetch)(`/api/store/advisories/${encodeURIComponent(advisoryId)}/close-request`, { method: 'POST', body });
28
+ }
29
+ /** `POST /advisories/:advisoryId/close-request/confirm` — the second curator. */
30
+ async function confirmStoreReleaseAdvisoryClose(advisoryId, body) {
31
+ return (0, api_fetch_1.apiFetch)(`/api/store/advisories/${encodeURIComponent(advisoryId)}/close-request/confirm`, { method: 'POST', body });
32
+ }
33
+ /** `DELETE /advisories/:advisoryId/close-request` — keep the recall in force. */
34
+ async function cancelStoreReleaseAdvisoryClose(advisoryId) {
35
+ return (0, api_fetch_1.apiFetch)(`/api/store/advisories/${encodeURIComponent(advisoryId)}/close-request`, { method: 'DELETE' });
36
+ }
37
+ /**
38
+ * An advisory as a few lines a curator can read: what it does, whether it is
39
+ * still in force, and — when an ending is waiting — who asked, so the second
40
+ * curator can see it is not them.
41
+ */
42
+ function describeStoreReleaseAdvisoryLines(advisory) {
43
+ const remedy = (0, data_provider_1.describeStoreReleaseAdvisoryRemedy)(advisory.remedy);
44
+ const status = (0, data_provider_1.describeStoreReleaseAdvisoryStatus)(advisory.status);
45
+ const release = advisory.versionLabel
46
+ ? `v${advisory.versionLabel} (${advisory.releaseId})`
47
+ : advisory.releaseId;
48
+ const lines = [
49
+ `${advisory.advisoryId} ${remedy.label} · ${status.label}`,
50
+ ` release ${release} of ${advisory.agentId}`,
51
+ ` summary ${advisory.summary}`,
52
+ ` effect ${remedy.detail}`,
53
+ ` issued ${advisory.issuedAt ?? '-'} by ${advisory.issuedBy}`,
54
+ ];
55
+ if (advisory.closeRequest) {
56
+ lines.push(` waiting ${advisory.closeRequest.action} requested by ${advisory.closeRequest.requestedBy} — a different curator must confirm`);
57
+ }
58
+ if (advisory.closure) {
59
+ lines.push(` ended ${advisory.closure.action} by ${advisory.closure.requestedBy}, confirmed by ${advisory.closure.confirmedBy} at ${advisory.closure.confirmedAt ?? '-'}`);
60
+ }
61
+ return lines;
62
+ }
@@ -100,7 +100,7 @@ function closureReport(closure) {
100
100
  lines.push('');
101
101
  lines.push(reviewRequired
102
102
  ? 'Only an accepted independent Review — or the Task owner closing directly — settles this. The rest is recorded on resolution.closure.'
103
- : 'Closing anyway is allowed — all of this is recorded on resolution.closure.');
103
+ : 'If this Task is closed anyway, all of the above is recorded on resolution.closure — closing over it settles nothing.');
104
104
  return lines;
105
105
  }
106
106
  /**
@@ -17,6 +17,14 @@
17
17
  */
18
18
  export type WebUrlRef = {
19
19
  kind: 'billing';
20
+ } | {
21
+ kind: 'machine';
22
+ machineId: string;
23
+ } | {
24
+ kind: 'harness';
25
+ harnessId: string;
26
+ } | {
27
+ kind: 'managedExecution';
20
28
  } | {
21
29
  kind: 'task';
22
30
  taskId: string;
@@ -75,6 +83,9 @@ export type WebUrlRef = {
75
83
  kind: 'wikiPage';
76
84
  spaceId: string;
77
85
  pageId: string;
86
+ } | {
87
+ kind: 'spaceTemplate';
88
+ templateId: string;
78
89
  };
79
90
  /**
80
91
  * Site-relative canonical path for an entity, or `null` when the required id is
@@ -53,6 +53,16 @@ function webPath(ref) {
53
53
  switch (ref.kind) {
54
54
  case 'billing':
55
55
  return '/d/settings/balance';
56
+ case 'machine': {
57
+ const machineId = encodeId(ref.machineId);
58
+ return machineId ? `/machines/${machineId}` : null;
59
+ }
60
+ case 'harness': {
61
+ const harnessId = encodeId(ref.harnessId);
62
+ return harnessId ? `/harnesses/${harnessId}` : null;
63
+ }
64
+ case 'managedExecution':
65
+ return '/managed-execution';
56
66
  case 'task': {
57
67
  const taskId = encodeId(ref.taskId);
58
68
  if (!taskId)
@@ -112,6 +122,10 @@ function webPath(ref) {
112
122
  const pageId = encodeId(ref.pageId);
113
123
  return spaceId && pageId ? `/spaces/${spaceId}/wiki?page=${pageId}` : null;
114
124
  }
125
+ case 'spaceTemplate': {
126
+ const templateId = encodeId(ref.templateId);
127
+ return templateId ? `/store/services/${templateId}` : null;
128
+ }
115
129
  case 'workflow': {
116
130
  const spaceId = encodeId(ref.spaceId);
117
131
  if (!spaceId)