@ixo/asks-mcp 1.12.0-dev.3 → 1.12.1-dev.1
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/asks-mcp.mjs +44 -38
- package/package.json +1 -1
package/dist/asks-mcp.mjs
CHANGED
|
@@ -263660,7 +263660,7 @@ var init_callTerms = __esm({
|
|
|
263660
263660
|
};
|
|
263661
263661
|
reviewStart = (title) => (
|
|
263662
263662
|
/* The person copies this into their agent, so it is in their words: no tool names (expert prompts review, 2.6). */
|
|
263663
|
-
`I'm taking part in the review "${title ?? "\u2026"}" on
|
|
263663
|
+
`I'm taking part in the review "${title ?? "\u2026"}" on Pro Asks. Show me what the review asks for, then help me try each scenario and keep notes and screenshots as I go: what I did, what I expected and what I saw. Write up my findings with me, each with how serious it is and how to reproduce it, and my recommendations. Show me all of it, and hand it in as my report only when I say so.`
|
|
263664
263664
|
);
|
|
263665
263665
|
isReady = (fields) => missingOf(fields, { symbol: "", holds: null }).length === 0;
|
|
263666
263666
|
legOrder = (fields) => legsOf({ mode: fields.mode === "hire" ? "hire" : void 0, money: fields.money ?? { prize: 0, runnersN: 0, runnersEach: 0, entryEach: 0, entryUpTo: 0 } });
|
|
@@ -263835,6 +263835,7 @@ __export(call_exports2, {
|
|
|
263835
263835
|
confirms: () => confirms,
|
|
263836
263836
|
doorOf: () => doorOf,
|
|
263837
263837
|
draftOfEntries: () => draftOfEntries,
|
|
263838
|
+
feeUnpaid: () => feeUnpaid,
|
|
263838
263839
|
freshDraft: () => freshDraft,
|
|
263839
263840
|
indexLookup: () => indexLookup,
|
|
263840
263841
|
indexLookupWith: () => indexLookupWith,
|
|
@@ -264262,6 +264263,13 @@ async function postNextLegNow(slug, ctx) {
|
|
|
264262
264263
|
if (!leg) return { done: true, draft };
|
|
264263
264264
|
if (draft.coin && draft.coin !== ctx.askDenom && Object.values(draft.posted).some(Boolean)) throw new PostRefused("Refused: this call's posted legs pay in another coin than this network pays in now; every leg of a call pays in one. Nothing was posted.");
|
|
264264
264265
|
draft = { ...draft, coin: ctx.askDenom };
|
|
264266
|
+
if (ctx.acting && legs.some((one) => one.feeBase > 0)) throw new Error(callTwoCoins);
|
|
264267
|
+
const plan = legs.find((one) => one.leg === leg);
|
|
264268
|
+
const oracle = { kind: "oracle", address: ctx.checker, rewardUixo: plan.checkBase || legs.find((one) => one.leg === "entries").checkBase };
|
|
264269
|
+
const terms = legTerms(draft, leg, { poster: shortPoster, dates, oracle, approver: ctx.approver ?? null, share: priced.share, sponsor: ctx.sponsor });
|
|
264270
|
+
const screen = await steps.screen(ctx.site, terms.task, terms);
|
|
264271
|
+
if (screen?.verdict === "refuse") throw new Error(refusedWords(screen.reason));
|
|
264272
|
+
await steps.fund(actor.address, ctx.site, ctx.acting?.principal);
|
|
264265
264273
|
if (!draft.campaign && steps.createCampaign && !ctx.acting) {
|
|
264266
264274
|
const remember2 = async (made2) => {
|
|
264267
264275
|
draft = { ...draft, campaign: made2, updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
@@ -264283,13 +264291,6 @@ async function postNextLegNow(slug, ctx) {
|
|
|
264283
264291
|
if (!draft.campaign) await remember2(made);
|
|
264284
264292
|
}
|
|
264285
264293
|
const campaign = draft.campaign ? { protocolDid: draft.campaign.protocolDid, claimProtocolDid: null } : null;
|
|
264286
|
-
if (ctx.acting && legs.some((one) => one.feeBase > 0)) throw new Error(callTwoCoins);
|
|
264287
|
-
const plan = legs.find((one) => one.leg === leg);
|
|
264288
|
-
const oracle = { kind: "oracle", address: ctx.checker, rewardUixo: plan.checkBase || legs.find((one) => one.leg === "entries").checkBase };
|
|
264289
|
-
const terms = legTerms(draft, leg, { poster: shortPoster, dates, oracle, approver: ctx.approver ?? null, share: priced.share, sponsor: ctx.sponsor });
|
|
264290
|
-
const screen = await steps.screen(ctx.site, terms.task, terms);
|
|
264291
|
-
if (screen?.verdict === "refuse") throw new Error(refusedWords(screen.reason));
|
|
264292
|
-
await steps.fund(actor.address, ctx.site, ctx.acting?.principal);
|
|
264293
264294
|
const published = await steps.publish(terms);
|
|
264294
264295
|
if (!published) throw new Error("the store would not take the terms. Nothing was posted. Try again shortly");
|
|
264295
264296
|
let inFlight2 = { leg, poster, doneMeansCid: published.cid, startedAt: new Date(ctx.now ?? Date.now()).toISOString() };
|
|
@@ -264378,7 +264379,7 @@ function confirms(said3, totalBase, symbol2) {
|
|
|
264378
264379
|
const figure = said3.replace(/[$,\s]|USDC|PAY|IXO/gi, "");
|
|
264379
264380
|
return /^\d+(\.\d+)?$/.test(figure) && Math.round(Number(figure) * MICRO5) === totalBase;
|
|
264380
264381
|
}
|
|
264381
|
-
var MICRO5, callsDir, fileOf, askInvitesFile, freshDraft, L3, ENTRIES_MAX, INVITES_MAX, INVITE_NOTE_MAX, ADDRESS2, HANDLE_ITEM, isInviteItem, PRO_ASK_INVITE_ONLY, PRO_ASK_NEEDS_MARKETPLACE, manyLines, overCap, callTwoCoins, SETTLE_MS, chainCheck, InFlightError, PostRefused, said2, indexLookupWith, indexLookup, posting, isAskPending, isTxFailed, tagOf, TESTNET_CALL_DEFAULTS, payWords;
|
|
264382
|
+
var MICRO5, callsDir, fileOf, askInvitesFile, freshDraft, L3, ENTRIES_MAX, INVITES_MAX, INVITE_NOTE_MAX, ADDRESS2, HANDLE_ITEM, isInviteItem, PRO_ASK_INVITE_ONLY, PRO_ASK_NEEDS_MARKETPLACE, manyLines, overCap, callTwoCoins, SETTLE_MS, chainCheck, InFlightError, PostRefused, feeUnpaid, said2, indexLookupWith, indexLookup, posting, isAskPending, isTxFailed, tagOf, TESTNET_CALL_DEFAULTS, payWords;
|
|
264382
264383
|
var init_call2 = __esm({
|
|
264383
264384
|
"src/call.ts"() {
|
|
264384
264385
|
"use strict";
|
|
@@ -264435,6 +264436,7 @@ var init_call2 = __esm({
|
|
|
264435
264436
|
this.name = "PostRefused";
|
|
264436
264437
|
}
|
|
264437
264438
|
};
|
|
264439
|
+
feeUnpaid = (error54, askDenom2) => askDenom2 !== "uixo" && /spendable balance \d+uixo is smaller than \d+uixo/i.test(error54 instanceof Error ? error54.message : String(error54));
|
|
264438
264440
|
said2 = (error54) => error54 instanceof Error ? error54.message : String(error54);
|
|
264439
264441
|
indexLookupWith = (fetchImpl = fetch) => async (inFlight2) => {
|
|
264440
264442
|
const { resolveAsk: resolveAsk2 } = await Promise.resolve().then(() => (init_ask(), ask_exports));
|
|
@@ -265421,7 +265423,7 @@ ${p.education.map((one) => ` ${one.year ? `${one.year} \xB7 ` : ""}${one.title}
|
|
|
265421
265423
|
${block2.paragraphs.join("\n")}` : block2.kind === "pictures" ? `Pictures: ${block2.items.map((one) => `${one.alt} ${one.url}`).join("; ")}` : `Files: ${block2.items.map((one) => `${one.name} ${one.url}`).join("; ")}`
|
|
265422
265424
|
),
|
|
265423
265425
|
p.links.length ? `Links: ${p.links.join(" ")}` : "",
|
|
265424
|
-
`Page: ${proPage(site, p.handle)}
|
|
265426
|
+
`Page: ${proPage(site, p.handle)}`
|
|
265425
265427
|
].filter(Boolean).join("\n");
|
|
265426
265428
|
}
|
|
265427
265429
|
async function startLinkedin(site, signer2, fetchImpl) {
|
|
@@ -292284,7 +292286,7 @@ import { randomBytes as randomBytes7 } from "node:crypto";
|
|
|
292284
292286
|
// package.json
|
|
292285
292287
|
var package_default = {
|
|
292286
292288
|
name: "@ixo/asks-mcp",
|
|
292287
|
-
version: "1.12.
|
|
292289
|
+
version: "1.12.1-dev.1",
|
|
292288
292290
|
description: "The Openhands Network MCP server: read the board, answer asks, post work and get paid on the ixo chain, with a key of its own on your machine.",
|
|
292289
292291
|
license: "Apache-2.0",
|
|
292290
292292
|
repository: {
|
|
@@ -292647,7 +292649,7 @@ var TOOLS = {
|
|
|
292647
292649
|
},
|
|
292648
292650
|
set_my_page: {
|
|
292649
292651
|
title: "Write your pro page",
|
|
292650
|
-
description: "Make or change the pro page of the person you act for (or this key's own): the page posters find and invite them by, on
|
|
292652
|
+
description: "Make or change the pro page of the person you act for (or this key's own): the page posters find and invite them by, on Pro Asks and across asks.world. A handle, a name, a headline, what they do, a rate, links, availability, whether posters may invite them by handle, and `listed`: public (the default, anyone can find the page) or private (off asks.world and search; only someone who types the exact handle or address can invite them). Ask once, plainly, which they want. A private page can have a secret link (`share_link`: create, or replace to switch the old one off), said once on confirm. Previews by default; call again with confirm: true to sign. For guided setup, follow /pro/mcp.md#create-your-pro-profile on the matching Pro Asks host. Start with connect_linkedin: its verified profile pre-fills the name, headline, LinkedIn link and handle; ask only for what LinkedIn lacks (the work they take, rate, availability, a line about them). This tool reads no site itself, so build the rest from what the person tells you or pastes. Spends nothing.",
|
|
292651
292653
|
spends: false,
|
|
292652
292654
|
hosted: false,
|
|
292653
292655
|
annotations: { ...acts, idempotentHint: true }
|
|
@@ -292668,7 +292670,7 @@ var TOOLS = {
|
|
|
292668
292670
|
},
|
|
292669
292671
|
list_marketplaces: {
|
|
292670
292672
|
title: "List Zones",
|
|
292671
|
-
description: "The Zones of
|
|
292673
|
+
description: "The Zones of Pro Asks: a pro ask names one (draft_call's `sponsor`): the pros invited are LinkedIn verified, and it earns the Zone's share of each approved report. For each: its name and slug, what it does, since when, and how many LinkedIn-verified pros are on its roster. A pro gets on every roster with connect_linkedin. Nothing ranks them. Spends nothing.",
|
|
292672
292674
|
spends: false,
|
|
292673
292675
|
hosted: false,
|
|
292674
292676
|
annotations: reads
|
|
@@ -292689,7 +292691,7 @@ var TOOLS = {
|
|
|
292689
292691
|
},
|
|
292690
292692
|
set_marketplace_page: {
|
|
292691
292693
|
title: "Write your Zone's page",
|
|
292692
|
-
description: "Write the page of the Zone the person you act for hosts (or this key's own, when it is the Zone's account) on
|
|
292694
|
+
description: "Write the page of the Zone the person you act for hosts (or this key's own, when it is the Zone's account) on Pro Asks: its own words, under the line every Zone's page opens with. A deck line, a logo, a cover, its story in paragraphs, how it verifies pros as steps, pictures and links; every picture, logo and link is an https address on its own site, and nothing is uploaded. It replaces the page whole. Previews the page as text by default: show it to the person, and call again with confirm: true to sign and publish it only once they say yes. Only an approved Zone's account, or the agent it connected, can. Answers with the page's address. Spends nothing.",
|
|
292693
292695
|
spends: false,
|
|
292694
292696
|
hosted: false,
|
|
292695
292697
|
annotations: { ...acts, idempotentHint: true }
|
|
@@ -294936,7 +294938,7 @@ You cannot complete it, and trying would spend the gate's network fee to be reje
|
|
|
294936
294938
|
let lane = null;
|
|
294937
294939
|
if (isPrivate) {
|
|
294938
294940
|
const kit = await laneKit();
|
|
294939
|
-
const opened = await kit.lanes.openLane({ connectLink:
|
|
294941
|
+
const opened = await kit.lanes.openLane({ connectLink: acting ? "" : await codeLink(), acting: acting?.principal ?? null, entityDid: receipt.entityDid, collectionId, desk: kit.desk, agent: kit.agent });
|
|
294940
294942
|
if ("said" in opened) return text4(opened.said);
|
|
294941
294943
|
lane = opened;
|
|
294942
294944
|
}
|
|
@@ -296176,18 +296178,19 @@ tx ${result.transactionHash}${leftWords}`);
|
|
|
296176
296178
|
}
|
|
296177
296179
|
return { code: live.code, link: pairing.connectLinkWithCode(pairing.pairingSite(SITE, live), agent, live.code), account, done: () => store2.write({ ...live, used: true }) };
|
|
296178
296180
|
};
|
|
296181
|
+
const codeLink = async (reviews = false) => {
|
|
296182
|
+
const mine = await address2();
|
|
296183
|
+
const pairing = await Promise.resolve().then(() => (init_pairing(), pairing_exports));
|
|
296184
|
+
const store2 = await pairingFile();
|
|
296185
|
+
let { pairing: code10 } = pairing.currentPairing(store2, mine);
|
|
296186
|
+
if (reviews && !code10.reviews) store2.write(code10 = { ...code10, reviews: true });
|
|
296187
|
+
return pairing.connectLinkWithCode(pairing.pairingSite(SITE, code10), mine, code10.code);
|
|
296188
|
+
};
|
|
296179
296189
|
if (offered("get_connect_link")) server2.registerTool(
|
|
296180
296190
|
"get_connect_link",
|
|
296181
|
-
{ ...meta3("get_connect_link"), inputSchema: { reviews: external_exports.boolean().optional().describe("true when the person is a builder or specialist on
|
|
296182
|
-
async ({ reviews }) => {
|
|
296183
|
-
|
|
296184
|
-
const pairing = await Promise.resolve().then(() => (init_pairing(), pairing_exports));
|
|
296185
|
-
const store2 = await pairingFile();
|
|
296186
|
-
let { pairing: code10 } = pairing.currentPairing(store2, mine);
|
|
296187
|
-
if (reviews && !code10.reviews) store2.write(code10 = { ...code10, reviews: true });
|
|
296188
|
-
return text4(`${pairing.connectLinkWithCode(pairing.pairingSite(SITE, code10), mine, code10.code)}
|
|
296189
|
-
Open this, sign in with Google, tap Connect. Then tell me 'done'.`);
|
|
296190
|
-
}
|
|
296191
|
+
{ ...meta3("get_connect_link"), inputSchema: { reviews: external_exports.boolean().optional().describe("true when the person is a builder or specialist on Pro Asks: the link opens the same connect page inside that world.") } },
|
|
296192
|
+
async ({ reviews }) => text4(`${await codeLink(reviews)}
|
|
296193
|
+
Open this, sign in with Google, tap Connect. Then tell me 'done'.`)
|
|
296191
296194
|
);
|
|
296192
296195
|
if (offered("connection_status")) server2.registerTool("connection_status", { ...meta3("connection_status"), inputSchema: {} }, async () => {
|
|
296193
296196
|
const pairing = await pairingNow(await address2(), 0);
|
|
@@ -296216,6 +296219,7 @@ ${pairing.link}`);
|
|
|
296216
296219
|
was?.principal === "self" ? "Forgotten: this key is no longer pinned to act as itself. It still does, until connect_account pins the person's address; my_status names any account that has connected." : was ? `Forgotten: this key no longer acts for ${was.principal}. Asks it posts now are its own, paid from what it has itself. Their grants stay in place until they revoke them at ${SITE}/connect.` : "This key was not pinned to any account. Nothing changed."
|
|
296217
296220
|
);
|
|
296218
296221
|
}
|
|
296222
|
+
let pending = { code: null, link: "" };
|
|
296219
296223
|
if (!chosen2) {
|
|
296220
296224
|
const pairing = await pairingNow(mine, wait_seconds ?? 0);
|
|
296221
296225
|
if (pairing.account) {
|
|
@@ -296226,12 +296230,10 @@ ${pairing.link}`);
|
|
|
296226
296230
|
const { shortStr: shortStr2 } = await Promise.resolve().then(() => (init_format(), format_exports));
|
|
296227
296231
|
return text4(`Connected as ${shortStr2(pairing.account, 8, 4)}. They can disconnect at ${SITE}/connect.`);
|
|
296228
296232
|
}
|
|
296229
|
-
} else if (pairing.code) {
|
|
296230
|
-
return text4(`Nobody has approved the link yet. Ask the person to open it, sign in with Google and tap Connect, then call connect_account again:
|
|
296231
|
-
${pairing.link}`);
|
|
296232
296233
|
}
|
|
296234
|
+
pending = pairing;
|
|
296233
296235
|
}
|
|
296234
|
-
const deadline = Date.now() + (wait_seconds ?? 0) * 1e3;
|
|
296236
|
+
const deadline = Date.now() + (pending.code ? 0 : wait_seconds ?? 0) * 1e3;
|
|
296235
296237
|
let found = await connectAs2(mine, chosen2);
|
|
296236
296238
|
while ((found.kind === "none" || found.kind === "gone") && Date.now() < deadline) {
|
|
296237
296239
|
await new Promise((resolve2) => setTimeout(resolve2, 3e3));
|
|
@@ -296264,16 +296266,19 @@ They can disconnect at ${SITE}/connect.`);
|
|
|
296264
296266
|
return text4(
|
|
296265
296267
|
[
|
|
296266
296268
|
`${found.principals.length === 1 ? "An account has" : `${found.principals.length} accounts have`} connected this key: ${found.principals.join(", ")}.`,
|
|
296267
|
-
"Anybody can grant to a public address, so this server pins nobody it was not told to.
|
|
296269
|
+
"Anybody can grant to a public address, so this server pins nobody it was not told to. Ask the person you work for to open this one-time link and sign in with Google. If it says this agent is already connected, they disconnect it there and tap Connect again. Then call connect_account. Until then this key acts as itself:",
|
|
296270
|
+
pending.link || await codeLink()
|
|
296268
296271
|
].join("\n")
|
|
296269
296272
|
);
|
|
296270
296273
|
}
|
|
296274
|
+
if (pending.code) return text4(`Nobody has approved the link yet. Ask the person to open it, sign in with Google and tap Connect, then call connect_account again:
|
|
296275
|
+
${pending.link}`);
|
|
296271
296276
|
return text4(
|
|
296272
296277
|
[
|
|
296273
|
-
"Not connected yet. Ask the person you work for to open this link
|
|
296274
|
-
|
|
296278
|
+
"Not connected yet. Ask the person you work for to open this link, sign in with Google and tap Connect:",
|
|
296279
|
+
await codeLink(),
|
|
296275
296280
|
"",
|
|
296276
|
-
`It names this key's address (${mine}) and
|
|
296281
|
+
`It names this key's address (${mine}) and a one-time code that lasts 30 minutes, so this server connects exactly the account that taps Connect. They set a cap and tap once. Then call connect_account again. Nothing is spent by this.`
|
|
296277
296282
|
].join("\n")
|
|
296278
296283
|
);
|
|
296279
296284
|
}
|
|
@@ -296559,7 +296564,7 @@ Mapping pays for the report. What happens to a mapped pin afterwards is a separa
|
|
|
296559
296564
|
brief: external_exports.array(external_exports.string().max(1500)).max(8).optional().describe("The story, up to eight short paragraphs, in the person's words."),
|
|
296560
296565
|
lines: external_exports.array(external_exports.object({ text: external_exports.string().max(300), fail: external_exports.string().max(300).optional() })).max(5).optional().describe('The five requirements the jury reviews. For each, write the requirement in `text` and the condition that fails it in `fail`. Write `fail` as a clause completing "Fail this only if \u2026", for example "it names no page". Include all five.'),
|
|
296561
296566
|
mode: external_exports.enum(["competition", "hire"]).optional().describe("competition: a pick and runners-up beside the paid entries. hire: every entry that passes is paid the same, up to a number, and nobody is picked."),
|
|
296562
|
-
kind: external_exports.literal("review").optional().describe("review: a pro ask on
|
|
296567
|
+
kind: external_exports.literal("review").optional().describe("review: a pro ask on Pro Asks, a review of an app or an agent. LinkedIn-verified pros, invited through the Zone you name (sponsor), try the scenarios and hand in review reports; every report that passes the lines is paid the same (a hire); by invitation only; the five lines default to the review's own unless given. Asky Pro Checker, the verifier, checks each report for its own fee per check, held with the reward."),
|
|
296563
296568
|
sponsor: external_exports.string().max(40).optional().describe("A pro ask: the Zone's slug, as list_marketplaces gives it. The pros you invite come from its roster; it earns the Zone's share."),
|
|
296564
296569
|
subject: external_exports.object({ name: external_exports.string().max(120), version: external_exports.string().max(40).optional(), where: external_exports.string().max(2048).optional() }).optional().describe("A review: what is reviewed, the version to test, and where a specialist finds it (a public address). Private access goes in the invitation note, never here."),
|
|
296565
296570
|
scenarios: external_exports.array(external_exports.string().max(300)).max(8).optional().describe("A review: the scenarios to try, one line each; every report must cover each with a step."),
|
|
@@ -296754,8 +296759,8 @@ The call: ${linkOf(draft.posted)}`);
|
|
|
296754
296759
|
const sponsor = marketplace?.sponsor ?? null;
|
|
296755
296760
|
const acting = card || plain_key && review ? null : await principal2();
|
|
296756
296761
|
if (!acting && !plain_key && !card) {
|
|
296757
|
-
return text4(`Not connected. A call uses the connected account as its poster and funding source. Ask them to
|
|
296758
|
-
${
|
|
296762
|
+
return text4(`Not connected. A call uses the connected account as its poster and funding source. Ask them to open this link, sign in with Google and tap Connect, then call connect_account:
|
|
296763
|
+
${await codeLink(review)}
|
|
296759
296764
|
Then call post_call again. Nothing was posted.`);
|
|
296760
296765
|
}
|
|
296761
296766
|
const { checkerLegBase: checkerLegBase2 } = await Promise.resolve().then(() => (init_leg(), leg_exports));
|
|
@@ -296854,6 +296859,7 @@ Then call post_call again. Nothing was posted.`);
|
|
|
296854
296859
|
if (error54 instanceof call2.InFlightError || error54 instanceof call2.PostRefused) return text4(error54.message);
|
|
296855
296860
|
if (isUnanchored(error54)) return text4(unanchoredWords(error54));
|
|
296856
296861
|
if (error54 instanceof Error && error54.name === "TxFailed") {
|
|
296862
|
+
if (call2.feeUnpaid(error54, coin)) return text4(`Nothing moved: this agent's key could not pay the network fee for ${LEG_WORDS[next]}. Call post_call again in a minute; it arranges the fee before it signs anything. If it is refused again, tell the person the network fee could not be arranged just now.`);
|
|
296857
296863
|
return text4(`The network refused ${LEG_WORDS[next]}: ${error54.message}. Nothing moved. Fix that (often what the account holds, or its cap) and call post_call again.`);
|
|
296858
296864
|
}
|
|
296859
296865
|
return text4(
|
|
@@ -297335,7 +297341,7 @@ Here's your private link: ${link5.url}. Anyone with it can see your page; ask me
|
|
|
297335
297341
|
|
|
297336
297342
|
No private link was made: ${link5.refused}.`;
|
|
297337
297343
|
if (read9.profile.listed === false) return text4(`Saved the private profile for ${answer.address}. It is not shown on asks.world or in search; posters who type "@${answer.handle}" or the address can still invite them.${linkLine}`);
|
|
297338
|
-
return text4(`Published the profile for ${answer.address}: ${proPage(SITE, answer.handle)}.
|
|
297344
|
+
return text4(`Published the profile for ${answer.address}: ${proPage(SITE, answer.handle)}. Posters invite them with "@${answer.handle}".${linkLine}`);
|
|
297339
297345
|
}
|
|
297340
297346
|
);
|
|
297341
297347
|
if (offered("my_page")) server2.registerTool("my_page", { ...meta3("my_page"), inputSchema: {} }, async () => {
|
|
@@ -297492,7 +297498,7 @@ ${asData("linkedin", JSON.stringify(prefill, null, 2))}`
|
|
|
297492
297498
|
if (!confirm)
|
|
297493
297499
|
return text4(
|
|
297494
297500
|
[
|
|
297495
|
-
`This takes down @${page.profile.handle} (${where2}
|
|
297501
|
+
`This takes down @${page.profile.handle} (${where2}), the page of ${owner}${acting ? ", the person this key acts for" : ""}:`,
|
|
297496
297502
|
`- The page and everything on it are deleted: the CV, the rate, the links, and the LinkedIn tick (that LinkedIn can verify again later). It leaves the Hands directory. This can't be undone.`,
|
|
297497
297503
|
`- The handle @${page.profile.handle} is freed, and anybody may take it. Posters can no longer invite them by it.`,
|
|
297498
297504
|
`- Invitations already on a call's list name the address, and stay. Their work and decisions are the public record and are not touched.`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ixo/asks-mcp",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.1-dev.1",
|
|
4
4
|
"description": "The Openhands Network MCP server: read the board, answer asks, post work and get paid on the ixo chain, with a key of its own on your machine.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|