@synap-core/cli 1.7.0 → 1.10.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.
- package/dist/commands/agent-chat.d.ts +47 -0
- package/dist/commands/agent-chat.js +250 -0
- package/dist/commands/agent-chat.js.map +1 -0
- package/dist/commands/agent-run.d.ts +47 -0
- package/dist/commands/agent-run.js +301 -0
- package/dist/commands/agent-run.js.map +1 -0
- package/dist/commands/agents.js +85 -46
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/artifact.d.ts +26 -0
- package/dist/commands/artifact.js +76 -0
- package/dist/commands/artifact.js.map +1 -0
- package/dist/commands/automation.d.ts +47 -0
- package/dist/commands/automation.js +601 -0
- package/dist/commands/automation.js.map +1 -0
- package/dist/commands/bridge-setup.d.ts +66 -0
- package/dist/commands/bridge-setup.js +1112 -0
- package/dist/commands/bridge-setup.js.map +1 -0
- package/dist/commands/cap-connections.d.ts +28 -0
- package/dist/commands/cap-connections.js +224 -0
- package/dist/commands/cap-connections.js.map +1 -0
- package/dist/commands/capability.d.ts +89 -0
- package/dist/commands/capability.js +1523 -0
- package/dist/commands/capability.js.map +1 -0
- package/dist/commands/cell.d.ts +55 -0
- package/dist/commands/cell.js +277 -0
- package/dist/commands/cell.js.map +1 -0
- package/dist/commands/centrality.d.ts +20 -0
- package/dist/commands/centrality.js +94 -0
- package/dist/commands/centrality.js.map +1 -0
- package/dist/commands/connect.d.ts +2 -0
- package/dist/commands/connect.js +25 -10
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connections.js +0 -16
- package/dist/commands/connections.js.map +1 -1
- package/dist/commands/context.d.ts +22 -0
- package/dist/commands/context.js +149 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/data-extra.d.ts +14 -0
- package/dist/commands/data-extra.js +185 -0
- package/dist/commands/data-extra.js.map +1 -0
- package/dist/commands/data.d.ts +14 -10
- package/dist/commands/data.js +353 -192
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/diagnose.d.ts +20 -0
- package/dist/commands/diagnose.js +143 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/digest.d.ts +17 -0
- package/dist/commands/digest.js +121 -0
- package/dist/commands/digest.js.map +1 -0
- package/dist/commands/discover.d.ts +2 -0
- package/dist/commands/discover.js +25 -8
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/doc.d.ts +39 -0
- package/dist/commands/doc.js +130 -0
- package/dist/commands/doc.js.map +1 -0
- package/dist/commands/events.d.ts +26 -0
- package/dist/commands/events.js +69 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/explain.d.ts +21 -0
- package/dist/commands/explain.js +251 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/facet.d.ts +29 -0
- package/dist/commands/facet.js +113 -0
- package/dist/commands/facet.js.map +1 -0
- package/dist/commands/graph.d.ts +18 -0
- package/dist/commands/graph.js +74 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/home.d.ts +12 -0
- package/dist/commands/home.js +54 -0
- package/dist/commands/home.js.map +1 -0
- package/dist/commands/import.d.ts +38 -0
- package/dist/commands/import.js +440 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +0 -2
- package/dist/commands/init.js +97 -118
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +9 -0
- package/dist/commands/keys.js +78 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/knowledge.d.ts +34 -18
- package/dist/commands/knowledge.js +355 -57
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/launch.d.ts +50 -0
- package/dist/commands/launch.js +790 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/lens.d.ts +45 -0
- package/dist/commands/lens.js +386 -0
- package/dist/commands/lens.js.map +1 -0
- package/dist/commands/market.d.ts +209 -0
- package/dist/commands/market.js +1368 -0
- package/dist/commands/market.js.map +1 -0
- package/dist/commands/mcp.d.ts +42 -0
- package/dist/commands/mcp.js +184 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/observe.d.ts +9 -0
- package/dist/commands/observe.js +93 -0
- package/dist/commands/observe.js.map +1 -0
- package/dist/commands/open.d.ts +32 -0
- package/dist/commands/open.js +85 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/pod.d.ts +100 -0
- package/dist/commands/pod.js +359 -0
- package/dist/commands/pod.js.map +1 -0
- package/dist/commands/pods.d.ts +6 -0
- package/dist/commands/pods.js +160 -50
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.d.ts +7 -0
- package/dist/commands/proposals-actions.js +77 -0
- package/dist/commands/proposals-actions.js.map +1 -0
- package/dist/commands/providers.d.ts +38 -0
- package/dist/commands/providers.js +170 -0
- package/dist/commands/providers.js.map +1 -0
- package/dist/commands/purge.d.ts +23 -0
- package/dist/commands/purge.js +148 -0
- package/dist/commands/purge.js.map +1 -0
- package/dist/commands/raycast.d.ts +15 -0
- package/dist/commands/raycast.js +153 -0
- package/dist/commands/raycast.js.map +1 -0
- package/dist/commands/sessions.d.ts +31 -0
- package/dist/commands/sessions.js +248 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/skill-manage.d.ts +21 -0
- package/dist/commands/skill-manage.js +195 -0
- package/dist/commands/skill-manage.js.map +1 -0
- package/dist/commands/skills-commands.d.ts +26 -0
- package/dist/commands/skills-commands.js +187 -0
- package/dist/commands/skills-commands.js.map +1 -0
- package/dist/commands/skills.d.ts +26 -0
- package/dist/commands/skills.js +196 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +3 -1
- package/dist/commands/status.js +231 -41
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.d.ts +24 -0
- package/dist/commands/statusline.js +450 -0
- package/dist/commands/statusline.js.map +1 -0
- package/dist/commands/subscribe.d.ts +19 -0
- package/dist/commands/subscribe.js +91 -0
- package/dist/commands/subscribe.js.map +1 -0
- package/dist/commands/tools.d.ts +30 -0
- package/dist/commands/tools.js +315 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/versions.d.ts +27 -0
- package/dist/commands/versions.js +277 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/commands/view.d.ts +57 -0
- package/dist/commands/view.js +195 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/commands/whoami.d.ts +21 -0
- package/dist/commands/whoami.js +129 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.js +1524 -202
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-templates.d.ts +25 -0
- package/dist/lib/agent-templates.js +148 -0
- package/dist/lib/agent-templates.js.map +1 -0
- package/dist/lib/agents-config.d.ts +4 -1
- package/dist/lib/agents-config.js +19 -2
- package/dist/lib/agents-config.js.map +1 -1
- package/dist/lib/approval-poll.d.ts +42 -0
- package/dist/lib/approval-poll.js +52 -0
- package/dist/lib/approval-poll.js.map +1 -0
- package/dist/lib/auth.d.ts +29 -6
- package/dist/lib/auth.js +105 -94
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/bundle-version.d.ts +11 -0
- package/dist/lib/bundle-version.js +33 -0
- package/dist/lib/bundle-version.js.map +1 -0
- package/dist/lib/capture-lane.d.ts +67 -0
- package/dist/lib/capture-lane.js +136 -0
- package/dist/lib/capture-lane.js.map +1 -0
- package/dist/lib/cp-packages.d.ts +121 -0
- package/dist/lib/cp-packages.js +218 -0
- package/dist/lib/cp-packages.js.map +1 -0
- package/dist/lib/describe-lens.d.ts +46 -0
- package/dist/lib/describe-lens.js +33 -0
- package/dist/lib/describe-lens.js.map +1 -0
- package/dist/lib/hub-client.d.ts +84 -1
- package/dist/lib/hub-client.js +502 -22
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/installed.d.ts +51 -0
- package/dist/lib/installed.js +70 -0
- package/dist/lib/installed.js.map +1 -0
- package/dist/lib/next-steps.d.ts +61 -0
- package/dist/lib/next-steps.js +146 -0
- package/dist/lib/next-steps.js.map +1 -0
- package/dist/lib/pod.d.ts +104 -19
- package/dist/lib/pod.js +245 -57
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/project-ref.d.ts +95 -0
- package/dist/lib/project-ref.js +144 -0
- package/dist/lib/project-ref.js.map +1 -0
- package/dist/lib/project.d.ts +35 -0
- package/dist/lib/project.js +39 -0
- package/dist/lib/project.js.map +1 -0
- package/dist/lib/session-lens.d.ts +33 -0
- package/dist/lib/session-lens.js +76 -0
- package/dist/lib/session-lens.js.map +1 -0
- package/dist/lib/skill-import.d.ts +40 -0
- package/dist/lib/skill-import.js +203 -0
- package/dist/lib/skill-import.js.map +1 -0
- package/dist/lib/skills-installer.d.ts +16 -5
- package/dist/lib/skills-installer.js +132 -18
- package/dist/lib/skills-installer.js.map +1 -1
- package/dist/lib/suite.d.ts +28 -0
- package/dist/lib/suite.js +29 -0
- package/dist/lib/suite.js.map +1 -0
- package/dist/lib/superwhisper-import.d.ts +40 -0
- package/dist/lib/superwhisper-import.js +389 -0
- package/dist/lib/superwhisper-import.js.map +1 -0
- package/dist/lib/targets.d.ts +66 -2
- package/dist/lib/targets.js +914 -132
- package/dist/lib/targets.js.map +1 -1
- package/dist/lib/unwrapList.d.ts +1 -0
- package/dist/lib/unwrapList.js +20 -0
- package/dist/lib/unwrapList.js.map +1 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.js +10 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +10 -4
- package/skills/agent-os/SKILL.md +212 -0
- package/skills/manifest.json +5 -0
- package/skills/onboard/SKILL.md +186 -0
- package/skills/synap/SKILL.md +1524 -104
- package/skills/synap/_order.txt +37 -0
- package/skills/synap/_skill.yaml +24 -0
- package/skills/synap/authentication.md +10 -0
- package/skills/synap/automations.md +264 -0
- package/skills/synap/capabilities.md +107 -0
- package/skills/synap/capture.md +10 -0
- package/skills/synap/cli-operations.md +107 -0
- package/skills/synap/common-mistakes.md +12 -0
- package/skills/synap/creative-loop.md +43 -0
- package/skills/synap/crm.md +117 -0
- package/skills/synap/diagnostics.md +35 -0
- package/skills/synap/digesting-a-channel.md +38 -0
- package/skills/synap/document-embeds.md +123 -0
- package/skills/synap/escalation-ladder.md +71 -0
- package/skills/synap/focus-sessions.md +47 -0
- package/skills/synap/governance-rules.md +64 -0
- package/skills/synap/governance.md +6 -6
- package/skills/synap/graph-gardening.md +21 -0
- package/skills/synap/inline-patterns.md +38 -0
- package/skills/synap/lenses.md +38 -0
- package/skills/synap/linking-principle.md +39 -0
- package/skills/synap/linking.md +1 -0
- package/skills/synap/mental-model.md +45 -0
- package/skills/synap/more.md +7 -0
- package/skills/synap/multi-entity-capture.md +10 -0
- package/skills/synap/next-action.md +37 -0
- package/skills/synap/north-star.md +17 -0
- package/skills/synap/operating-mode-rules.md +45 -0
- package/skills/synap/operating-mode.md +9 -0
- package/skills/synap/quick-reference.md +67 -0
- package/skills/synap/reading.md +43 -0
- package/skills/synap/recap.md +21 -0
- package/skills/synap/reflexes.md +46 -0
- package/skills/synap/response-style.md +21 -0
- package/skills/synap/scope.md +13 -0
- package/skills/synap/showing.md +17 -0
- package/skills/synap/user-model.md +25 -0
- package/skills/synap/viewframe-cells.md +290 -0
- package/skills/synap/work-flow.md +113 -0
- package/skills/synap/worked-examples.md +53 -0
- package/skills/synap/workspace-design.md +45 -0
- package/skills/synap/workspace-edges.md +49 -0
- package/skills/synap/writes.md +156 -0
- package/skills/synap-schema/SKILL.md +97 -6
- package/skills/synap-schema/_order.txt +13 -0
- package/skills/synap-schema/_skill.yaml +22 -0
- package/skills/synap-schema/before-you-touch.md +14 -0
- package/skills/synap-schema/common-mistakes.md +9 -0
- package/skills/synap-schema/creating-profiles.md +17 -0
- package/skills/synap-schema/discover-profiles.md +24 -0
- package/skills/synap-schema/entity-scope.md +8 -0
- package/skills/synap-schema/extend-vs-create.md +31 -0
- package/skills/synap-schema/more.md +6 -0
- package/skills/synap-schema/overlay-properties.md +22 -0
- package/skills/synap-schema/profiles.md +3 -0
- package/skills/synap-schema/property-defs.md +29 -0
- package/skills/synap-schema/read-before-write.md +50 -0
- package/skills/synap-schema/relations.md +18 -0
- package/skills/synap-schema/worked-example.md +30 -0
- package/skills/synap-ui/SKILL.md +38 -11
- package/skills/synap-ui/_order.txt +13 -0
- package/skills/synap-ui/_skill.yaml +23 -0
- package/skills/synap-ui/ai-companion.md +27 -0
- package/skills/synap-ui/arranging-bento.md +8 -0
- package/skills/synap-ui/before-you-build.md +20 -0
- package/skills/synap-ui/bento-layouts.md +35 -0
- package/skills/synap-ui/common-mistakes.md +10 -0
- package/skills/synap-ui/creating-views.md +26 -0
- package/skills/synap-ui/four-builds.md +24 -0
- package/skills/synap-ui/more.md +7 -0
- package/skills/synap-ui/proposing-vs-extending.md +11 -0
- package/skills/synap-ui/view-list.md +24 -0
- package/skills/synap-ui/views.md +3 -0
- package/skills/synap-ui/worked-example.md +18 -0
- package/skills/synap-ui/workspaces.md +47 -0
- package/templates/automations/bookmark-enrichment.automation.json +44 -0
- package/templates/automations/mail-feed.automation.json +86 -0
- package/templates/automations/url-bookmark-capture.automation.json +70 -0
- package/templates/skills/README.md +21 -0
- package/templates/skills/authoring-automations/SKILL.md +95 -0
- package/templates/skills/authoring-automations/reference/node-matrix.md +49 -0
- package/templates/skills/authoring-capabilities/SKILL.md +93 -0
- package/templates/skills/authoring-capabilities/reference/template-anatomy.md +70 -0
- package/templates/skills/authoring-playbooks/SKILL.md +102 -0
- package/templates/skills/authoring-playbooks/reference/stages-contract.md +35 -0
- package/templates/skills/authoring-playbooks/reference/worked-example.md +64 -0
- package/templates/skills/bookmark-enrichment/SKILL.md +40 -0
- package/templates/skills/coordinating-agents/SKILL.md +32 -0
- package/templates/skills/coordinating-branches/SKILL.md +27 -0
- package/templates/skills/mapping-the-server/SKILL.md +54 -0
- package/templates/skills/reading-client-progress/SKILL.md +65 -0
- package/templates/skills/routing-to-channels/SKILL.md +54 -0
- package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
- package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
- package/templates/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
- package/templates/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
- package/templates/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
- package/templates/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
- package/templates/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
- package/dist/commands/finish.d.ts +0 -25
- package/dist/commands/finish.js +0 -274
- package/dist/commands/finish.js.map +0 -1
- package/dist/commands/openclaw.d.ts +0 -40
- package/dist/commands/openclaw.js +0 -1148
- package/dist/commands/openclaw.js.map +0 -1
- package/dist/commands/security-audit.d.ts +0 -12
- package/dist/commands/security-audit.js +0 -100
- package/dist/commands/security-audit.js.map +0 -1
- package/dist/lib/hardening.d.ts +0 -18
- package/dist/lib/hardening.js +0 -214
- package/dist/lib/hardening.js.map +0 -1
- package/dist/lib/templates.d.ts +0 -11
- package/dist/lib/templates.js +0 -13
- package/dist/lib/templates.js.map +0 -1
- package/dist/templates/agent-os.json +0 -3090
- package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -881
- package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -907
- package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -907
- package/node_modules/@synap/hub-rest-client/dist/index.js +0 -851
- package/node_modules/@synap/hub-rest-client/package.json +0 -45
- package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1143
- package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
- package/node_modules/@synap/hub-rest-client/src/index.ts +0 -111
- package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -77
- package/node_modules/@synap/hub-rest-client/src/types.ts +0 -639
package/dist/lib/hub-client.js
CHANGED
|
@@ -1,6 +1,228 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, unlinkSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { getActivePodConfig, getActiveWorkspaceId, getActiveProjectId, listPodProfiles, getPodOverride, getSurfaceAgentKey } from "./pod.js";
|
|
2
4
|
import { resolveAgentOverride } from "./agents-config.js";
|
|
5
|
+
import { resolveActiveLens } from "./session-lens.js";
|
|
3
6
|
import { HubRestClient } from "@synap/hub-rest-client";
|
|
7
|
+
import { log } from "../utils/logger.js";
|
|
8
|
+
/**
|
|
9
|
+
* A failed Hub call, carrying the structured facts callers need to branch on.
|
|
10
|
+
*
|
|
11
|
+
* `message` is HUMAN-READABLE and is what the many `log.error((err as Error).message)`
|
|
12
|
+
* sites print. It keeps a literal `(HTTP <status>)` token: several call sites
|
|
13
|
+
* classify errors by matching that substring, and the token is the contract they
|
|
14
|
+
* depend on. The raw response body is kept on `rawBody` and never spliced into
|
|
15
|
+
* `message` — a JSON blob truncated mid-object is unreadable and leaks internals.
|
|
16
|
+
*/
|
|
17
|
+
export class HubError extends Error {
|
|
18
|
+
status;
|
|
19
|
+
code;
|
|
20
|
+
reason;
|
|
21
|
+
body;
|
|
22
|
+
rawBody;
|
|
23
|
+
path;
|
|
24
|
+
method;
|
|
25
|
+
constructor(init) {
|
|
26
|
+
super(init.message);
|
|
27
|
+
this.name = "HubError";
|
|
28
|
+
this.status = init.status;
|
|
29
|
+
this.code = init.code;
|
|
30
|
+
this.reason = init.reason;
|
|
31
|
+
this.body = init.body;
|
|
32
|
+
this.rawBody = init.rawBody;
|
|
33
|
+
this.path = init.path;
|
|
34
|
+
this.method = init.method;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A Hub call that never reached the pod — DNS, TCP, TLS or timeout.
|
|
39
|
+
*
|
|
40
|
+
* Peer of {@link HubError}: same rendering path, same `message`-is-human-readable
|
|
41
|
+
* rule. It deliberately carries NO `(HTTP <status>)` token — there was no HTTP
|
|
42
|
+
* response, and the call sites that classify on that substring must not match.
|
|
43
|
+
* `podUrl` is the origin we failed to reach and `hint` is the next action.
|
|
44
|
+
*/
|
|
45
|
+
export class HubNetworkError extends Error {
|
|
46
|
+
/** Transport code we classified on: ENOTFOUND, ECONNREFUSED, TIMEOUT, TLS… */
|
|
47
|
+
code;
|
|
48
|
+
podUrl;
|
|
49
|
+
path;
|
|
50
|
+
method;
|
|
51
|
+
/** The one thing the user should do next. Rendered under the message. */
|
|
52
|
+
hint;
|
|
53
|
+
constructor(init) {
|
|
54
|
+
super(init.message, { cause: init.cause });
|
|
55
|
+
this.name = "HubNetworkError";
|
|
56
|
+
this.code = init.code;
|
|
57
|
+
this.podUrl = init.podUrl;
|
|
58
|
+
this.path = init.path;
|
|
59
|
+
this.method = init.method;
|
|
60
|
+
this.hint = init.hint;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Origin of a Hub URL, for messages. Falls back to the raw URL if unparseable. */
|
|
64
|
+
function originOf(url) {
|
|
65
|
+
try {
|
|
66
|
+
return new URL(url).origin;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return url;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Classify a transport-layer failure into a HubNetworkError.
|
|
74
|
+
*
|
|
75
|
+
* undici throws a bare `TypeError: fetch failed` and hangs the real cause off
|
|
76
|
+
* `err.cause`, so a wrong DNS name, a pod that is down, an offline laptop and a
|
|
77
|
+
* fired AbortSignal.timeout are otherwise indistinguishable at the call sites
|
|
78
|
+
* that print `err.message`. This is the one place that taxonomy lives.
|
|
79
|
+
*/
|
|
80
|
+
function networkError(err, url, method, path, timeoutMs) {
|
|
81
|
+
const podUrl = originOf(url);
|
|
82
|
+
const name = err instanceof Error ? err.name : "";
|
|
83
|
+
const cause = err?.cause;
|
|
84
|
+
const rawCode = cause && typeof cause === "object" && typeof cause.code === "string"
|
|
85
|
+
? (cause.code)
|
|
86
|
+
: "";
|
|
87
|
+
const fail = (code, detail, hint) => new HubNetworkError({
|
|
88
|
+
message: `Hub ${method} ${path} failed: ${detail}`,
|
|
89
|
+
code,
|
|
90
|
+
podUrl,
|
|
91
|
+
path,
|
|
92
|
+
method,
|
|
93
|
+
hint,
|
|
94
|
+
cause: err,
|
|
95
|
+
});
|
|
96
|
+
// AbortSignal.timeout() rejects with a TimeoutError; undici's own connect/header
|
|
97
|
+
// timeouts surface as codes. Both mean the same thing to the user.
|
|
98
|
+
if (name === "TimeoutError" ||
|
|
99
|
+
name === "AbortError" ||
|
|
100
|
+
rawCode === "ETIMEDOUT" ||
|
|
101
|
+
rawCode === "UND_ERR_CONNECT_TIMEOUT" ||
|
|
102
|
+
rawCode === "UND_ERR_HEADERS_TIMEOUT") {
|
|
103
|
+
return fail("TIMEOUT", `no response from the pod at ${podUrl} after ${Math.round(timeoutMs / 1000)}s`, "The pod accepted the connection but did not answer in time — it may be overloaded or mid-restart. Check it with: synap status");
|
|
104
|
+
}
|
|
105
|
+
if (rawCode === "ENOTFOUND" || rawCode === "EAI_AGAIN") {
|
|
106
|
+
return fail(rawCode, `could not resolve the pod host for ${podUrl}`, rawCode === "EAI_AGAIN"
|
|
107
|
+
? "DNS lookup failed temporarily — check this machine is online, then retry."
|
|
108
|
+
: "That hostname does not resolve — check the pod URL is spelled right. See your saved pods with: synap pods list");
|
|
109
|
+
}
|
|
110
|
+
if (rawCode === "ECONNREFUSED") {
|
|
111
|
+
return fail(rawCode, `the pod at ${podUrl} refused the connection`, "Nothing is listening there — check the pod is up, or switch to another saved pod with: synap pods use <name>");
|
|
112
|
+
}
|
|
113
|
+
if (rawCode === "ECONNRESET" || rawCode === "EPIPE") {
|
|
114
|
+
return fail(rawCode, `the connection to ${podUrl} was dropped mid-request`, "The pod or a proxy in front of it closed the connection — retry, then check the pod with: synap status");
|
|
115
|
+
}
|
|
116
|
+
if (rawCode === "ENETUNREACH" || rawCode === "EHOSTUNREACH") {
|
|
117
|
+
return fail(rawCode, `no network route to ${podUrl}`, "This machine cannot reach that host — check you are online and on the right network/VPN.");
|
|
118
|
+
}
|
|
119
|
+
if (rawCode.startsWith("CERT_") || rawCode.startsWith("ERR_TLS_") || rawCode.includes("SELF_SIGNED") || rawCode === "UNABLE_TO_VERIFY_LEAF_SIGNATURE" || rawCode === "DEPTH_ZERO_SELF_SIGNED_CERT") {
|
|
120
|
+
return fail(rawCode, `the TLS certificate of ${podUrl} was rejected (${rawCode})`, "The pod's certificate is not trusted by this machine — check the pod URL and its TLS setup.");
|
|
121
|
+
}
|
|
122
|
+
// Unknown transport failure: still name the pod and the underlying code rather
|
|
123
|
+
// than letting a bare "fetch failed" through.
|
|
124
|
+
const detail = rawCode
|
|
125
|
+
? `could not reach the pod at ${podUrl} (${rawCode})`
|
|
126
|
+
: `could not reach the pod at ${podUrl}`;
|
|
127
|
+
return fail(rawCode || "NETWORK", detail, "Check this machine is online and the pod URL is right: synap pods list");
|
|
128
|
+
}
|
|
129
|
+
/** Fallback wording when the body carries no usable message of its own. */
|
|
130
|
+
function statusPhrase(status) {
|
|
131
|
+
if (status >= 500)
|
|
132
|
+
return "the pod hit an internal error";
|
|
133
|
+
switch (status) {
|
|
134
|
+
case 400:
|
|
135
|
+
return "the pod rejected the request as invalid";
|
|
136
|
+
case 401:
|
|
137
|
+
return "the pod did not accept these credentials";
|
|
138
|
+
case 403:
|
|
139
|
+
return "the pod refused this operation";
|
|
140
|
+
case 404:
|
|
141
|
+
return "the pod has no such endpoint or record";
|
|
142
|
+
case 409:
|
|
143
|
+
return "this conflicts with what the pod already has";
|
|
144
|
+
case 429:
|
|
145
|
+
return "the pod is rate limiting this key";
|
|
146
|
+
default:
|
|
147
|
+
return "the pod returned an unexpected status";
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Turn a raw error body into { detail, code, reason, parsed }.
|
|
152
|
+
* JSON bodies contribute only their `message`/`error` field; a JSON body with
|
|
153
|
+
* neither falls back to the status phrase rather than dumping the object.
|
|
154
|
+
*/
|
|
155
|
+
function readErrorBody(status, rawBody) {
|
|
156
|
+
const trimmed = rawBody.trim();
|
|
157
|
+
if (!trimmed)
|
|
158
|
+
return { detail: statusPhrase(status) };
|
|
159
|
+
let parsed;
|
|
160
|
+
try {
|
|
161
|
+
parsed = JSON.parse(trimmed);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Plain-text body (Hono default, a proxy page): safe to show inline — it is
|
|
165
|
+
// not structured, so a length cap cannot cut it mid-object.
|
|
166
|
+
const oneLine = trimmed.replace(/\s+/g, " ");
|
|
167
|
+
return { detail: oneLine.length > 200 ? `${oneLine.slice(0, 200)}…` : oneLine };
|
|
168
|
+
}
|
|
169
|
+
if (parsed && typeof parsed === "object") {
|
|
170
|
+
const o = parsed;
|
|
171
|
+
const code = typeof o.code === "string" ? o.code : undefined;
|
|
172
|
+
const reason = typeof o.reason === "string" ? o.reason : undefined;
|
|
173
|
+
const detail = typeof o.message === "string" && o.message
|
|
174
|
+
? o.message
|
|
175
|
+
: typeof o.error === "string" && o.error
|
|
176
|
+
? o.error
|
|
177
|
+
: statusPhrase(status);
|
|
178
|
+
return { detail, code, reason, parsed };
|
|
179
|
+
}
|
|
180
|
+
return { detail: statusPhrase(status), parsed };
|
|
181
|
+
}
|
|
182
|
+
/** Build the HubError for a non-ok response body. */
|
|
183
|
+
function hubError(method, path, status, rawBody, suffix) {
|
|
184
|
+
const { detail, code, reason, parsed } = readErrorBody(status, rawBody);
|
|
185
|
+
return new HubError({
|
|
186
|
+
message: `Hub ${method} ${path} failed (HTTP ${status})${suffix ? ` ${suffix}` : ""}: ${detail}`,
|
|
187
|
+
status,
|
|
188
|
+
code,
|
|
189
|
+
reason,
|
|
190
|
+
body: parsed,
|
|
191
|
+
rawBody,
|
|
192
|
+
path,
|
|
193
|
+
method,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Print a failed Hub call: its humanized message plus a hint for the classes
|
|
198
|
+
* where the cause is not obvious from the message alone. Lives here rather than
|
|
199
|
+
* in utils/logger so the logger stays domain-agnostic and the taxonomy and its
|
|
200
|
+
* presentation sit in one file.
|
|
201
|
+
*/
|
|
202
|
+
export function renderHubError(err) {
|
|
203
|
+
// Hints use log.hint (stderr), not log.dim (stdout): a hint belongs to the
|
|
204
|
+
// error it explains, and splitting one message across two streams means
|
|
205
|
+
// `2>/dev/null` shows a bare hint with no error above it.
|
|
206
|
+
if (err instanceof HubNetworkError) {
|
|
207
|
+
log.error(err.message);
|
|
208
|
+
log.hint(err.hint);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (!(err instanceof HubError)) {
|
|
212
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
log.error(err.message);
|
|
216
|
+
if (err.status >= 500) {
|
|
217
|
+
log.hint("The pod hit an internal error — this is a fault on the pod side, not in this command.");
|
|
218
|
+
}
|
|
219
|
+
else if (err.status === 401 || err.status === 403) {
|
|
220
|
+
log.hint("The pod rejected this key's credentials or its scopes for this operation.");
|
|
221
|
+
}
|
|
222
|
+
else if (err.status === 404) {
|
|
223
|
+
log.hint("The pod has no such endpoint or record — it may be running an older build.");
|
|
224
|
+
}
|
|
225
|
+
}
|
|
4
226
|
const userIdCache = new Map();
|
|
5
227
|
export async function resolveUserId(cfg) {
|
|
6
228
|
if (cfg.userId && cfg.userId !== "cli")
|
|
@@ -23,6 +245,21 @@ export function assertScope(cfg, required) {
|
|
|
23
245
|
}
|
|
24
246
|
}
|
|
25
247
|
export async function resolveHubConfig(opts) {
|
|
248
|
+
// 0. Per-invocation `--pod <name>` override (highest precedence): a single
|
|
249
|
+
// command targets another saved pod while other agents keep their default.
|
|
250
|
+
// Beats the env vars deliberately — that is the whole point of the flag.
|
|
251
|
+
const podOverride = getPodOverride();
|
|
252
|
+
if (podOverride) {
|
|
253
|
+
return {
|
|
254
|
+
podUrl: podOverride.podUrl,
|
|
255
|
+
apiKey: podOverride.hubApiKey,
|
|
256
|
+
// A profile's agentUserId may be empty; "cli" makes resolveUserId fetch /users/me.
|
|
257
|
+
userId: podOverride.agentUserId || "cli",
|
|
258
|
+
// Use the TARGET pod's own workspace — NOT this session's lens, which
|
|
259
|
+
// belongs to the default pod and would be meaningless on the target.
|
|
260
|
+
workspaceId: podOverride.workspaceId || undefined,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
26
263
|
// 1. Explicit flags (escape hatch)
|
|
27
264
|
if (opts?.podUrl && opts?.apiKey) {
|
|
28
265
|
return {
|
|
@@ -51,12 +288,33 @@ export async function resolveHubConfig(opts) {
|
|
|
51
288
|
const envUser = process.env.SYNAP_USER_ID;
|
|
52
289
|
const envScopes = process.env.SYNAP_KEY_SCOPES;
|
|
53
290
|
const envWorkspace = process.env.SYNAP_WORKSPACE_ID;
|
|
291
|
+
const envProject = process.env.SYNAP_PROJECT_ID;
|
|
54
292
|
if (envPod && envKey && envUser) {
|
|
293
|
+
// Surface-bound resolution guard: if this pod has a `claude-code` surface
|
|
294
|
+
// key pinned to it (via `synap connect --target=claude-code`) and the
|
|
295
|
+
// ambient SYNAP_HUB_API_KEY doesn't match it, the session inherited a
|
|
296
|
+
// FOREIGN key (e.g. another agent's, like the Discord bridge's) — prefer
|
|
297
|
+
// the pinned key so a leaked/inherited env var can't silently redefine
|
|
298
|
+
// which agent this session acts as. Conservative: only applies here, in
|
|
299
|
+
// step 3 — steps 0-2 (--pod, explicit flags, SYNAP_AGENT) still win
|
|
300
|
+
// outright, untouched.
|
|
301
|
+
const surfaceKey = getSurfaceAgentKey("claude-code");
|
|
302
|
+
let apiKey = envKey;
|
|
303
|
+
let userId = envUser;
|
|
304
|
+
if (surfaceKey && surfaceKey.podUrl === envPod && surfaceKey.hubApiKey && surfaceKey.hubApiKey !== envKey) {
|
|
305
|
+
process.stderr.write(`[synap] warning: ambient SYNAP_HUB_API_KEY does not match the claude-code surface key pinned to ${envPod} — using the pinned key instead of the inherited one.\n`);
|
|
306
|
+
apiKey = surfaceKey.hubApiKey;
|
|
307
|
+
userId = surfaceKey.agentUserId || envUser;
|
|
308
|
+
}
|
|
55
309
|
return {
|
|
56
310
|
podUrl: envPod,
|
|
57
|
-
apiKey
|
|
58
|
-
userId
|
|
59
|
-
|
|
311
|
+
apiKey,
|
|
312
|
+
userId,
|
|
313
|
+
// Per-Claude-session lens wins over the global env var, so concurrent
|
|
314
|
+
// sessions can each be scoped to a different workspace.
|
|
315
|
+
workspaceId: resolveActiveLens()?.workspaceId || envWorkspace || getActiveWorkspaceId(),
|
|
316
|
+
// Project is a peer lens, threaded exactly like workspaceId.
|
|
317
|
+
projectId: resolveActiveLens()?.projectId || envProject || getActiveProjectId(),
|
|
60
318
|
scopes: envScopes ? envScopes.split(",") : undefined,
|
|
61
319
|
};
|
|
62
320
|
}
|
|
@@ -68,51 +326,273 @@ export async function resolveHubConfig(opts) {
|
|
|
68
326
|
podUrl: config.podUrl,
|
|
69
327
|
apiKey: config.hubApiKey,
|
|
70
328
|
userId: config.agentUserId,
|
|
71
|
-
workspaceId: getActiveWorkspaceId(),
|
|
329
|
+
workspaceId: resolveActiveLens()?.workspaceId || getActiveWorkspaceId(),
|
|
330
|
+
projectId: resolveActiveLens()?.projectId || getActiveProjectId(),
|
|
72
331
|
};
|
|
73
332
|
}
|
|
333
|
+
const SESSION_FILE = ".synap-session";
|
|
334
|
+
/** Read the active session ID for this terminal from CWD or env var. */
|
|
335
|
+
export function readActiveSessionId() {
|
|
336
|
+
const fromEnv = process.env.SYNAP_SESSION_ID;
|
|
337
|
+
if (fromEnv)
|
|
338
|
+
return fromEnv;
|
|
339
|
+
const filePath = join(process.cwd(), SESSION_FILE);
|
|
340
|
+
if (existsSync(filePath)) {
|
|
341
|
+
return readFileSync(filePath, "utf8").trim() || undefined;
|
|
342
|
+
}
|
|
343
|
+
return undefined;
|
|
344
|
+
}
|
|
345
|
+
/** Attach a session to this terminal — writes .synap-session in CWD. */
|
|
346
|
+
export function writeActiveSessionId(sessionId) {
|
|
347
|
+
writeFileSync(join(process.cwd(), SESSION_FILE), sessionId, "utf8");
|
|
348
|
+
}
|
|
349
|
+
/** Detach the active session from this terminal — removes .synap-session. */
|
|
350
|
+
export function clearActiveSessionId() {
|
|
351
|
+
const filePath = join(process.cwd(), SESSION_FILE);
|
|
352
|
+
if (existsSync(filePath))
|
|
353
|
+
unlinkSync(filePath);
|
|
354
|
+
}
|
|
355
|
+
function sessionHeaders() {
|
|
356
|
+
// Per-Claude-session lens wins; fall back to the legacy per-CWD .synap-session.
|
|
357
|
+
const id = resolveActiveLens()?.focusSessionId || readActiveSessionId();
|
|
358
|
+
return id ? { "X-Session-Id": id } : {};
|
|
359
|
+
}
|
|
360
|
+
/** Max 429 retries for bulk import (each waits up to the rate-limit window). */
|
|
361
|
+
const HUB_429_MAX_RETRIES = 12;
|
|
362
|
+
/** Default wait when server gives no Retry-After (API-key window is 60s). */
|
|
363
|
+
const HUB_429_DEFAULT_WAIT_MS = 62_000;
|
|
364
|
+
/** Never sleep more than this on a single 429 (proxies sometimes send 180+). */
|
|
365
|
+
const HUB_429_MAX_WAIT_MS = 75_000;
|
|
366
|
+
/**
|
|
367
|
+
* Client-side request budget — stay UNDER the server limit so we rarely 429.
|
|
368
|
+
* Default 80/min is safe for pods still on the old 100/min auth limit.
|
|
369
|
+
* After deploying 1200/min server budget: `export SYNAP_HUB_RPM=1000`.
|
|
370
|
+
*/
|
|
371
|
+
function hubRpmBudget() {
|
|
372
|
+
const raw = process.env.SYNAP_HUB_RPM;
|
|
373
|
+
if (raw) {
|
|
374
|
+
const n = parseInt(raw, 10);
|
|
375
|
+
if (Number.isFinite(n) && n >= 10)
|
|
376
|
+
return Math.min(n, 5000);
|
|
377
|
+
}
|
|
378
|
+
return 80;
|
|
379
|
+
}
|
|
380
|
+
const hubRequestTimestamps = [];
|
|
381
|
+
function sleep(ms) {
|
|
382
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Pace Hub calls so we never burst past hubRpmBudget() in any 60s window.
|
|
386
|
+
* This is the primary bulk-import fix — reactive 429 sleep is the backup.
|
|
387
|
+
*/
|
|
388
|
+
async function acquireHubSlot() {
|
|
389
|
+
const rpm = hubRpmBudget();
|
|
390
|
+
for (;;) {
|
|
391
|
+
const now = Date.now();
|
|
392
|
+
while (hubRequestTimestamps.length > 0 &&
|
|
393
|
+
hubRequestTimestamps[0] < now - 60_000) {
|
|
394
|
+
hubRequestTimestamps.shift();
|
|
395
|
+
}
|
|
396
|
+
if (hubRequestTimestamps.length < rpm) {
|
|
397
|
+
hubRequestTimestamps.push(now);
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
const wait = hubRequestTimestamps[0] + 60_000 - now + 25;
|
|
401
|
+
if (wait > 500) {
|
|
402
|
+
console.error(`[hub] pacing: ${hubRequestTimestamps.length}/${rpm} req in last 60s — wait ${Math.ceil(wait / 1000)}s`);
|
|
403
|
+
}
|
|
404
|
+
await sleep(Math.max(wait, 50));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Parse Retry-After from headers or a Hub 429 body. Caps at 75s so a bad
|
|
409
|
+
* proxy header never parks the importer for 3 minutes.
|
|
410
|
+
*/
|
|
411
|
+
function retryAfterMs(res, bodyText) {
|
|
412
|
+
const h = res.headers.get("retry-after");
|
|
413
|
+
if (h) {
|
|
414
|
+
const sec = parseInt(h, 10);
|
|
415
|
+
if (Number.isFinite(sec) && sec > 0) {
|
|
416
|
+
return Math.min(Math.max(sec * 1000, 1_000), HUB_429_MAX_WAIT_MS);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const m = bodyText.match(/retry after\s+(\d+)\s*s/i);
|
|
420
|
+
if (m) {
|
|
421
|
+
const sec = parseInt(m[1], 10);
|
|
422
|
+
if (Number.isFinite(sec) && sec > 0) {
|
|
423
|
+
return Math.min(Math.max(sec * 1000, 1_000), HUB_429_MAX_WAIT_MS);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return HUB_429_DEFAULT_WAIT_MS;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* fetch with client pacing + automatic 429 backoff.
|
|
430
|
+
*
|
|
431
|
+
* `timeoutMs` mirrors the AbortSignal.timeout() the caller put on `init` — it is
|
|
432
|
+
* only used to say how long we waited when the signal fires.
|
|
433
|
+
*/
|
|
434
|
+
async function hubFetchWithRetry(url, init, label, timeoutMs) {
|
|
435
|
+
const [labelMethod, ...labelRest] = label.split(" ");
|
|
436
|
+
const labelPath = labelRest.join(" ");
|
|
437
|
+
let attempt = 0;
|
|
438
|
+
for (;;) {
|
|
439
|
+
await acquireHubSlot();
|
|
440
|
+
let res;
|
|
441
|
+
try {
|
|
442
|
+
res = await fetch(url, init);
|
|
443
|
+
}
|
|
444
|
+
catch (err) {
|
|
445
|
+
throw networkError(err, url, labelMethod, labelPath, timeoutMs);
|
|
446
|
+
}
|
|
447
|
+
if (res.status !== 429)
|
|
448
|
+
return res;
|
|
449
|
+
attempt++;
|
|
450
|
+
if (attempt > HUB_429_MAX_RETRIES) {
|
|
451
|
+
const bodyText = await res.text().catch(() => "");
|
|
452
|
+
throw hubError(labelMethod, labelPath, 429, bodyText, `after ${HUB_429_MAX_RETRIES} retries`);
|
|
453
|
+
}
|
|
454
|
+
const bodyText = await res.text().catch(() => "");
|
|
455
|
+
const wait = retryAfterMs(res, bodyText);
|
|
456
|
+
console.error(`[hub] 429 rate limit on ${label} — waiting ${Math.ceil(wait / 1000)}s (retry ${attempt}/${HUB_429_MAX_RETRIES})`);
|
|
457
|
+
await sleep(wait);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
74
460
|
export async function hubGet(path, params, cfg) {
|
|
75
461
|
const url = new URL(`${cfg.podUrl}/api/hub${path}`);
|
|
76
462
|
for (const [k, v] of Object.entries(params)) {
|
|
77
463
|
if (v !== undefined)
|
|
78
464
|
url.searchParams.set(k, String(v));
|
|
79
465
|
}
|
|
80
|
-
const res = await
|
|
81
|
-
headers: { Authorization: `Bearer ${cfg.apiKey}
|
|
466
|
+
const res = await hubFetchWithRetry(url.toString(), {
|
|
467
|
+
headers: { Authorization: `Bearer ${cfg.apiKey}`, ...sessionHeaders() },
|
|
82
468
|
signal: AbortSignal.timeout(15_000),
|
|
83
|
-
});
|
|
469
|
+
}, `GET ${path}`, 15_000);
|
|
84
470
|
if (!res.ok) {
|
|
85
471
|
const body = await res.text().catch(() => "");
|
|
86
|
-
throw
|
|
472
|
+
throw hubError("GET", path, res.status, body);
|
|
87
473
|
}
|
|
88
474
|
return res.json();
|
|
89
475
|
}
|
|
90
|
-
export async function hubPost(path, body, cfg
|
|
91
|
-
|
|
476
|
+
export async function hubPost(path, body, cfg,
|
|
477
|
+
// Default 15s suits CRUD doors. Capability runs invoke external provider APIs
|
|
478
|
+
// (often several sequential calls) and legitimately take longer — callers
|
|
479
|
+
// override (e.g. `cap run` passes 90s).
|
|
480
|
+
timeoutMs = 15_000) {
|
|
481
|
+
const res = await hubFetchWithRetry(`${cfg.podUrl}/api/hub${path}`, {
|
|
92
482
|
method: "POST",
|
|
93
|
-
headers: {
|
|
483
|
+
headers: {
|
|
484
|
+
Authorization: `Bearer ${cfg.apiKey}`,
|
|
485
|
+
"Content-Type": "application/json",
|
|
486
|
+
...sessionHeaders(),
|
|
487
|
+
},
|
|
94
488
|
body: JSON.stringify(body),
|
|
95
|
-
signal: AbortSignal.timeout(
|
|
96
|
-
});
|
|
489
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
490
|
+
}, `POST ${path}`, timeoutMs);
|
|
97
491
|
if (!res.ok) {
|
|
98
492
|
const bodyText = await res.text().catch(() => "");
|
|
99
|
-
throw
|
|
493
|
+
throw hubError("POST", path, res.status, bodyText);
|
|
100
494
|
}
|
|
101
495
|
return res.json();
|
|
102
496
|
}
|
|
497
|
+
/**
|
|
498
|
+
* Multipart POST for Hub doors that accept file uploads (e.g. source-file).
|
|
499
|
+
* Do NOT set Content-Type — fetch sets the boundary for FormData.
|
|
500
|
+
*
|
|
501
|
+
* Note: on 429 retry we cannot re-use a consumed FormData body in all runtimes.
|
|
502
|
+
* Callers that hit 429 mid-bulk should rebuild FormData — see hubPostMultipartRetryable.
|
|
503
|
+
*/
|
|
504
|
+
export async function hubPostMultipart(path, form, cfg, timeoutMs = 120_000) {
|
|
505
|
+
const res = await hubFetchWithRetry(`${cfg.podUrl}/api/hub${path}`, {
|
|
506
|
+
method: "POST",
|
|
507
|
+
headers: { Authorization: `Bearer ${cfg.apiKey}`, ...sessionHeaders() },
|
|
508
|
+
body: form,
|
|
509
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
510
|
+
}, `POST multipart ${path}`, timeoutMs);
|
|
511
|
+
if (!res.ok) {
|
|
512
|
+
const bodyText = await res.text().catch(() => "");
|
|
513
|
+
throw hubError("POST multipart", path, res.status, bodyText);
|
|
514
|
+
}
|
|
515
|
+
return res.json();
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Multipart POST that rebuilds the body on each 429 retry (FormData streams
|
|
519
|
+
* can only be read once).
|
|
520
|
+
*/
|
|
521
|
+
export async function hubPostMultipartRetryable(path, buildForm, cfg, timeoutMs = 120_000) {
|
|
522
|
+
let attempt = 0;
|
|
523
|
+
for (;;) {
|
|
524
|
+
await acquireHubSlot();
|
|
525
|
+
const form = buildForm();
|
|
526
|
+
const url = `${cfg.podUrl}/api/hub${path}`;
|
|
527
|
+
let res;
|
|
528
|
+
try {
|
|
529
|
+
res = await fetch(url, {
|
|
530
|
+
method: "POST",
|
|
531
|
+
headers: { Authorization: `Bearer ${cfg.apiKey}`, ...sessionHeaders() },
|
|
532
|
+
body: form,
|
|
533
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
catch (err) {
|
|
537
|
+
throw networkError(err, url, "POST multipart", path, timeoutMs);
|
|
538
|
+
}
|
|
539
|
+
if (res.status !== 429) {
|
|
540
|
+
if (!res.ok) {
|
|
541
|
+
const bodyText = await res.text().catch(() => "");
|
|
542
|
+
throw hubError("POST multipart", path, res.status, bodyText);
|
|
543
|
+
}
|
|
544
|
+
return res.json();
|
|
545
|
+
}
|
|
546
|
+
attempt++;
|
|
547
|
+
if (attempt > HUB_429_MAX_RETRIES) {
|
|
548
|
+
const bodyText = await res.text().catch(() => "");
|
|
549
|
+
throw hubError("POST multipart", path, 429, bodyText, `after ${HUB_429_MAX_RETRIES} retries`);
|
|
550
|
+
}
|
|
551
|
+
const bodyText = await res.text().catch(() => "");
|
|
552
|
+
const wait = retryAfterMs(res, bodyText);
|
|
553
|
+
console.error(`[hub] 429 rate limit on POST multipart ${path} — waiting ${Math.ceil(wait / 1000)}s (retry ${attempt}/${HUB_429_MAX_RETRIES})`);
|
|
554
|
+
await sleep(wait);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
103
557
|
export async function hubPatch(path, body, cfg) {
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
558
|
+
const url = `${cfg.podUrl}/api/hub${path}`;
|
|
559
|
+
let res;
|
|
560
|
+
try {
|
|
561
|
+
res = await fetch(url, {
|
|
562
|
+
method: "PATCH",
|
|
563
|
+
headers: { Authorization: `Bearer ${cfg.apiKey}`, "Content-Type": "application/json", ...sessionHeaders() },
|
|
564
|
+
body: JSON.stringify(body),
|
|
565
|
+
signal: AbortSignal.timeout(15_000),
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
catch (err) {
|
|
569
|
+
throw networkError(err, url, "PATCH", path, 15_000);
|
|
570
|
+
}
|
|
110
571
|
if (!res.ok) {
|
|
111
572
|
const bodyText = await res.text().catch(() => "");
|
|
112
|
-
throw
|
|
573
|
+
throw hubError("PATCH", path, res.status, bodyText);
|
|
113
574
|
}
|
|
114
575
|
return res.json();
|
|
115
576
|
}
|
|
577
|
+
export async function hubDelete(path, cfg) {
|
|
578
|
+
const url = `${cfg.podUrl}/api/hub${path}`;
|
|
579
|
+
let res;
|
|
580
|
+
try {
|
|
581
|
+
res = await fetch(url, {
|
|
582
|
+
method: "DELETE",
|
|
583
|
+
headers: { Authorization: `Bearer ${cfg.apiKey}`, ...sessionHeaders() },
|
|
584
|
+
signal: AbortSignal.timeout(15_000),
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
catch (err) {
|
|
588
|
+
throw networkError(err, url, "DELETE", path, 15_000);
|
|
589
|
+
}
|
|
590
|
+
if (!res.ok) {
|
|
591
|
+
const bodyText = await res.text().catch(() => "");
|
|
592
|
+
throw hubError("DELETE", path, res.status, bodyText);
|
|
593
|
+
}
|
|
594
|
+
return res.json().catch(() => ({}));
|
|
595
|
+
}
|
|
116
596
|
/**
|
|
117
597
|
* Create a typed HubRestClient from a resolved HubConfig.
|
|
118
598
|
* Use this in new code and shared surfaces (e.g. Raycast) to get full
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub-client.js","sourceRoot":"","sources":["../../src/lib/hub-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hub-client.js","sourceRoot":"","sources":["../../src/lib/hub-client.ts"],"names":[],"mappings":"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"}
|