@synap-core/workspace-templates 0.12.0 → 0.24.0

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 (237) hide show
  1. package/README.md +509 -0
  2. package/automations/bookmark-enrichment.automation.json +321 -0
  3. package/automations/github-pr-events.automation.json +505 -0
  4. package/automations/mail-feed.automation.json +86 -0
  5. package/automations/ship-a-change-checks-green.automation.json +106 -0
  6. package/automations/ship-a-change-checks-red.automation.json +106 -0
  7. package/automations/ship-a-change-deployed.automation.json +56 -0
  8. package/automations/ship-a-change-pr-merged.automation.json +110 -0
  9. package/automations/ship-a-change-pr-opened.automation.json +104 -0
  10. package/automations/url-bookmark-capture.automation.json +132 -0
  11. package/capabilities/agency-skills.capability.json +157 -0
  12. package/capabilities/apify.capability.json +265 -0
  13. package/capabilities/apollo.capability.json +120 -0
  14. package/capabilities/arch-backend.capability.json +97 -0
  15. package/capabilities/arch-client-intelligence.capability.json +401 -0
  16. package/capabilities/backblaze-b2.capability.json +205 -0
  17. package/capabilities/cal-com.capability.json +266 -0
  18. package/capabilities/canva.capability.json +274 -0
  19. package/capabilities/claude-code-routines.capability.json +172 -0
  20. package/capabilities/claude-managed-agents.capability.json +215 -0
  21. package/capabilities/client-comms-report.capability.json +246 -0
  22. package/capabilities/content-idea-to-production.capability.json +29 -0
  23. package/capabilities/datagouv.capability.json +315 -0
  24. package/capabilities/discord-bot.capability.json +157 -0
  25. package/capabilities/dropbox.capability.json +281 -0
  26. package/capabilities/exa.capability.json +109 -0
  27. package/capabilities/fal-ai.capability.json +83 -0
  28. package/capabilities/fal-media-lab.capability.json +158 -0
  29. package/capabilities/fireflies.capability.json +191 -0
  30. package/capabilities/freellmapi.capability.json +114 -0
  31. package/capabilities/generic-apikey.capability.json +92 -0
  32. package/capabilities/github-merge.capability.json +99 -0
  33. package/capabilities/github-read.capability.json +325 -0
  34. package/capabilities/governance-tighten-recommender.capability.json +81 -0
  35. package/capabilities/jev.capability.json +226 -0
  36. package/capabilities/lead-conversion-enrollment.capability.json +246 -0
  37. package/capabilities/mail-feed.capability.json +277 -0
  38. package/capabilities/mailgun.capability.json +52 -0
  39. package/capabilities/nango-google.capability.json +639 -0
  40. package/capabilities/notion.capability.json +417 -0
  41. package/capabilities/omniroute.capability.json +137 -0
  42. package/capabilities/posthog-analytics.capability.json +258 -0
  43. package/capabilities/postiz.capability.json +467 -0
  44. package/capabilities/proactive-digest.capability.json +190 -0
  45. package/capabilities/proton.capability.json +288 -0
  46. package/capabilities/replicate-rvm.capability.json +97 -0
  47. package/capabilities/research-methods.capability.json +57 -0
  48. package/capabilities/shopify.capability.json +395 -0
  49. package/capabilities/slack.capability.json +369 -0
  50. package/capabilities/stripe.capability.json +1496 -0
  51. package/capabilities/telegram-bridge.capability.json +56 -0
  52. package/capabilities/treg.capability.json +102 -0
  53. package/capabilities/unipile-linkedin.capability.json +494 -0
  54. package/capabilities/vercel.capability.json +424 -0
  55. package/dist/define-DqoItRiR.d.ts +1370 -0
  56. package/dist/index.d.ts +174 -900
  57. package/dist/index.js +26447 -24075
  58. package/dist/index.js.map +1 -1
  59. package/dist/wire.d.ts +222 -0
  60. package/dist/wire.js +77 -0
  61. package/dist/wire.js.map +1 -0
  62. package/package.json +27 -4
  63. package/retired.yaml +136 -0
  64. package/skills/app-factory-build-slice/SKILL.md +70 -0
  65. package/skills/app-factory-build-slice.catalog.json +17 -0
  66. package/skills/app-factory-design-canvas/SKILL.md +96 -0
  67. package/skills/app-factory-design-canvas.catalog.json +17 -0
  68. package/skills/app-factory-design-review/SKILL.md +105 -0
  69. package/skills/app-factory-design-review.catalog.json +18 -0
  70. package/skills/app-factory-research/SKILL.md +123 -0
  71. package/skills/app-factory-research.catalog.json +17 -0
  72. package/skills/bookmark-enrichment/SKILL.md +40 -0
  73. package/skills/carousel-format/carousel-format.skill.json +18 -0
  74. package/skills/collage-broll/collage-broll.skill.json +20 -0
  75. package/skills/content-taste/content-taste.skill.json +18 -0
  76. package/skills/creative-director/creative-director.skill.json +18 -0
  77. package/skills/design-critique/SKILL.md +138 -0
  78. package/skills/design-critique.catalog.json +12 -0
  79. package/skills/designing-with-real-components/SKILL.md +140 -0
  80. package/skills/designing-with-real-components.catalog.json +12 -0
  81. package/skills/edit-loop/edit-loop.skill.json +25 -0
  82. package/skills/facecam-edit/facecam-edit.skill.json +24 -0
  83. package/skills/mapping-the-server/SKILL.md +54 -0
  84. package/skills/math-explainer-manimgx/math-explainer-manimgx.skill.json +20 -0
  85. package/skills/motion-quality-gates/motion-quality-gates.skill.json +20 -0
  86. package/skills/open-design-edit/open-design-edit.skill.json +24 -0
  87. package/skills/reading-client-progress/SKILL.md +65 -0
  88. package/skills/routing-to-channels/SKILL.md +54 -0
  89. package/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
  90. package/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
  91. package/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
  92. package/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
  93. package/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
  94. package/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
  95. package/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
  96. package/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
  97. package/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
  98. package/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
  99. package/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
  100. package/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
  101. package/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
  102. package/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
  103. package/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
  104. package/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
  105. package/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
  106. package/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
  107. package/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
  108. package/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
  109. package/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
  110. package/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
  111. package/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
  112. package/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
  113. package/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
  114. package/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
  115. package/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
  116. package/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
  117. package/skills/video-direction/video-direction.skill.json +20 -0
  118. package/skills/video-style-vocabulary/video-style-vocabulary.skill.json +20 -0
  119. package/skills/video-toolbox/video-toolbox.skill.json +20 -0
  120. package/src/__fixtures__/lifecycle-presets.flat-before.json +205 -0
  121. package/src/agency-os.yaml +122 -0
  122. package/src/agent-os-skill-slugs.test.ts +65 -0
  123. package/src/apify-social-reader.test.ts +317 -0
  124. package/src/base.yaml +85 -39
  125. package/src/blockchain-ecosystem.yaml +1 -0
  126. package/src/brand-library.yaml +525 -14
  127. package/src/builder-dev-fold.template.test.ts +113 -0
  128. package/src/builder.yaml +779 -91
  129. package/src/business-model-catalog-description.test.ts +47 -0
  130. package/src/business-model-grp.template.test.ts +214 -0
  131. package/src/business-model.yaml +296 -49
  132. package/src/catalog-safety.test.ts +198 -0
  133. package/src/catalog.template-items.test.ts +75 -0
  134. package/src/catalog.ts +66 -2
  135. package/src/concept-guard.test.ts +28 -8
  136. package/src/concept-guard.ts +2 -2
  137. package/src/content-creation.template.test.ts +52 -0
  138. package/src/content-creation.yaml +192 -0
  139. package/src/content-os.edit-loop.template.test.ts +210 -0
  140. package/src/content-os.publish-due-posts.template.test.ts +261 -0
  141. package/src/content-os.template.test.ts +349 -0
  142. package/src/content-os.video-takes.template.test.ts +338 -0
  143. package/src/content-os.work-a-take.template.test.ts +125 -0
  144. package/src/content-os.yaml +1873 -39
  145. package/src/content-studio-retired.template.test.ts +82 -0
  146. package/src/corpus-flow-validity.test.ts +4 -5
  147. package/src/crm-absorbs-outreach.template.test.ts +117 -0
  148. package/src/crm-build-plan.template.test.ts +128 -0
  149. package/src/crm-lists.template.test.ts +96 -0
  150. package/src/crm-messages-cadence.template.test.ts +246 -0
  151. package/src/crm-one-send-door.template.test.ts +65 -0
  152. package/src/crm.yaml +1563 -181
  153. package/src/decisions-wave.template.test.ts +186 -0
  154. package/src/define.ts +146 -17
  155. package/src/design-to-implementation.template.test.ts +94 -0
  156. package/src/domain-template-type.test.ts +75 -0
  157. package/src/ecosystem.yaml +27 -66
  158. package/src/enterprise-os.yaml +10 -134
  159. package/src/facecam-edit.audio-studio.test.ts +188 -0
  160. package/src/fal-generate-image.test.ts +200 -0
  161. package/src/fal-media-lab-pod-files.test.ts +180 -0
  162. package/src/finance.yaml +254 -1
  163. package/src/foundation.yaml +78 -38
  164. package/src/frame-host-modules.d.mts +6 -0
  165. package/src/frame-host-modules.mjs +58 -0
  166. package/src/generate.mjs +9 -3
  167. package/src/github-merge.test.ts +210 -0
  168. package/src/grants.yaml +46 -17
  169. package/src/hr.yaml +39 -6
  170. package/src/index.ts +36 -1
  171. package/src/intent.test.ts +161 -0
  172. package/src/internal-runbook.yaml +19 -1
  173. package/src/jev.test.ts +356 -0
  174. package/src/legal.yaml +33 -1
  175. package/src/life-os.yaml +51 -240
  176. package/src/lifecycle-coverage.test.ts +124 -0
  177. package/src/lifecycle-declarations.test.ts +252 -0
  178. package/src/lifecycle-presets.test.ts +468 -0
  179. package/src/lifecycle-presets.ts +494 -0
  180. package/src/lifecycle-stuck.test.ts +46 -0
  181. package/src/lifecycle-waits.parity.test.ts +319 -0
  182. package/src/marketing.yaml +108 -4
  183. package/src/meetings-knowledge.yaml +18 -0
  184. package/src/networking.yaml +23 -2
  185. package/src/operations.yaml +304 -4
  186. package/src/pipeline-views.template.test.ts +88 -0
  187. package/src/playbook-goal-placeholders.test.ts +57 -0
  188. package/src/postiz-contract.test.ts +134 -0
  189. package/src/presentation-declarations.test.ts +174 -0
  190. package/src/process-contract.validate.test.ts +352 -0
  191. package/src/project-management.yaml +39 -740
  192. package/src/publish-body.d.mts +29 -0
  193. package/src/publish-body.mjs +74 -0
  194. package/src/publish-body.test.ts +74 -0
  195. package/src/publish-official-lib.test.ts +176 -0
  196. package/src/replicate-rvm.test.ts +504 -0
  197. package/src/research-base.yaml +119 -20
  198. package/src/research-decision.yaml +60 -3
  199. package/src/reserved-profile-slugs.test.ts +81 -0
  200. package/src/retired-goal-kinds.test.ts +52 -0
  201. package/src/role-reference-and-step-domain.test.ts +192 -0
  202. package/src/seed-obligation.test.ts +1 -6
  203. package/src/send-message-maps.test.ts +227 -0
  204. package/src/shared-role-ssot.test.ts +40 -2
  205. package/src/ship-a-change.template.test.ts +177 -0
  206. package/src/skills.test.ts +170 -0
  207. package/src/social.yaml +85 -27
  208. package/src/space-packages.freshness.test.ts +97 -0
  209. package/src/space-packages.generated.ts +40 -0
  210. package/src/space-packages.test.ts +125 -0
  211. package/src/space-packages.ts +73 -0
  212. package/src/start.test.ts +188 -0
  213. package/src/stripe-capability.test.ts +192 -0
  214. package/src/task-intents.test.ts +293 -0
  215. package/src/template-documents.test.ts +158 -0
  216. package/src/templates.ts +20907 -21464
  217. package/src/types.ts +475 -61
  218. package/src/unipile-linkedin-find-profile.test.ts +183 -0
  219. package/src/unipile-publish-post.test.ts +162 -0
  220. package/src/validate-flow.drift.test.ts +2 -3
  221. package/src/validate-flow.ts +22 -2
  222. package/src/validate-onboarding.test.ts +59 -0
  223. package/src/validate.test.ts +71 -4
  224. package/src/validate.ts +1416 -7
  225. package/src/wire-core.ts +231 -0
  226. package/src/wire.test.ts +159 -0
  227. package/src/wire.ts +107 -0
  228. package/views/bookmark-views-pack.view.json +39 -0
  229. package/views/event-views-pack.view.json +45 -0
  230. package/views/task-views-pack.view.json +53 -0
  231. package/src/agent-fleet.yaml +0 -1645
  232. package/src/business-developer.template.test.ts +0 -351
  233. package/src/business-developer.yaml +0 -860
  234. package/src/content-studio.yaml +0 -361
  235. package/src/dev-dashboard.yaml +0 -990
  236. package/src/outreach-comms.yaml +0 -486
  237. package/src/the-arch.yaml +0 -201
