@ixo/openhands-sdk 0.7.0 → 0.8.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/README.md +4 -6
- package/dist/cjs/chain/allowance.d.ts +6 -2
- package/dist/cjs/chain/allowance.d.ts.map +1 -1
- package/dist/cjs/chain/allowance.js +47 -19
- package/dist/cjs/chain/allowance.js.map +1 -1
- package/dist/cjs/chain/ask.d.ts.map +1 -1
- package/dist/cjs/chain/ask.js +2 -1
- package/dist/cjs/chain/ask.js.map +1 -1
- package/dist/cjs/chain/assist.d.ts +52 -0
- package/dist/cjs/chain/assist.d.ts.map +1 -0
- package/dist/cjs/chain/assist.js +99 -0
- package/dist/cjs/chain/assist.js.map +1 -0
- package/dist/cjs/chain/campaignMint.d.ts +92 -0
- package/dist/cjs/chain/campaignMint.d.ts.map +1 -0
- package/dist/cjs/chain/campaignMint.js +136 -0
- package/dist/cjs/chain/campaignMint.js.map +1 -0
- package/dist/cjs/chain/draftMessages.d.ts +12 -0
- package/dist/cjs/chain/draftMessages.d.ts.map +1 -0
- package/dist/cjs/chain/draftMessages.js +85 -0
- package/dist/cjs/chain/draftMessages.js.map +1 -0
- package/dist/cjs/chain/guest.d.ts +10 -0
- package/dist/cjs/chain/guest.d.ts.map +1 -1
- package/dist/cjs/chain/guest.js +3 -2
- package/dist/cjs/chain/guest.js.map +1 -1
- package/dist/cjs/chain/inviteMessages.d.ts +17 -3
- package/dist/cjs/chain/inviteMessages.d.ts.map +1 -1
- package/dist/cjs/chain/inviteMessages.js +22 -2
- package/dist/cjs/chain/inviteMessages.js.map +1 -1
- package/dist/cjs/chain/lane.d.ts +16 -0
- package/dist/cjs/chain/lane.d.ts.map +1 -1
- package/dist/cjs/chain/lane.js +25 -1
- package/dist/cjs/chain/lane.js.map +1 -1
- package/dist/cjs/chain/personReview.d.ts.map +1 -1
- package/dist/cjs/chain/personReview.js +18 -11
- package/dist/cjs/chain/personReview.js.map +1 -1
- package/dist/cjs/chain/reviewBilling.d.ts.map +1 -1
- package/dist/cjs/chain/reviewBilling.js +1 -1
- package/dist/cjs/chain/reviewBilling.js.map +1 -1
- package/dist/cjs/chain/session.d.ts +1 -1
- package/dist/cjs/chain/session.d.ts.map +1 -1
- package/dist/cjs/chain/session.js +7 -14
- package/dist/cjs/chain/session.js.map +1 -1
- package/dist/cjs/chain/sessionEvents.d.ts +4 -0
- package/dist/cjs/chain/sessionEvents.d.ts.map +1 -0
- package/dist/cjs/chain/sessionEvents.js +15 -0
- package/dist/cjs/chain/sessionEvents.js.map +1 -0
- package/dist/cjs/chain/takeBack.d.ts +2 -0
- package/dist/cjs/chain/takeBack.d.ts.map +1 -1
- package/dist/cjs/chain/takeBack.js +45 -8
- package/dist/cjs/chain/takeBack.js.map +1 -1
- package/dist/cjs/chain/why.d.ts +6 -2
- package/dist/cjs/chain/why.d.ts.map +1 -1
- package/dist/cjs/chain/why.js +11 -2
- package/dist/cjs/chain/why.js.map +1 -1
- package/dist/cjs/chain.d.ts +1 -0
- package/dist/cjs/chain.d.ts.map +1 -1
- package/dist/cjs/chain.js +3 -1
- package/dist/cjs/chain.js.map +1 -1
- package/dist/cjs/data/actionDraft.d.ts +304 -0
- package/dist/cjs/data/actionDraft.d.ts.map +1 -0
- package/dist/cjs/data/actionDraft.js +470 -0
- package/dist/cjs/data/actionDraft.js.map +1 -0
- package/dist/cjs/data/actionDraftWords.d.ts +37 -0
- package/dist/cjs/data/actionDraftWords.d.ts.map +1 -0
- package/dist/cjs/data/actionDraftWords.js +55 -0
- package/dist/cjs/data/actionDraftWords.js.map +1 -0
- package/dist/cjs/data/agent.d.ts.map +1 -1
- package/dist/cjs/data/agent.js +36 -1
- package/dist/cjs/data/agent.js.map +1 -1
- package/dist/cjs/data/askyProtocol.d.ts.map +1 -1
- package/dist/cjs/data/askyProtocol.js +1 -1
- package/dist/cjs/data/askyProtocol.js.map +1 -1
- package/dist/cjs/data/board/answer.d.ts +12 -0
- package/dist/cjs/data/board/answer.d.ts.map +1 -0
- package/dist/cjs/data/board/answer.js +41 -0
- package/dist/cjs/data/board/answer.js.map +1 -0
- package/dist/cjs/data/board/facts.js +1 -1
- package/dist/cjs/data/board/facts.js.map +1 -1
- package/dist/cjs/data/board/read.d.ts.map +1 -1
- package/dist/cjs/data/board/read.js +20 -9
- package/dist/cjs/data/board/read.js.map +1 -1
- package/dist/cjs/data/board/types.d.ts +14 -0
- package/dist/cjs/data/board/types.d.ts.map +1 -1
- package/dist/cjs/data/board/types.js +9 -1
- package/dist/cjs/data/board/types.js.map +1 -1
- package/dist/cjs/data/checkers.d.ts +12 -2
- package/dist/cjs/data/checkers.d.ts.map +1 -1
- package/dist/cjs/data/checkers.js +43 -40
- package/dist/cjs/data/checkers.js.map +1 -1
- package/dist/cjs/data/decisionIdentity.d.ts +10 -0
- package/dist/cjs/data/decisionIdentity.d.ts.map +1 -0
- package/dist/cjs/data/decisionIdentity.js +19 -0
- package/dist/cjs/data/decisionIdentity.js.map +1 -0
- package/dist/cjs/data/docUrls.d.ts +5 -0
- package/dist/cjs/data/docUrls.d.ts.map +1 -1
- package/dist/cjs/data/docUrls.js +18 -1
- package/dist/cjs/data/docUrls.js.map +1 -1
- package/dist/cjs/data/draftUploads.d.ts +145 -0
- package/dist/cjs/data/draftUploads.d.ts.map +1 -0
- package/dist/cjs/data/draftUploads.js +293 -0
- package/dist/cjs/data/draftUploads.js.map +1 -0
- package/dist/cjs/data/emailKinds.d.ts +56 -0
- package/dist/cjs/data/emailKinds.d.ts.map +1 -0
- package/dist/cjs/data/emailKinds.js +39 -0
- package/dist/cjs/data/emailKinds.js.map +1 -0
- package/dist/cjs/data/engine.js +1 -1
- package/dist/cjs/data/engine.js.map +1 -1
- package/dist/cjs/data/format.d.ts +10 -0
- package/dist/cjs/data/format.d.ts.map +1 -1
- package/dist/cjs/data/format.js +8 -1
- package/dist/cjs/data/format.js.map +1 -1
- package/dist/cjs/data/install.d.ts +57 -131
- package/dist/cjs/data/install.d.ts.map +1 -1
- package/dist/cjs/data/install.js +95 -182
- package/dist/cjs/data/install.js.map +1 -1
- package/dist/cjs/data/openness.js +11 -11
- package/dist/cjs/data/openness.js.map +1 -1
- package/dist/cjs/data/payoutObservation.d.ts +30 -0
- package/dist/cjs/data/payoutObservation.d.ts.map +1 -0
- package/dist/cjs/data/payoutObservation.js +219 -0
- package/dist/cjs/data/payoutObservation.js.map +1 -0
- package/dist/cjs/data/queue.d.ts.map +1 -1
- package/dist/cjs/data/queue.js +36 -1
- package/dist/cjs/data/queue.js.map +1 -1
- package/dist/cjs/data/receipt.d.ts +4 -0
- package/dist/cjs/data/receipt.d.ts.map +1 -1
- package/dist/cjs/data/receipt.js +5 -2
- package/dist/cjs/data/receipt.js.map +1 -1
- package/dist/cjs/data/threads.d.ts +3 -1
- package/dist/cjs/data/threads.d.ts.map +1 -1
- package/dist/cjs/data/threads.js +5 -3
- package/dist/cjs/data/threads.js.map +1 -1
- package/dist/cjs/data/traceWords.d.ts +4 -0
- package/dist/cjs/data/traceWords.d.ts.map +1 -1
- package/dist/cjs/data/traceWords.js +17 -4
- package/dist/cjs/data/traceWords.js.map +1 -1
- package/dist/cjs/data/types.js +1 -1
- package/dist/cjs/data/types.js.map +1 -1
- package/dist/cjs/rubric/call.d.ts +5 -0
- package/dist/cjs/rubric/call.d.ts.map +1 -1
- package/dist/cjs/rubric/call.js +9 -1
- package/dist/cjs/rubric/call.js.map +1 -1
- package/dist/cjs/rubric/callChecks.d.ts +2 -0
- package/dist/cjs/rubric/callChecks.d.ts.map +1 -1
- package/dist/cjs/rubric/callChecks.js +6 -1
- package/dist/cjs/rubric/callChecks.js.map +1 -1
- package/dist/cjs/rubric/leg.d.ts +5 -7
- package/dist/cjs/rubric/leg.d.ts.map +1 -1
- package/dist/cjs/rubric/leg.js +7 -33
- package/dist/cjs/rubric/leg.js.map +1 -1
- package/dist/cjs/rubric/report.d.ts.map +1 -1
- package/dist/cjs/rubric/report.js +4 -4
- package/dist/cjs/rubric/report.js.map +1 -1
- package/dist/cjs/rubric/reportTemplate.d.ts +6 -0
- package/dist/cjs/rubric/reportTemplate.d.ts.map +1 -1
- package/dist/cjs/rubric/reportTemplate.js +23 -14
- package/dist/cjs/rubric/reportTemplate.js.map +1 -1
- package/dist/cjs/rubric/terms.d.ts +6 -1
- package/dist/cjs/rubric/terms.d.ts.map +1 -1
- package/dist/cjs/rubric/terms.js +4 -4
- package/dist/cjs/rubric/terms.js.map +1 -1
- package/dist/esm/chain/allowance.d.ts +6 -2
- package/dist/esm/chain/allowance.d.ts.map +1 -1
- package/dist/esm/chain/allowance.js +45 -19
- package/dist/esm/chain/allowance.js.map +1 -1
- package/dist/esm/chain/ask.d.ts.map +1 -1
- package/dist/esm/chain/ask.js +2 -1
- package/dist/esm/chain/ask.js.map +1 -1
- package/dist/esm/chain/assist.d.ts +52 -0
- package/dist/esm/chain/assist.d.ts.map +1 -0
- package/dist/esm/chain/assist.js +89 -0
- package/dist/esm/chain/assist.js.map +1 -0
- package/dist/esm/chain/campaignMint.d.ts +92 -0
- package/dist/esm/chain/campaignMint.d.ts.map +1 -0
- package/dist/esm/chain/campaignMint.js +127 -0
- package/dist/esm/chain/campaignMint.js.map +1 -0
- package/dist/esm/chain/draftMessages.d.ts +12 -0
- package/dist/esm/chain/draftMessages.d.ts.map +1 -0
- package/dist/esm/chain/draftMessages.js +47 -0
- package/dist/esm/chain/draftMessages.js.map +1 -0
- package/dist/esm/chain/guest.d.ts +10 -0
- package/dist/esm/chain/guest.d.ts.map +1 -1
- package/dist/esm/chain/guest.js +3 -2
- package/dist/esm/chain/guest.js.map +1 -1
- package/dist/esm/chain/inviteMessages.d.ts +17 -3
- package/dist/esm/chain/inviteMessages.d.ts.map +1 -1
- package/dist/esm/chain/inviteMessages.js +18 -1
- package/dist/esm/chain/inviteMessages.js.map +1 -1
- package/dist/esm/chain/lane.d.ts +16 -0
- package/dist/esm/chain/lane.d.ts.map +1 -1
- package/dist/esm/chain/lane.js +22 -0
- package/dist/esm/chain/lane.js.map +1 -1
- package/dist/esm/chain/personReview.d.ts.map +1 -1
- package/dist/esm/chain/personReview.js +18 -11
- package/dist/esm/chain/personReview.js.map +1 -1
- package/dist/esm/chain/reviewBilling.d.ts.map +1 -1
- package/dist/esm/chain/reviewBilling.js +1 -1
- package/dist/esm/chain/reviewBilling.js.map +1 -1
- package/dist/esm/chain/session.d.ts +1 -1
- package/dist/esm/chain/session.d.ts.map +1 -1
- package/dist/esm/chain/session.js +5 -12
- package/dist/esm/chain/session.js.map +1 -1
- package/dist/esm/chain/sessionEvents.d.ts +4 -0
- package/dist/esm/chain/sessionEvents.d.ts.map +1 -0
- package/dist/esm/chain/sessionEvents.js +11 -0
- package/dist/esm/chain/sessionEvents.js.map +1 -0
- package/dist/esm/chain/takeBack.d.ts +2 -0
- package/dist/esm/chain/takeBack.d.ts.map +1 -1
- package/dist/esm/chain/takeBack.js +44 -8
- package/dist/esm/chain/takeBack.js.map +1 -1
- package/dist/esm/chain/why.d.ts +6 -2
- package/dist/esm/chain/why.d.ts.map +1 -1
- package/dist/esm/chain/why.js +12 -3
- package/dist/esm/chain/why.js.map +1 -1
- package/dist/esm/chain.d.ts +1 -0
- package/dist/esm/chain.d.ts.map +1 -1
- package/dist/esm/chain.js +1 -0
- package/dist/esm/chain.js.map +1 -1
- package/dist/esm/data/actionDraft.d.ts +304 -0
- package/dist/esm/data/actionDraft.d.ts.map +1 -0
- package/dist/esm/data/actionDraft.js +450 -0
- package/dist/esm/data/actionDraft.js.map +1 -0
- package/dist/esm/data/actionDraftWords.d.ts +37 -0
- package/dist/esm/data/actionDraftWords.d.ts.map +1 -0
- package/dist/esm/data/actionDraftWords.js +47 -0
- package/dist/esm/data/actionDraftWords.js.map +1 -0
- package/dist/esm/data/agent.d.ts.map +1 -1
- package/dist/esm/data/agent.js +4 -2
- package/dist/esm/data/agent.js.map +1 -1
- package/dist/esm/data/askyProtocol.d.ts.map +1 -1
- package/dist/esm/data/askyProtocol.js +1 -1
- package/dist/esm/data/askyProtocol.js.map +1 -1
- package/dist/esm/data/board/answer.d.ts +12 -0
- package/dist/esm/data/board/answer.d.ts.map +1 -0
- package/dist/esm/data/board/answer.js +36 -0
- package/dist/esm/data/board/answer.js.map +1 -0
- package/dist/esm/data/board/facts.js +1 -1
- package/dist/esm/data/board/facts.js.map +1 -1
- package/dist/esm/data/board/read.d.ts.map +1 -1
- package/dist/esm/data/board/read.js +21 -10
- package/dist/esm/data/board/read.js.map +1 -1
- package/dist/esm/data/board/types.d.ts +14 -0
- package/dist/esm/data/board/types.d.ts.map +1 -1
- package/dist/esm/data/board/types.js +7 -0
- package/dist/esm/data/board/types.js.map +1 -1
- package/dist/esm/data/checkers.d.ts +12 -2
- package/dist/esm/data/checkers.d.ts.map +1 -1
- package/dist/esm/data/checkers.js +41 -39
- package/dist/esm/data/checkers.js.map +1 -1
- package/dist/esm/data/decisionIdentity.d.ts +10 -0
- package/dist/esm/data/decisionIdentity.d.ts.map +1 -0
- package/dist/esm/data/decisionIdentity.js +15 -0
- package/dist/esm/data/decisionIdentity.js.map +1 -0
- package/dist/esm/data/docUrls.d.ts +5 -0
- package/dist/esm/data/docUrls.d.ts.map +1 -1
- package/dist/esm/data/docUrls.js +16 -0
- package/dist/esm/data/docUrls.js.map +1 -1
- package/dist/esm/data/draftUploads.d.ts +145 -0
- package/dist/esm/data/draftUploads.d.ts.map +1 -0
- package/dist/esm/data/draftUploads.js +272 -0
- package/dist/esm/data/draftUploads.js.map +1 -0
- package/dist/esm/data/emailKinds.d.ts +56 -0
- package/dist/esm/data/emailKinds.d.ts.map +1 -0
- package/dist/esm/data/emailKinds.js +32 -0
- package/dist/esm/data/emailKinds.js.map +1 -0
- package/dist/esm/data/engine.js +1 -1
- package/dist/esm/data/engine.js.map +1 -1
- package/dist/esm/data/format.d.ts +10 -0
- package/dist/esm/data/format.d.ts.map +1 -1
- package/dist/esm/data/format.js +6 -0
- package/dist/esm/data/format.js.map +1 -1
- package/dist/esm/data/install.d.ts +57 -131
- package/dist/esm/data/install.d.ts.map +1 -1
- package/dist/esm/data/install.js +88 -173
- package/dist/esm/data/install.js.map +1 -1
- package/dist/esm/data/openness.js +11 -11
- package/dist/esm/data/openness.js.map +1 -1
- package/dist/esm/data/payoutObservation.d.ts +30 -0
- package/dist/esm/data/payoutObservation.d.ts.map +1 -0
- package/dist/esm/data/payoutObservation.js +213 -0
- package/dist/esm/data/payoutObservation.js.map +1 -0
- package/dist/esm/data/queue.d.ts.map +1 -1
- package/dist/esm/data/queue.js +4 -2
- package/dist/esm/data/queue.js.map +1 -1
- package/dist/esm/data/receipt.d.ts +4 -0
- package/dist/esm/data/receipt.d.ts.map +1 -1
- package/dist/esm/data/receipt.js +5 -2
- package/dist/esm/data/receipt.js.map +1 -1
- package/dist/esm/data/threads.d.ts +3 -1
- package/dist/esm/data/threads.d.ts.map +1 -1
- package/dist/esm/data/threads.js +6 -4
- package/dist/esm/data/threads.js.map +1 -1
- package/dist/esm/data/traceWords.d.ts +4 -0
- package/dist/esm/data/traceWords.d.ts.map +1 -1
- package/dist/esm/data/traceWords.js +16 -4
- package/dist/esm/data/traceWords.js.map +1 -1
- package/dist/esm/data/types.js +1 -1
- package/dist/esm/data/types.js.map +1 -1
- package/dist/esm/rubric/call.d.ts +5 -0
- package/dist/esm/rubric/call.d.ts.map +1 -1
- package/dist/esm/rubric/call.js +7 -0
- package/dist/esm/rubric/call.js.map +1 -1
- package/dist/esm/rubric/callChecks.d.ts +2 -0
- package/dist/esm/rubric/callChecks.d.ts.map +1 -1
- package/dist/esm/rubric/callChecks.js +4 -0
- package/dist/esm/rubric/callChecks.js.map +1 -1
- package/dist/esm/rubric/leg.d.ts +5 -7
- package/dist/esm/rubric/leg.d.ts.map +1 -1
- package/dist/esm/rubric/leg.js +7 -33
- package/dist/esm/rubric/leg.js.map +1 -1
- package/dist/esm/rubric/report.d.ts.map +1 -1
- package/dist/esm/rubric/report.js +4 -4
- package/dist/esm/rubric/report.js.map +1 -1
- package/dist/esm/rubric/reportTemplate.d.ts +6 -0
- package/dist/esm/rubric/reportTemplate.d.ts.map +1 -1
- package/dist/esm/rubric/reportTemplate.js +22 -14
- package/dist/esm/rubric/reportTemplate.js.map +1 -1
- package/dist/esm/rubric/terms.d.ts +6 -1
- package/dist/esm/rubric/terms.d.ts.map +1 -1
- package/dist/esm/rubric/terms.js +4 -4
- package/dist/esm/rubric/terms.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,105 +1,82 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* How an
|
|
2
|
+
* How an assistant is told to connect to asks.world: add the hosted connector.
|
|
3
3
|
*
|
|
4
|
-
* One table, several renderings: the
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* to
|
|
4
|
+
* One table, several renderings: the install block, the agent page (`/mcp`
|
|
5
|
+
* and its `/mcp.md` twin), the agent page `/for-agents`, `/llms.txt` and the
|
|
6
|
+
* hosted server's description all print these lines from here, so they cannot
|
|
7
|
+
* disagree.
|
|
8
|
+
*
|
|
9
|
+
* Where an app takes plugins (claude.ai, Claude Code, Codex) the main way in is the asks plugin (`pluginLines`): the
|
|
10
|
+
* same connector plus the skills that teach the AI how to use Asks. The bare connector stays as the smaller fallback,
|
|
11
|
+
* and the only way in for ChatGPT, Cursor and VS Code.
|
|
12
|
+
*
|
|
13
|
+
* The connector is the asks.world MCP server
|
|
14
|
+
* served by the site itself (`/v1/mcp`, docs/MCP.md). A person adds that one
|
|
15
|
+
* address to claude.ai, ChatGPT, Claude Code or Codex, signs in with Google
|
|
16
|
+
* when it asks (every request needs the sign-in), and it then acts as them: it
|
|
17
|
+
* does what needs no money and no signature in the chat, and hands everything
|
|
18
|
+
* else to one tap on an asks.world page.
|
|
11
19
|
*
|
|
12
20
|
* Pure and dependency-free, like `app/lib/networks.ts`: the app, the MCP
|
|
13
21
|
* server and `node --test` all read it the same way.
|
|
14
|
-
*
|
|
15
|
-
* **Why `openhands-network` and not `openhands`.** OpenHands is All-Hands-AI's
|
|
16
|
-
* coding agent; they own the `@openhands` scope on npm and the GitHub org, and
|
|
17
|
-
* third parties already publish "OpenHands MCP" packages. A client with both
|
|
18
|
-
* installed would show two servers called `openhands`. The domain is the honest
|
|
19
|
-
* anchor, so the server, the package and the plugin all carry its name.
|
|
20
22
|
*/
|
|
21
|
-
/** The npm package the bundled server ships as (the plugin plan's A2). */
|
|
22
|
-
export declare const MCP_PACKAGE = "@ixo/asks-mcp";
|
|
23
23
|
/** The name a client registers the server under; tools appear as `mcp__asks__*`. */
|
|
24
24
|
export declare const MCP_SERVER = "asks";
|
|
25
25
|
/**
|
|
26
|
-
* The
|
|
27
|
-
*
|
|
28
|
-
|
|
29
|
-
export declare const MCP_TAG = "latest";
|
|
30
|
-
/** What `npx` is told to run. */
|
|
31
|
-
export declare const MCP_SPEC = "@ixo/asks-mcp@latest";
|
|
32
|
-
/**
|
|
33
|
-
* What that spec actually runs is whatever build the npx cache holds for it.
|
|
34
|
-
* npx keeps one install per spec string and reuses it without asking the
|
|
35
|
-
* registry, so a machine that installed in September keeps September's
|
|
36
|
-
* server until the cache is cleared — on 2026-10-20 `@1` ran 1.1.0 on a Mac
|
|
37
|
-
* while 1.4.1 was latest, and 1.1.0 refused post_call for want of variables
|
|
38
|
-
* 1.4 reads from the site. The plugin's `.mcp.json` uses the same spec. Said
|
|
39
|
-
* beside the version wherever an install is printed, with the one line that
|
|
40
|
-
* refreshes it.
|
|
41
|
-
*/
|
|
42
|
-
export declare const NPX_CACHE_NOTE = "npx keeps the build it first installed for \"@ixo/asks-mcp@latest\" and reuses it without asking npm, so after a release an older server can keep running on your machine.";
|
|
43
|
-
/** The one line that makes the next start install the newest release: npx's own cache, found through npm's config so the path is right on every machine. */
|
|
44
|
-
export declare const NPX_REFRESH_LINE = "rm -rf \"$(npm config get cache)/_npx\"";
|
|
45
|
-
/** The note and the line, as text: what get_config_help and the install pages print. */
|
|
46
|
-
export declare const npxCacheLines: () => string[];
|
|
47
|
-
/**
|
|
48
|
-
* The hosted server's path on every deployment's own origin: read-only,
|
|
49
|
-
* unauthenticated, and the protocol surface the `/v1/` prefix versions
|
|
50
|
-
* (docs/MCP.md). `https://asks.world/v1/mcp` and
|
|
26
|
+
* The connector's path on every deployment's own origin, the one address a
|
|
27
|
+
* person adds: it asks them to sign in with Google, then acts as them, and the
|
|
28
|
+
* `/v1/` prefix versions it (docs/MCP.md). `https://asks.world/v1/mcp`,
|
|
51
29
|
* `https://test.asks.world/v1/mcp`.
|
|
52
30
|
*/
|
|
53
31
|
export declare const MCP_HOSTED_PATH = "/v1/mcp";
|
|
54
|
-
/** The
|
|
32
|
+
/** The connector's URL on a deployment's origin. */
|
|
55
33
|
export declare const hostedUrl: (origin: string) => string;
|
|
56
|
-
export declare const INSTALL_CLIENTS: readonly ["claude-code", "codex", "cursor", "vscode"];
|
|
57
|
-
export type InstallClient = (typeof INSTALL_CLIENTS)[number];
|
|
58
34
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* is this repository's own entry file, which needs Node's TypeScript stripping
|
|
63
|
-
* — the lines a developer running from a checkout
|
|
64
|
-
* copies to a second client on the same machine. A path is printed *only* in
|
|
65
|
-
* that case, because only then is there a path to print.
|
|
35
|
+
* The connector's address on a deployment's origin: the one a person adds. A request with no sign-in is answered
|
|
36
|
+
* with the sign-in challenge, which is what makes claude.ai, ChatGPT, Claude Code and Codex open the asks.world
|
|
37
|
+
* sign-in page. The same address as `hostedUrl`: there is no second, signed-out one.
|
|
66
38
|
*/
|
|
67
|
-
export
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
* Omitted: the published package, which is the install for everyone who is
|
|
77
|
-
* not running this repository. Whether it is on npm yet is the app's to say
|
|
78
|
-
* (`NEXT_PUBLIC_MCP_PUBLISHED`, app/lib/mcp.ts): this module reads no
|
|
79
|
-
* environment, like the rest of the SDK.
|
|
80
|
-
*/
|
|
81
|
-
entry?: InstallEntry;
|
|
82
|
-
}
|
|
83
|
-
/** One client's install text, ready to paste. */
|
|
84
|
-
export declare function installLines(client: InstallClient, options: InstallOptions): string;
|
|
85
|
-
/** Where each client keeps it — the sentence above the block. */
|
|
86
|
-
export declare const INSTALL_WHERE: Record<InstallClient, string>;
|
|
39
|
+
export declare const connectorUrl: (origin: string) => string;
|
|
40
|
+
/** The assistants a person adds the connector to, in the order the pages show them. */
|
|
41
|
+
export declare const CONNECTOR_CLIENTS: readonly ["claude-ai", "chatgpt", "claude-code", "codex"];
|
|
42
|
+
export type ConnectorClient = (typeof CONNECTOR_CLIENTS)[number];
|
|
43
|
+
/** Each assistant's name, the heading above its steps. */
|
|
44
|
+
export declare const CONNECTOR_WHERE: Record<ConnectorClient, string>;
|
|
45
|
+
/** Where each chat app adds a connector (claude.ai moved connectors under Customize; ChatGPT calls them plugins), checked 2026-11-04. */
|
|
46
|
+
export declare const CLAUDE_CONNECTORS_URL = "https://claude.ai/customize/connectors";
|
|
47
|
+
export declare const CHATGPT_PLUGINS_URL = "https://chatgpt.com/plugins";
|
|
87
48
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* package does.
|
|
49
|
+
* Cursor's one-click install (cursor.com/docs/context/mcp/install-links): `name`, and `config` = base64 of the server's
|
|
50
|
+
* mcp.json entry, which for a remote server is just `{"url": …}`. The cursor.com web page opens the
|
|
51
|
+
* `cursor://anysphere.cursor-deeplink/mcp/install` deeplink, and says what to do when Cursor is not installed.
|
|
92
52
|
*/
|
|
53
|
+
export declare const cursorInstallUrl: (origin: string) => string;
|
|
54
|
+
/**
|
|
55
|
+
* VS Code's install link (code.visualstudio.com/docs/copilot/guides/mcp-developer-guide): `vscode:mcp/install?` and the
|
|
56
|
+
* URL-encoded JSON `{name, type: "http", url}`, behind vscode.dev/redirect so a web page can open it.
|
|
57
|
+
*/
|
|
58
|
+
export declare const vscodeInstallUrl: (origin: string) => string;
|
|
59
|
+
/** One assistant's steps, ready to follow: plain words for the apps, the commands for the terminals. */
|
|
60
|
+
export declare function connectorLines(client: ConnectorClient, origin: string): string;
|
|
61
|
+
/** The one command a person copies into a terminal: Claude Code's, which the install block leads with. */
|
|
62
|
+
export declare const connectorCommand: (origin: string) => string;
|
|
63
|
+
/** The plugin marketplace's public repository: the Asks skills and the company tools. */
|
|
93
64
|
export declare const PLUGIN_MARKETPLACE = "ixoworld/ixo-plugins";
|
|
94
|
-
export declare const PLUGIN_NAME = "asks";
|
|
95
|
-
export declare const PLUGIN_ID = "asks@ixo-plugins";
|
|
96
|
-
/** The plugin marketplace's public repository: every plugin's skill, README and version. */
|
|
97
65
|
export declare const PLUGIN_MARKETPLACE_URL = "https://github.com/ixoworld/ixo-plugins";
|
|
66
|
+
/** Where claude.ai lists plugins (Customize, then Plugins). */
|
|
67
|
+
export declare const CLAUDE_PLUGINS_URL = "https://claude.ai/customize/plugins";
|
|
68
|
+
/** The apps that take the asks plugin: the connector plus the skills that teach the AI how to use Asks. The rest take the bare connector. */
|
|
69
|
+
export declare const PLUGIN_CLIENTS: readonly ["claude-ai", "claude-code", "codex"];
|
|
70
|
+
export type PluginClient = (typeof PLUGIN_CLIENTS)[number];
|
|
71
|
+
/** The plugin, and the server it registers, per network: `asks` talks to asks.world, `asks-testnet` to the sandbox, `asks-devnet` to dev.asks.world. */
|
|
72
|
+
export declare const pluginName: (network: string) => string;
|
|
73
|
+
/** One app's plugin steps on a network: plain words for claude.ai, the lines to type for Claude Code and Codex. */
|
|
74
|
+
export declare function pluginLines(client: PluginClient, network: string): string;
|
|
98
75
|
/** An npm package's page, where its latest version is. */
|
|
99
76
|
export declare const npmUrl: (name: string) => string;
|
|
100
77
|
/**
|
|
101
|
-
* The packages
|
|
102
|
-
* guides (/llms.txt, /mcp.md) list these
|
|
78
|
+
* The packages a company runs for itself (its verifier, its payouts service), each with the version range an
|
|
79
|
+
* install pins. The guides (/llms.txt, /mcp.md) list these. The Asks tools themselves are the connector, not a package.
|
|
103
80
|
*/
|
|
104
81
|
export declare const RESOURCE_PACKAGES: readonly {
|
|
105
82
|
name: string;
|
|
@@ -108,55 +85,4 @@ export declare const RESOURCE_PACKAGES: readonly {
|
|
|
108
85
|
}[];
|
|
109
86
|
/** One line per package: name@range, what it is, its npm page. */
|
|
110
87
|
export declare const resourceLines: () => string[];
|
|
111
|
-
/**
|
|
112
|
-
* The hosted MCP (claude.ai, ChatGPT) only reads. Everything that signs runs in
|
|
113
|
-
* Claude Code with the local MCP / HQ plugin, where keys and data stay on the
|
|
114
|
-
* user's machine (owner ruling 2026-10-15). One wording, said everywhere.
|
|
115
|
-
*/
|
|
116
|
-
export declare const READ_ONLY_LINE = "This connector holds no key: it reads, and posts an ask only as a pay link (post_ask with pay_by \"card\"), where the person pays by card and posts it on Asks. To post from your own money, set up payouts, pay for reviews or get paid, use Claude Code with an Asks plugin (asks): it runs on your computer, so your keys and data stay with you.";
|
|
117
|
-
/** The first Claude Code that installs from a marketplace in one step, with `--marketplace`. */
|
|
118
|
-
export declare const CLAUDE_CODE_ONE_STEP = "2.1.275";
|
|
119
|
-
export declare const PLUGIN_CLIENTS: readonly ["claude-code", "codex"];
|
|
120
|
-
export type PluginClient = (typeof PLUGIN_CLIENTS)[number];
|
|
121
|
-
/**
|
|
122
|
-
* Every plugin install, in the order to show them: Claude Code in one step,
|
|
123
|
-
* the two steps an older Claude Code needs, then Codex.
|
|
124
|
-
*/
|
|
125
|
-
export declare const PLUGIN_INSTALLS: readonly ["claude-code", "claude-code-older", "codex"];
|
|
126
|
-
export type PluginInstall = (typeof PLUGIN_INSTALLS)[number];
|
|
127
|
-
/** One plugin install, a command per line: the worker plugin unless `name` says which. */
|
|
128
|
-
export declare function pluginLines(install: PluginInstall, name?: string): string;
|
|
129
|
-
/** The Claude Code install as shell commands, said on one line: for an agent that cannot type a /plugin command but can run `claude`. */
|
|
130
|
-
export declare const pluginShellLine: (name: string) => string;
|
|
131
|
-
/**
|
|
132
|
-
* The Claude app (desktop or claude.ai, paid plans): a person adds the plugin by hand, and its server, which runs on
|
|
133
|
-
* their computer, works where Claude can run things on it: the Code tab, or a chat with a folder connected (the former Cowork); not a plain chat (support.claude.com, "Use plugins in Claude").
|
|
134
|
-
*/
|
|
135
|
-
export declare const claudeAppPluginSteps: (names: string) => string;
|
|
136
|
-
/** The one plugin, for a company or a worker: what it does, said once. Every page and tool that shows an install shows it, from here. */
|
|
137
|
-
export declare const PLUGIN_PATHS: readonly [{
|
|
138
|
-
readonly name: "asks";
|
|
139
|
-
readonly who: "For a company or yourself";
|
|
140
|
-
readonly what: "Find Asks, answer them and get paid, post Asks of your own, and set up your company (organisation, how workers are paid, a verifier, review billing). A report ask is answered with Claude (the report and screenshots, which you approve before anything is sent) or on the website.";
|
|
141
|
-
}];
|
|
142
|
-
/** The plugin's commands (ixoworld/ixo-plugins), said once: `/asks` works out what the person wants, the rest go straight to one job. */
|
|
143
|
-
export declare const PLUGIN_COMMANDS_LINE = "Once installed, type /asks and say what you want, or go straight to one job: /asks:create (post an ask or a review, set up a company), /asks:jobs (find work), /asks:invite, /asks:manage, /asks:report (write a review report), /asks:profile, /asks:account, /asks:connect, /asks:help.";
|
|
144
|
-
export declare const PLUGIN_WHERE: Record<PluginInstall, string>;
|
|
145
|
-
/** The plugin as plain text: who it is for, then each install's lines. */
|
|
146
|
-
export declare function pluginPathsText(installs?: readonly PluginInstall[]): string[];
|
|
147
|
-
/**
|
|
148
|
-
* What the plugin brings and which network to use, said for the site at `network`. One server serves both: every
|
|
149
|
-
* tool takes `network`, so there is nothing to set at install.
|
|
150
|
-
*/
|
|
151
|
-
export declare function pluginNetworkNote(network: string): string;
|
|
152
|
-
/**
|
|
153
|
-
* The hosted server, for a client that cannot run a local one. It reads the
|
|
154
|
-
* board and hands every action back to the site or the local server, so a
|
|
155
|
-
* connector needs no key and no sign-in.
|
|
156
|
-
*/
|
|
157
|
-
export declare const HOSTED_CLIENTS: readonly ["connector", "claude-code"];
|
|
158
|
-
export type HostedClient = (typeof HOSTED_CLIENTS)[number];
|
|
159
|
-
/** One hosted install, for the deployment at `origin`. */
|
|
160
|
-
export declare function hostedLines(client: HostedClient, origin: string): string;
|
|
161
|
-
export declare const HOSTED_WHERE: Record<HostedClient, string>;
|
|
162
88
|
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,oFAAoF;AACpF,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AAIzC,oDAAoD;AACpD,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,MAAgD,CAAC;AAE5F;;;;GAIG;AACH,eAAO,MAAM,YAAY,WAPS,MAAM,KAAG,MAON,CAAC;AAEtC,uFAAuF;AACvF,eAAO,MAAM,iBAAiB,2DAA4D,CAAC;AAC3F,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,0DAA0D;AAC1D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAK3D,CAAC;AAEF,yIAAyI;AACzI,eAAO,MAAM,qBAAqB,2CAA2C,CAAC;AAC9E,eAAO,MAAM,mBAAmB,gCAAgC,CAAC;AAKjE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MACuF,CAAC;AAE1I;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MACoI,CAAC;AAEvL,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAY9E;AAED,0GAA0G;AAC1G,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MAAiF,CAAC;AAEpI,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AACzD,eAAO,MAAM,sBAAsB,4CAA6C,CAAC;AAEjF,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,wCAAwC,CAAC;AAExE,6IAA6I;AAC7I,eAAO,MAAM,cAAc,gDAAiD,CAAC;AAC7E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,wJAAwJ;AACxJ,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,KAAG,MAAkG,CAAC;AAEhJ,mHAAmH;AACnH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAWzE;AAED,0DAA0D;AAC1D,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,MAAiD,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAGrF,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,aAAa,QAAO,MAAM,EAAkG,CAAC"}
|
package/dist/cjs/data/install.js
CHANGED
|
@@ -1,215 +1,128 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* How an
|
|
3
|
+
* How an assistant is told to connect to asks.world: add the hosted connector.
|
|
4
4
|
*
|
|
5
|
-
* One table, several renderings: the
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* to
|
|
5
|
+
* One table, several renderings: the install block, the agent page (`/mcp`
|
|
6
|
+
* and its `/mcp.md` twin), the agent page `/for-agents`, `/llms.txt` and the
|
|
7
|
+
* hosted server's description all print these lines from here, so they cannot
|
|
8
|
+
* disagree.
|
|
9
|
+
*
|
|
10
|
+
* Where an app takes plugins (claude.ai, Claude Code, Codex) the main way in is the asks plugin (`pluginLines`): the
|
|
11
|
+
* same connector plus the skills that teach the AI how to use Asks. The bare connector stays as the smaller fallback,
|
|
12
|
+
* and the only way in for ChatGPT, Cursor and VS Code.
|
|
13
|
+
*
|
|
14
|
+
* The connector is the asks.world MCP server
|
|
15
|
+
* served by the site itself (`/v1/mcp`, docs/MCP.md). A person adds that one
|
|
16
|
+
* address to claude.ai, ChatGPT, Claude Code or Codex, signs in with Google
|
|
17
|
+
* when it asks (every request needs the sign-in), and it then acts as them: it
|
|
18
|
+
* does what needs no money and no signature in the chat, and hands everything
|
|
19
|
+
* else to one tap on an asks.world page.
|
|
12
20
|
*
|
|
13
21
|
* Pure and dependency-free, like `app/lib/networks.ts`: the app, the MCP
|
|
14
22
|
* server and `node --test` all read it the same way.
|
|
15
|
-
*
|
|
16
|
-
* **Why `openhands-network` and not `openhands`.** OpenHands is All-Hands-AI's
|
|
17
|
-
* coding agent; they own the `@openhands` scope on npm and the GitHub org, and
|
|
18
|
-
* third parties already publish "OpenHands MCP" packages. A client with both
|
|
19
|
-
* installed would show two servers called `openhands`. The domain is the honest
|
|
20
|
-
* anchor, so the server, the package and the plugin all carry its name.
|
|
21
23
|
*/
|
|
22
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.
|
|
24
|
-
exports.
|
|
25
|
+
exports.resourceLines = exports.RESOURCE_PACKAGES = exports.npmUrl = exports.pluginName = exports.PLUGIN_CLIENTS = exports.CLAUDE_PLUGINS_URL = exports.PLUGIN_MARKETPLACE_URL = exports.PLUGIN_MARKETPLACE = exports.connectorCommand = exports.vscodeInstallUrl = exports.cursorInstallUrl = exports.CHATGPT_PLUGINS_URL = exports.CLAUDE_CONNECTORS_URL = exports.CONNECTOR_WHERE = exports.CONNECTOR_CLIENTS = exports.connectorUrl = exports.hostedUrl = exports.MCP_HOSTED_PATH = exports.MCP_SERVER = void 0;
|
|
26
|
+
exports.connectorLines = connectorLines;
|
|
25
27
|
exports.pluginLines = pluginLines;
|
|
26
|
-
exports.pluginPathsText = pluginPathsText;
|
|
27
|
-
exports.pluginNetworkNote = pluginNetworkNote;
|
|
28
|
-
exports.hostedLines = hostedLines;
|
|
29
|
-
/** The npm package the bundled server ships as (the plugin plan's A2). */
|
|
30
|
-
exports.MCP_PACKAGE = "@ixo/asks-mcp";
|
|
31
28
|
/** The name a client registers the server under; tools appear as `mcp__asks__*`. */
|
|
32
29
|
exports.MCP_SERVER = "asks";
|
|
33
30
|
/**
|
|
34
|
-
* The
|
|
35
|
-
*
|
|
31
|
+
* The connector's path on every deployment's own origin, the one address a
|
|
32
|
+
* person adds: it asks them to sign in with Google, then acts as them, and the
|
|
33
|
+
* `/v1/` prefix versions it (docs/MCP.md). `https://asks.world/v1/mcp`,
|
|
34
|
+
* `https://test.asks.world/v1/mcp`.
|
|
36
35
|
*/
|
|
37
|
-
exports.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
exports.MCP_HOSTED_PATH = "/v1/mcp";
|
|
37
|
+
const trimmed = (origin) => origin.replace(/\/+$/, "");
|
|
38
|
+
/** The connector's URL on a deployment's origin. */
|
|
39
|
+
const hostedUrl = (origin) => `${trimmed(origin)}${exports.MCP_HOSTED_PATH}`;
|
|
40
|
+
exports.hostedUrl = hostedUrl;
|
|
42
41
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* server until the cache is cleared — on 2026-10-20 `@1` ran 1.1.0 on a Mac
|
|
47
|
-
* while 1.4.1 was latest, and 1.1.0 refused post_call for want of variables
|
|
48
|
-
* 1.4 reads from the site. The plugin's `.mcp.json` uses the same spec. Said
|
|
49
|
-
* beside the version wherever an install is printed, with the one line that
|
|
50
|
-
* refreshes it.
|
|
42
|
+
* The connector's address on a deployment's origin: the one a person adds. A request with no sign-in is answered
|
|
43
|
+
* with the sign-in challenge, which is what makes claude.ai, ChatGPT, Claude Code and Codex open the asks.world
|
|
44
|
+
* sign-in page. The same address as `hostedUrl`: there is no second, signed-out one.
|
|
51
45
|
*/
|
|
52
|
-
exports.
|
|
53
|
-
/** The
|
|
54
|
-
exports.
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
|
|
46
|
+
exports.connectorUrl = exports.hostedUrl;
|
|
47
|
+
/** The assistants a person adds the connector to, in the order the pages show them. */
|
|
48
|
+
exports.CONNECTOR_CLIENTS = ["claude-ai", "chatgpt", "claude-code", "codex"];
|
|
49
|
+
/** Each assistant's name, the heading above its steps. */
|
|
50
|
+
exports.CONNECTOR_WHERE = {
|
|
51
|
+
"claude-ai": "Claude (claude.ai, the desktop app and the phone app)",
|
|
52
|
+
chatgpt: "ChatGPT",
|
|
53
|
+
"claude-code": "Claude Code",
|
|
54
|
+
codex: "Codex"
|
|
55
|
+
};
|
|
56
|
+
/** Where each chat app adds a connector (claude.ai moved connectors under Customize; ChatGPT calls them plugins), checked 2026-11-04. */
|
|
57
|
+
exports.CLAUDE_CONNECTORS_URL = "https://claude.ai/customize/connectors";
|
|
58
|
+
exports.CHATGPT_PLUGINS_URL = "https://chatgpt.com/plugins";
|
|
59
|
+
/** The name the one-click installs register the connector under, as a person sees it in Cursor or VS Code. */
|
|
60
|
+
const INSTALL_NAME = "Asks";
|
|
58
61
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* `https://test.asks.world/v1/mcp`.
|
|
62
|
+
* Cursor's one-click install (cursor.com/docs/context/mcp/install-links): `name`, and `config` = base64 of the server's
|
|
63
|
+
* mcp.json entry, which for a remote server is just `{"url": …}`. The cursor.com web page opens the
|
|
64
|
+
* `cursor://anysphere.cursor-deeplink/mcp/install` deeplink, and says what to do when Cursor is not installed.
|
|
63
65
|
*/
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
const envOf = (options) => ({
|
|
77
|
-
...command(options.entry ?? PACKAGE_ENTRY).env,
|
|
78
|
-
NEXT_PUBLIC_CHAIN_NETWORK: options.network
|
|
79
|
-
});
|
|
80
|
-
/** One client's install text, ready to paste. */
|
|
81
|
-
function installLines(client, options) {
|
|
82
|
-
const run = command(options.entry ?? PACKAGE_ENTRY);
|
|
83
|
-
const env = envOf(options);
|
|
84
|
-
/* A plugin install does not replace a hand-added server (Claude Code names plugin servers `plugin:<plugin>:<server>`), so the guide says to remove it, or every tool is listed twice (final review M3). */
|
|
85
|
-
const name = exports.MCP_SERVER;
|
|
66
|
+
const cursorInstallUrl = (origin) => `https://cursor.com/install-mcp?name=${INSTALL_NAME}&config=${encodeURIComponent(btoa(JSON.stringify({ url: (0, exports.connectorUrl)(origin) })))}`;
|
|
67
|
+
exports.cursorInstallUrl = cursorInstallUrl;
|
|
68
|
+
/**
|
|
69
|
+
* VS Code's install link (code.visualstudio.com/docs/copilot/guides/mcp-developer-guide): `vscode:mcp/install?` and the
|
|
70
|
+
* URL-encoded JSON `{name, type: "http", url}`, behind vscode.dev/redirect so a web page can open it.
|
|
71
|
+
*/
|
|
72
|
+
const vscodeInstallUrl = (origin) => `https://vscode.dev/redirect?url=${encodeURIComponent(`vscode:mcp/install?${encodeURIComponent(JSON.stringify({ name: INSTALL_NAME, type: "http", url: (0, exports.connectorUrl)(origin) }))}`)}`;
|
|
73
|
+
exports.vscodeInstallUrl = vscodeInstallUrl;
|
|
74
|
+
/** One assistant's steps, ready to follow: plain words for the apps, the commands for the terminals. */
|
|
75
|
+
function connectorLines(client, origin) {
|
|
76
|
+
const url = (0, exports.connectorUrl)(origin);
|
|
86
77
|
switch (client) {
|
|
87
|
-
case "claude-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
case "codex":
|
|
94
|
-
|
|
95
|
-
.map(([key, value]) => `${key} = "${value}"`)
|
|
96
|
-
.join(", ");
|
|
97
|
-
return [`[mcp_servers.${name}]`, `command = "${run.command}"`, `args = ${JSON.stringify(run.args)}`, `env = { ${table} }`].join("\n");
|
|
98
|
-
}
|
|
99
|
-
case "cursor":
|
|
100
|
-
return JSON.stringify({ mcpServers: { [name]: { command: run.command, args: run.args, env } } }, null, 2);
|
|
101
|
-
case "vscode":
|
|
102
|
-
return `vscode:mcp/install?${encodeURIComponent(JSON.stringify({ name, command: run.command, args: run.args, env }))}`;
|
|
78
|
+
case "claude-ai":
|
|
79
|
+
return `Open Settings, then Customize, then Connectors (or go to ${exports.CLAUDE_CONNECTORS_URL}). Tap + Add, then Add custom connector. Name it Asks, paste ${url} and tap Continue. Then sign in with Google.`;
|
|
80
|
+
case "chatgpt":
|
|
81
|
+
return `Open Plugins in the sidebar (or go to ${exports.CHATGPT_PLUGINS_URL}), then Add, then Add custom MCP server. Name it Asks, paste ${url} as the Server URL and keep Authentication on OAuth. Tick "I understand and want to continue", tap Create as a plugin, then sign in with Google.`;
|
|
82
|
+
case "claude-code":
|
|
83
|
+
return `claude mcp add --transport http ${exports.MCP_SERVER} ${url}\nThen type /mcp in Claude Code, pick ${exports.MCP_SERVER} and sign in with Google.`;
|
|
84
|
+
case "codex":
|
|
85
|
+
return `codex mcp add ${exports.MCP_SERVER} --url ${url}\ncodex mcp login ${exports.MCP_SERVER}\nThe second line opens the sign-in: sign in with Google.`;
|
|
103
86
|
}
|
|
104
87
|
}
|
|
105
|
-
/**
|
|
106
|
-
exports.
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
cursor: "Cursor, in ~/.cursor/mcp.json (or a project's .cursor/mcp.json):",
|
|
110
|
-
vscode: "VS Code, open this link (or paste the Cursor block into .vscode/mcp.json):"
|
|
111
|
-
};
|
|
112
|
-
/**
|
|
113
|
-
* The plugin: the local server with its skill, from the ixo plugin
|
|
114
|
-
* marketplace, and the first way in for Claude Code and Codex. It launches the
|
|
115
|
-
* same package (`npx -y` {@link MCP_SPEC}), so it works exactly when the
|
|
116
|
-
* package does.
|
|
117
|
-
*/
|
|
88
|
+
/** The one command a person copies into a terminal: Claude Code's, which the install block leads with. */
|
|
89
|
+
const connectorCommand = (origin) => `claude mcp add --transport http ${exports.MCP_SERVER} ${(0, exports.connectorUrl)(origin)}`;
|
|
90
|
+
exports.connectorCommand = connectorCommand;
|
|
91
|
+
/** The plugin marketplace's public repository: the Asks skills and the company tools. */
|
|
118
92
|
exports.PLUGIN_MARKETPLACE = "ixoworld/ixo-plugins";
|
|
119
|
-
exports.PLUGIN_NAME = "asks";
|
|
120
|
-
exports.PLUGIN_ID = `${exports.PLUGIN_NAME}@ixo-plugins`;
|
|
121
|
-
/** The plugin marketplace's public repository: every plugin's skill, README and version. */
|
|
122
93
|
exports.PLUGIN_MARKETPLACE_URL = `https://github.com/${exports.PLUGIN_MARKETPLACE}`;
|
|
94
|
+
/** Where claude.ai lists plugins (Customize, then Plugins). */
|
|
95
|
+
exports.CLAUDE_PLUGINS_URL = "https://claude.ai/customize/plugins";
|
|
96
|
+
/** The apps that take the asks plugin: the connector plus the skills that teach the AI how to use Asks. The rest take the bare connector. */
|
|
97
|
+
exports.PLUGIN_CLIENTS = ["claude-ai", "claude-code", "codex"];
|
|
98
|
+
/** The plugin, and the server it registers, per network: `asks` talks to asks.world, `asks-testnet` to the sandbox, `asks-devnet` to dev.asks.world. */
|
|
99
|
+
const pluginName = (network) => (network === "mainnet" ? "asks" : network === "devnet" ? "asks-devnet" : "asks-testnet");
|
|
100
|
+
exports.pluginName = pluginName;
|
|
101
|
+
/** One app's plugin steps on a network: plain words for claude.ai, the lines to type for Claude Code and Codex. */
|
|
102
|
+
function pluginLines(client, network) {
|
|
103
|
+
const plugin = (0, exports.pluginName)(network);
|
|
104
|
+
const id = `${plugin}@${exports.PLUGIN_MARKETPLACE.split("/")[1]}`;
|
|
105
|
+
switch (client) {
|
|
106
|
+
case "claude-ai":
|
|
107
|
+
return `Open Customize, then Plugins (or go to ${exports.CLAUDE_PLUGINS_URL}). Tap Add, then Add marketplace, and enter ${exports.PLUGIN_MARKETPLACE}. Then open ${plugin} and turn it on. It asks you to sign in with Google the first time you use it.`;
|
|
108
|
+
case "claude-code":
|
|
109
|
+
return `/plugin marketplace add ${exports.PLUGIN_MARKETPLACE}\n/plugin install ${id}\nThen type /mcp in Claude Code, pick ${plugin} and sign in with Google.`;
|
|
110
|
+
case "codex":
|
|
111
|
+
return `codex plugin marketplace add ${exports.PLUGIN_MARKETPLACE}\ncodex plugin add ${id}\nCodex asks you to sign in with Google. If it does not, run codex mcp login ${plugin}.`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
123
114
|
/** An npm package's page, where its latest version is. */
|
|
124
115
|
const npmUrl = (name) => `https://www.npmjs.com/package/${name}`;
|
|
125
116
|
exports.npmUrl = npmUrl;
|
|
126
117
|
/**
|
|
127
|
-
* The packages
|
|
128
|
-
* guides (/llms.txt, /mcp.md) list these
|
|
118
|
+
* The packages a company runs for itself (its verifier, its payouts service), each with the version range an
|
|
119
|
+
* install pins. The guides (/llms.txt, /mcp.md) list these. The Asks tools themselves are the connector, not a package.
|
|
129
120
|
*/
|
|
130
121
|
exports.RESOURCE_PACKAGES = [
|
|
131
|
-
{ name:
|
|
132
|
-
{ name: "@ixo/
|
|
133
|
-
{ name: "@ixo/payouts-facilitator", range: "0.1", what: `a company's own payouts service, for paying workers in USD Coin on Base (used by ${exports.PLUGIN_NAME})` }
|
|
122
|
+
{ name: "@ixo/decision-oracle", range: "0.2", what: "company setup: the organisation, its verifier and Pay for reviews" },
|
|
123
|
+
{ name: "@ixo/payouts-facilitator", range: "0.1", what: "a company's own payouts service, for paying workers in USD Coin on Base" }
|
|
134
124
|
];
|
|
135
125
|
/** One line per package: name@range, what it is, its npm page. */
|
|
136
126
|
const resourceLines = () => exports.RESOURCE_PACKAGES.map((one) => `${one.name}@${one.range}: ${one.what}. ${(0, exports.npmUrl)(one.name)}`);
|
|
137
127
|
exports.resourceLines = resourceLines;
|
|
138
|
-
/**
|
|
139
|
-
* The hosted MCP (claude.ai, ChatGPT) only reads. Everything that signs runs in
|
|
140
|
-
* Claude Code with the local MCP / HQ plugin, where keys and data stay on the
|
|
141
|
-
* user's machine (owner ruling 2026-10-15). One wording, said everywhere.
|
|
142
|
-
*/
|
|
143
|
-
exports.READ_ONLY_LINE = "This connector holds no key: it reads, and posts an ask only as a pay link (post_ask with pay_by \"card\"), where the person pays by card and posts it on Asks. To post from your own money, set up payouts, pay for reviews or get paid, use Claude Code with an Asks plugin (asks): it runs on your computer, so your keys and data stay with you.";
|
|
144
|
-
/** The first Claude Code that installs from a marketplace in one step, with `--marketplace`. */
|
|
145
|
-
exports.CLAUDE_CODE_ONE_STEP = "2.1.275";
|
|
146
|
-
exports.PLUGIN_CLIENTS = ["claude-code", "codex"];
|
|
147
|
-
/**
|
|
148
|
-
* Every plugin install, in the order to show them: Claude Code in one step,
|
|
149
|
-
* the two steps an older Claude Code needs, then Codex.
|
|
150
|
-
*/
|
|
151
|
-
exports.PLUGIN_INSTALLS = ["claude-code", "claude-code-older", "codex"];
|
|
152
|
-
/** One plugin install, a command per line: the worker plugin unless `name` says which. */
|
|
153
|
-
function pluginLines(install, name = exports.PLUGIN_NAME) {
|
|
154
|
-
const id = `${name}@ixo-plugins`;
|
|
155
|
-
switch (install) {
|
|
156
|
-
case "claude-code":
|
|
157
|
-
return `/plugin install ${name} --marketplace ${exports.PLUGIN_MARKETPLACE}`;
|
|
158
|
-
case "claude-code-older":
|
|
159
|
-
return [`/plugin marketplace add ${exports.PLUGIN_MARKETPLACE}`, `/plugin install ${id}`].join("\n");
|
|
160
|
-
case "codex":
|
|
161
|
-
return [`codex plugin marketplace add ${exports.PLUGIN_MARKETPLACE}`, `codex plugin add ${id}`].join("\n");
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
/** The Claude Code install as shell commands, said on one line: for an agent that cannot type a /plugin command but can run `claude`. */
|
|
165
|
-
const pluginShellLine = (name) => `claude plugin marketplace add ${exports.PLUGIN_MARKETPLACE} then claude plugin install ${name}@ixo-plugins`;
|
|
166
|
-
exports.pluginShellLine = pluginShellLine;
|
|
167
|
-
/**
|
|
168
|
-
* The Claude app (desktop or claude.ai, paid plans): a person adds the plugin by hand, and its server, which runs on
|
|
169
|
-
* their computer, works where Claude can run things on it: the Code tab, or a chat with a folder connected (the former Cowork); not a plain chat (support.claude.com, "Use plugins in Claude").
|
|
170
|
-
*/
|
|
171
|
-
const claudeAppPluginSteps = (names) => `In the Claude app (paid plans) your user adds it themselves: Customize, then Plugins, then Add, then Add marketplace, then Add from a repository, and enter ${exports.PLUGIN_MARKETPLACE}; then on the Discover tab pick ${names} and tap Add. It runs on their computer, so they use it in the app's Code tab or in a chat with a folder connected, not in a plain chat.`;
|
|
172
|
-
exports.claudeAppPluginSteps = claudeAppPluginSteps;
|
|
173
|
-
/** The one plugin, for a company or a worker: what it does, said once. Every page and tool that shows an install shows it, from here. */
|
|
174
|
-
exports.PLUGIN_PATHS = [
|
|
175
|
-
{
|
|
176
|
-
name: exports.PLUGIN_NAME,
|
|
177
|
-
who: "For a company or yourself",
|
|
178
|
-
what: "Find Asks, answer them and get paid, post Asks of your own, and set up your company (organisation, how workers are paid, a verifier, review billing). A report ask is answered with Claude (the report and screenshots, which you approve before anything is sent) or on the website."
|
|
179
|
-
}
|
|
180
|
-
];
|
|
181
|
-
/** The plugin's commands (ixoworld/ixo-plugins), said once: `/asks` works out what the person wants, the rest go straight to one job. */
|
|
182
|
-
exports.PLUGIN_COMMANDS_LINE = `Once installed, type /asks and say what you want, or go straight to one job: /asks:create (post an ask or a review, set up a company), /asks:jobs (find work), /asks:invite, /asks:manage, /asks:report (write a review report), /asks:profile, /asks:account, /asks:connect, /asks:help.`;
|
|
183
|
-
exports.PLUGIN_WHERE = {
|
|
184
|
-
"claude-code": `Claude Code ${exports.CLAUDE_CODE_ONE_STEP} or newer, typed inside a session:`,
|
|
185
|
-
"claude-code-older": "An older Claude Code, two lines inside a session:",
|
|
186
|
-
codex: "Codex, in a terminal:"
|
|
187
|
-
};
|
|
188
|
-
/** The plugin as plain text: who it is for, then each install's lines. */
|
|
189
|
-
function pluginPathsText(installs = exports.PLUGIN_INSTALLS) {
|
|
190
|
-
return exports.PLUGIN_PATHS.map((path) => [`${path.who}: ${path.name}. ${path.what}`, ...installs.map((one) => `${exports.PLUGIN_WHERE[one]}\n${pluginLines(one, path.name)}`)].join("\n\n"));
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* What the plugin brings and which network to use, said for the site at `network`. One server serves both: every
|
|
194
|
-
* tool takes `network`, so there is nothing to set at install.
|
|
195
|
-
*/
|
|
196
|
-
function pluginNetworkNote(network) {
|
|
197
|
-
const what = "The plugin brings the server and its skill, for both networks. Every action names one: the real network (`mainnet`) or the sandbox (`testnet`, a dry run with play money).";
|
|
198
|
-
return isTest(network) ? `This site is the sandbox. Install ${exports.PLUGIN_NAME}. ${what} Here, use it with \`testnet\` (a dry run, play money).` : what;
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* The hosted server, for a client that cannot run a local one. It reads the
|
|
202
|
-
* board and hands every action back to the site or the local server, so a
|
|
203
|
-
* connector needs no key and no sign-in.
|
|
204
|
-
*/
|
|
205
|
-
exports.HOSTED_CLIENTS = ["connector", "claude-code"];
|
|
206
|
-
/** One hosted install, for the deployment at `origin`. */
|
|
207
|
-
function hostedLines(client, origin) {
|
|
208
|
-
const url = (0, exports.hostedUrl)(origin);
|
|
209
|
-
return client === "claude-code" ? `claude mcp add --transport http ${exports.MCP_SERVER} ${url}` : url;
|
|
210
|
-
}
|
|
211
|
-
exports.HOSTED_WHERE = {
|
|
212
|
-
connector: "Claude.ai, Claude Desktop or ChatGPT: add a custom connector with this URL. It reads the board; posting and answering need the local server.",
|
|
213
|
-
"claude-code": "Claude Code, the hosted server instead of a local one (read-only):"
|
|
214
|
-
};
|
|
215
128
|
//# sourceMappingURL=install.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"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"}
|