@@ -0,0 +1,56 @@
1
+ {
2
+ "apiVersion": "synap/v1",
3
+ "kind": "capability",
4
+ "meta": {
5
+ "slug": "telegram-bridge",
6
+ "name": "Telegram Bridge",
7
+ "description": "Two-way Telegram messaging with clients: group messages arrive in each client's channel in Synap, and replies go back through the bridge. Needs a Telegram bot token and the Synap messaging bridge set up with it.",
8
+ "tags": [
9
+ "capability"
10
+ ],
11
+ "isPublic": true,
12
+ "syncByDefault": true
13
+ },
14
+ "spec": {
15
+ "key": "telegram-bridge",
16
+ "name": "Telegram Bridge",
17
+ "description": "Telegram two-way messaging via an EXTERNAL bridge gateway (the Telegram/Discord/WhatsApp bridge worker that lives OUTSIDE this repo). This template represents the bridge connection: it stores the bridge bot token in the vault and registers one external tool whose credentialRef is remapped to the runtime vault://<id> at apply time. Inbound Telegram messages are delivered by the bridge into the client's entity-bound channel (inbound-recorder substrate, shipped); outbound sends are dispatched by the bridge against this connection. PRECONDITION: a Telegram bot (BotFather) added to the target groups, and the external bridge gateway configured with this same token. Pass the bot token as telegramBotToken. Outbound send code skills are NOT seeded here — the bridge owns delivery; this template establishes the connection + auth.",
18
+ "metadata": {
19
+ "mode": "standing"
20
+ },
21
+ "params": [
22
+ {
23
+ "name": "telegramBotToken",
24
+ "label": "Telegram bridge bot token",
25
+ "type": "text",
26
+ "required": true,
27
+ "description": "The Telegram bot token (BotFather) used by the external bridge gateway. Stored server-encrypted in the vault; never persisted in the template."
28
+ }
29
+ ],
30
+ "vault": [
31
+ {
32
+ "ref": "telegramBotTokenSecret",
33
+ "name": "{{name}} Telegram bridge bot token",
34
+ "value": "{{telegramBotToken}}",
35
+ "type": "api_key",
36
+ "description": "Telegram bot token for the external bridge gateway (telegram connector)."
37
+ }
38
+ ],
39
+ "tools": [
40
+ {
41
+ "name": "telegram",
42
+ "kind": "external",
43
+ "description": "Telegram messaging via the external bridge gateway. The bridge holds the connection; this tool's credentialRef is remapped to the runtime vault://<id> at apply time so the bridge token resolves server-side. Inbound is delivered by the bridge into the client's channel; outbound sends are dispatched by the bridge.",
44
+ "credentialRef": "telegramBotTokenSecret",
45
+ "executor": "external-agent",
46
+ "config": {
47
+ "transport": "bridge",
48
+ "externalSource": "telegram"
49
+ }
50
+ }
51
+ ],
52
+ "skills": [],
53
+ "provides": []
54
+ },
55
+ "dependencies": []
56
+ }
@@ -0,0 +1,102 @@
1
+ {
2
+ "apiVersion": "synap/v1",
3
+ "kind": "capability",
4
+ "meta": {
5
+ "slug": "treg",
6
+ "name": "treg — Tool catalog",
7
+ "description": "Find a provider endpoint on treg.to by the job you need, then run it with your treg token. Search is free and shows the price. Running an endpoint spends prepaid balance and waits for your approval. Sign up at treg.to yourself and paste one token.",
8
+ "tags": [
9
+ "capability",
10
+ "search_external",
11
+ "run_external_job"
12
+ ],
13
+ "isPublic": true,
14
+ "syncByDefault": true
15
+ },
16
+ "spec": {
17
+ "key": "treg",
18
+ "name": "treg — Tool catalog",
19
+ "description": "Call provider endpoints through treg (https://treg.to) with one token the user pastes. The user signs up at https://treg.to themselves; Synap does not host signup and this is not a messaging bridge. Verified against https://treg.to/docs and https://treg.to/llms.txt (2026-09-29): base https://treg.to, auth header X-Treg-Token with an empty prefix. Do not send the token as Authorization: Bearer — REST ignores Bearer (401) and /call/ would relay that header to the provider. GET /catalog/search?q= finds endpoints and already includes price (cost.usd). GET /call/{endpoint_id} with a query string runs a catalog endpoint and spends prepaid balance, so that verb is not read-only. A catalog entry whose input is a JSON body (method POST) is a different shape; this pack's call verb sends the query object as the query string only.",
20
+ "params": [
21
+ {
22
+ "name": "tregToken",
23
+ "label": "treg token",
24
+ "type": "text",
25
+ "required": true,
26
+ "description": "Token from the user's own treg.to account (https://treg.to). Sent as the X-Treg-Token header, not as Authorization. Stored server-encrypted in the vault; never persisted in the template."
27
+ }
28
+ ],
29
+ "vault": [
30
+ {
31
+ "ref": "tregTokenSecret",
32
+ "name": "{{name}} treg token",
33
+ "value": "{{tregToken}}",
34
+ "type": "api_key",
35
+ "description": "treg token for the treg_api connector. The applier remaps this template-local ref to vault://<id>."
36
+ }
37
+ ],
38
+ "tools": [
39
+ {
40
+ "name": "treg_api",
41
+ "kind": "api",
42
+ "description": "Authenticated HTTP access to treg (https://treg.to). The applier injects the vaulted token into the X-Treg-Token header with an empty prefix — treg REST does not use Authorization: Bearer. credentialRef is remapped to vault://<id> at apply.",
43
+ "credentialRef": "tregTokenSecret",
44
+ "executor": "is-agent",
45
+ "config": {
46
+ "baseUrl": "https://treg.to",
47
+ "auth": {
48
+ "in": "header",
49
+ "name": "X-Treg-Token",
50
+ "prefix": ""
51
+ }
52
+ }
53
+ }
54
+ ],
55
+ "skills": [
56
+ {
57
+ "name": "treg_search",
58
+ "intent": "search_external",
59
+ "kind": "code",
60
+ "scope": "pod",
61
+ "description": "Finds treg catalog endpoints for a job. Read-only: GET /catalog/search (the catalog does not spend balance). Returns at most 5 rows of { id, name, price }, where price is cost.usd (else cost.value) from the search payload. Args: { query: string }.",
62
+ "requires": [
63
+ "treg_api"
64
+ ],
65
+ "executionMode": "sync",
66
+ "timeoutSeconds": 30,
67
+ "parameters": {
68
+ "query": "string"
69
+ },
70
+ "code": "// Catalog search. Executor wraps this body as (async (args, context) => { <code> }).\n// callProvider('treg_api','GET', path) injects X-Treg-Token. GET /catalog/search\n// is open and already includes price on each result (cost.usd) — no second get.\nconst query = String(args?.query ?? '').trim();\nif (!query) throw new Error('treg_search: query is required');\n\nconst res = await callProvider('treg_api', 'GET', '/catalog/search?q=' + encodeURIComponent(query) + '&limit=5');\nconst payload = res?.body ?? res;\nconst rows = Array.isArray(payload?.results) ? payload.results : [];\nconst results = rows.slice(0, 5).map((r) => {\n const cost = r?.cost;\n let price = null;\n if (cost && typeof cost === 'object') {\n if (typeof cost.usd === 'number') price = cost.usd;\n else if (typeof cost.value === 'number') price = cost.value;\n }\n return { id: r?.id ?? null, name: r?.name ?? null, price };\n});\nreturn { query, count: results.length, results };",
71
+ "metadata": {
72
+ "readOnly": true
73
+ }
74
+ },
75
+ {
76
+ "name": "treg_call",
77
+ "intent": "run_external_job",
78
+ "kind": "code",
79
+ "scope": "pod",
80
+ "description": "Runs one treg catalog endpoint and spends prepaid balance. Not read-only: the run is proposal-gated. HTTP shape verified at https://treg.to/docs: GET /call/{endpoint_id} with the query object as the query string (example: /call/tikhub.tiktok.user.profile?uniqueId=tiktok). Does not send a JSON body and does not poll async generation tasks. Returns the upstream body, plus chargedMicro (X-Treg-Cost-Micro, else _treg.charged_micro) and callId (X-Treg-Call-Id) when the response has them. Args: { endpointId: string, query?: object }.",
81
+ "requires": [
82
+ "treg_api"
83
+ ],
84
+ "executionMode": "sync",
85
+ "timeoutSeconds": 60,
86
+ "parameters": {
87
+ "endpointId": "string",
88
+ "query": "object?"
89
+ },
90
+ "code": "// Catalog call. Executor wraps this body as (async (args, context) => { <code> }).\n// callProvider('treg_api','GET', path) injects X-Treg-Token (empty prefix, not Bearer).\n// Docs: GET https://treg.to/call/{endpoint_id}?... — method and query string pass through.\n// This verb is not metadata.readOnly, so the skill gate proposes before the spend.\nconst endpointId = String(args?.endpointId ?? '').trim();\nif (!endpointId) throw new Error('treg_call: endpointId is required');\nif (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(endpointId)) {\n throw new Error('treg_call: endpointId must be a catalog id, not a URL');\n}\n\nlet qs = '';\nif (args?.query !== undefined && args?.query !== null) {\n if (typeof args.query !== 'object' || Array.isArray(args.query)) {\n throw new Error('treg_call: query must be an object of parameters');\n }\n const parts = [];\n for (const [key, value] of Object.entries(args.query)) {\n if (value === undefined || value === null) continue;\n const encoded = typeof value === 'object' ? JSON.stringify(value) : String(value);\n parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(encoded));\n }\n qs = parts.join('&');\n}\n\nconst path = '/call/' + encodeURIComponent(endpointId) + (qs ? '?' + qs : '');\nconst res = await callProvider('treg_api', 'GET', path);\nif (res?.proposed === true) {\n return { success: false, proposed: true, proposalId: res?.proposalId ?? null, endpointId };\n}\nconst payload = res?.body !== undefined ? res.body : res;\nconst headers = res?.headers && typeof res.headers === 'object' ? res.headers : {};\nconst header = (name) => {\n const want = name.toLowerCase();\n for (const [k, v] of Object.entries(headers)) {\n if (String(k).toLowerCase() === want && v != null) return String(v);\n }\n return null;\n};\nconst costHeader = header('x-treg-cost-micro');\nconst chargedFromHeader = costHeader != null && /^-?\\d+$/.test(costHeader) ? Number(costHeader) : null;\nconst tregMeta = payload && typeof payload === 'object' && !Array.isArray(payload) ? payload._treg : null;\nconst chargedFromBody = tregMeta && typeof tregMeta.charged_micro === 'number' ? tregMeta.charged_micro : null;\nconst chargedMicro = chargedFromHeader != null ? chargedFromHeader : chargedFromBody;\nconst callId = header('x-treg-call-id');\nconst out = { endpointId, status: res?.status ?? null, body: payload };\nif (chargedMicro != null) out.chargedMicro = chargedMicro;\nif (callId) out.callId = callId;\nreturn out;",
91
+ "metadata": {
92
+ "verbType": "write"
93
+ }
94
+ }
95
+ ],
96
+ "provides": [
97
+ "search_external",
98
+ "run_external_job"
99
+ ]
100
+ },
101
+ "dependencies": []
102
+ }