tenjin-cli 0.1.0-alpha.0 → 0.1.0-alpha.2
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/NOTICE.md +33 -0
- package/README.md +198 -18
- package/dist/{_esm-ZH2J4QEH.js → _esm-C5CRWCYU.js} +2 -2
- package/dist/_esm-FEASBWRP.js +881 -0
- package/dist/buy-U35DQ6XM.js +1598 -0
- package/dist/buy-U35DQ6XM.js.map +1 -0
- package/dist/candidate-RLYCQMF5.js +127 -0
- package/dist/candidate-RLYCQMF5.js.map +1 -0
- package/dist/{ccip-FXWZDDF5.js → ccip-NQXCEK2U.js} +6 -5
- package/dist/ccip-XR5NE5QK.js +19 -0
- package/dist/chunk-27ONARHV.js +171 -0
- package/dist/chunk-27ONARHV.js.map +1 -0
- package/dist/chunk-2I4QTOLB.js +11 -0
- package/dist/chunk-2I4QTOLB.js.map +1 -0
- package/dist/chunk-3OV7E5G5.js +18 -0
- package/dist/chunk-3OV7E5G5.js.map +1 -0
- package/dist/chunk-5CLSD5YN.js +209 -0
- package/dist/chunk-5CLSD5YN.js.map +1 -0
- package/dist/chunk-7KUW4MJD.js +59 -0
- package/dist/chunk-7KUW4MJD.js.map +1 -0
- package/dist/{doctor-MVLZRVPU.js → chunk-7PHSZKQS.js} +88 -93
- package/dist/chunk-7PHSZKQS.js.map +1 -0
- package/dist/chunk-CYOF7ROH.js +70 -0
- package/dist/chunk-CYOF7ROH.js.map +1 -0
- package/dist/chunk-HIVZG55D.js +204 -0
- package/dist/chunk-HIVZG55D.js.map +1 -0
- package/dist/chunk-HSDCI7OV.js +7806 -0
- package/dist/chunk-HSDCI7OV.js.map +1 -0
- package/dist/{chunk-LTTRND4A.js → chunk-IYLHQMT5.js} +85 -9
- package/dist/chunk-IYLHQMT5.js.map +1 -0
- package/dist/chunk-JPHG2JW3.js +96 -0
- package/dist/chunk-JPHG2JW3.js.map +1 -0
- package/dist/{chunk-ZPZFPVDN.js → chunk-MUBUQVC3.js} +1 -1
- package/dist/chunk-MUBUQVC3.js.map +1 -0
- package/dist/chunk-N62ROTMC.js +79 -0
- package/dist/chunk-N62ROTMC.js.map +1 -0
- package/dist/{chunk-SXQQ2ZSR.js → chunk-NCE5NSN6.js} +186 -18
- package/dist/chunk-NCE5NSN6.js.map +1 -0
- package/dist/{chunk-FIYZLITH.js → chunk-OYMYCW7J.js} +23 -4
- package/dist/{chunk-FIYZLITH.js.map → chunk-OYMYCW7J.js.map} +1 -1
- package/dist/chunk-QNP7H47L.js +152 -0
- package/dist/chunk-QNP7H47L.js.map +1 -0
- package/dist/{chunk-TX5T3LKJ.js → chunk-QVX5MWJZ.js} +21 -17
- package/dist/{chunk-TX5T3LKJ.js.map → chunk-QVX5MWJZ.js.map} +1 -1
- package/dist/{chunk-CPUZRZ2A.js → chunk-RBJPAZFI.js} +25 -170
- package/dist/chunk-RBJPAZFI.js.map +1 -0
- package/dist/chunk-RRN3YTK7.js +6199 -0
- package/dist/chunk-RRN3YTK7.js.map +1 -0
- package/dist/chunk-RY4XKNV3.js +140 -0
- package/dist/chunk-RY4XKNV3.js.map +1 -0
- package/dist/chunk-S3IGX57D.js +14682 -0
- package/dist/chunk-S3IGX57D.js.map +1 -0
- package/dist/{config-XVXZ3V2Q.js → chunk-TFGSOPWR.js} +117 -62
- package/dist/chunk-TFGSOPWR.js.map +1 -0
- package/dist/chunk-TLCMMYLY.js +126 -0
- package/dist/chunk-TLCMMYLY.js.map +1 -0
- package/dist/{chunk-PAAL45FJ.js → chunk-UGX7YPX2.js} +3446 -448
- package/dist/chunk-UGX7YPX2.js.map +1 -0
- package/dist/chunk-UO22YNY4.js +69 -0
- package/dist/chunk-UO22YNY4.js.map +1 -0
- package/dist/chunk-UPIEAMGH.js +160 -0
- package/dist/chunk-UPIEAMGH.js.map +1 -0
- package/dist/chunk-XJIW7USF.js +217 -0
- package/dist/chunk-XJIW7USF.js.map +1 -0
- package/dist/{chunk-F5DZJLU3.js → chunk-YALGASEU.js} +2065 -1258
- package/dist/chunk-YALGASEU.js.map +1 -0
- package/dist/chunk-YBMMV4Y4.js +51 -0
- package/dist/chunk-YBMMV4Y4.js.map +1 -0
- package/dist/chunk-YIYQ2ZNT.js +286 -0
- package/dist/chunk-YIYQ2ZNT.js.map +1 -0
- package/dist/{chunk-376LHMK2.js → chunk-YN5SHIXQ.js} +36 -10
- package/dist/chunk-YN5SHIXQ.js.map +1 -0
- package/dist/chunk-Z52RA3NC.js +137 -0
- package/dist/chunk-Z52RA3NC.js.map +1 -0
- package/dist/chunk-Z6MFJV5Z.js +1330 -0
- package/dist/chunk-Z6MFJV5Z.js.map +1 -0
- package/dist/chunk-ZABPQJ3M.js +83 -0
- package/dist/chunk-ZABPQJ3M.js.map +1 -0
- package/dist/{chunk-WOHCAMDQ.js → chunk-ZMHYXMO6.js} +1887 -1029
- package/dist/chunk-ZMHYXMO6.js.map +1 -0
- package/dist/{chunk-3IMLRUZE.js → chunk-ZXTAQYNA.js} +6 -2
- package/dist/{cli-LMHGCZ5S.js → cli-4NNBEQYH.js} +175 -179
- package/dist/cli-4NNBEQYH.js.map +1 -0
- package/dist/config-2VSXWWHK.js +21 -0
- package/dist/doctor-JJPNIBYH.js +20 -0
- package/dist/doctor-JJPNIBYH.js.map +1 -0
- package/dist/ethersCompat-Df4a6QIZ-3YZIAXDK.js +18 -0
- package/dist/ethersCompat-Df4a6QIZ-3YZIAXDK.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/inspect-JGYJWFDP.js +96 -0
- package/dist/inspect-JGYJWFDP.js.map +1 -0
- package/dist/install-ZQRMSRGW.js +378 -0
- package/dist/install-ZQRMSRGW.js.map +1 -0
- package/dist/lookup-WYVTOMVY.js +113 -0
- package/dist/lookup-WYVTOMVY.js.map +1 -0
- package/dist/{mine.wasm-GQECMSGN.js → mine.wasm-6PIT3DK6.js} +2 -2
- package/dist/outcome-HKKT6QIA.js +66 -0
- package/dist/outcome-HKKT6QIA.js.map +1 -0
- package/dist/publish-D76B3MBK.js +1480 -0
- package/dist/publish-D76B3MBK.js.map +1 -0
- package/dist/{secp256k1-35YNNB6F.js → secp256k1-N3ZHU7LB.js} +5 -4
- package/dist/secp256k1-N3ZHU7LB.js.map +1 -0
- package/dist/usdc-JIAJW4SV.js +22 -0
- package/dist/usdc-JIAJW4SV.js.map +1 -0
- package/dist/viemAdapter-By13KInL-ZZE6UV4Y.js +14 -0
- package/dist/viemAdapter-By13KInL-ZZE6UV4Y.js.map +1 -0
- package/dist/wallet-6QKS6UHW.js +179 -0
- package/dist/wallet-6QKS6UHW.js.map +1 -0
- package/dist/wallet-PA54CRBL.js +30 -0
- package/dist/wallet-PA54CRBL.js.map +1 -0
- package/package.json +20 -15
- package/skills/tenjin/SKILL.md +199 -0
- package/skills/tenjin-publish/SKILL.md +96 -0
- package/skills/tenjin-search/SKILL.md +122 -0
- package/dist/chunk-376LHMK2.js.map +0 -1
- package/dist/chunk-CPUZRZ2A.js.map +0 -1
- package/dist/chunk-F5DZJLU3.js.map +0 -1
- package/dist/chunk-LTTRND4A.js.map +0 -1
- package/dist/chunk-PAAL45FJ.js.map +0 -1
- package/dist/chunk-QHIEYBLV.js +0 -320
- package/dist/chunk-QHIEYBLV.js.map +0 -1
- package/dist/chunk-SXQQ2ZSR.js.map +0 -1
- package/dist/chunk-WOHCAMDQ.js.map +0 -1
- package/dist/chunk-ZPZFPVDN.js.map +0 -1
- package/dist/cli-LMHGCZ5S.js.map +0 -1
- package/dist/config-XVXZ3V2Q.js.map +0 -1
- package/dist/doctor-MVLZRVPU.js.map +0 -1
- package/dist/usdc-OQUOFF6R.js +0 -18
- package/dist/wallet-NRKWLKHX.js +0 -153
- package/dist/wallet-NRKWLKHX.js.map +0 -1
- package/dist/wallet-QUWK2PA4.js +0 -22
- /package/dist/{_esm-ZH2J4QEH.js.map → _esm-C5CRWCYU.js.map} +0 -0
- /package/dist/{ccip-FXWZDDF5.js.map → _esm-FEASBWRP.js.map} +0 -0
- /package/dist/{chunk-3IMLRUZE.js.map → ccip-NQXCEK2U.js.map} +0 -0
- /package/dist/{secp256k1-35YNNB6F.js.map → ccip-XR5NE5QK.js.map} +0 -0
- /package/dist/{usdc-OQUOFF6R.js.map → chunk-ZXTAQYNA.js.map} +0 -0
- /package/dist/{wallet-QUWK2PA4.js.map → config-2VSXWWHK.js.map} +0 -0
- /package/dist/{mine.wasm-GQECMSGN.js.map → mine.wasm-6PIT3DK6.js.map} +0 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { createRequire as __tenjinCreateRequire } from 'node:module'; const require = __tenjinCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
assertOnBaseOrigin
|
|
4
|
+
} from "./chunk-7KUW4MJD.js";
|
|
5
|
+
import {
|
|
6
|
+
recordLookup
|
|
7
|
+
} from "./chunk-JPHG2JW3.js";
|
|
8
|
+
import {
|
|
9
|
+
buildLookupRequest,
|
|
10
|
+
postLookup
|
|
11
|
+
} from "./chunk-YIYQ2ZNT.js";
|
|
12
|
+
import "./chunk-3OV7E5G5.js";
|
|
13
|
+
import {
|
|
14
|
+
sanitizeForTerminal
|
|
15
|
+
} from "./chunk-Z52RA3NC.js";
|
|
16
|
+
import "./chunk-QNP7H47L.js";
|
|
17
|
+
import "./chunk-N62ROTMC.js";
|
|
18
|
+
import {
|
|
19
|
+
resolveContextSettings
|
|
20
|
+
} from "./chunk-UPIEAMGH.js";
|
|
21
|
+
import {
|
|
22
|
+
parseUsdToAtomic
|
|
23
|
+
} from "./chunk-IYLHQMT5.js";
|
|
24
|
+
import "./chunk-YBMMV4Y4.js";
|
|
25
|
+
import "./chunk-UO22YNY4.js";
|
|
26
|
+
import "./chunk-MUBUQVC3.js";
|
|
27
|
+
import {
|
|
28
|
+
CliError
|
|
29
|
+
} from "./chunk-OYMYCW7J.js";
|
|
30
|
+
import "./chunk-ZXTAQYNA.js";
|
|
31
|
+
|
|
32
|
+
// src/commands/lookup.ts
|
|
33
|
+
async function runLookup(args, ctx, deps = {}) {
|
|
34
|
+
const settings = await resolveContextSettings(ctx);
|
|
35
|
+
const input = { question: args.question };
|
|
36
|
+
if (args.maxPrice !== void 0) input.maxPrice = parseUsdToAtomic(args.maxPrice);
|
|
37
|
+
if (args.freshWithin !== void 0) input.freshWithin = args.freshWithin;
|
|
38
|
+
if (args.limit !== void 0) input.limit = parseLimit(args.limit);
|
|
39
|
+
if (args.appliesTo !== void 0 && args.appliesTo.length > 0) {
|
|
40
|
+
input.appliesTo = parseAppliesTo(args.appliesTo);
|
|
41
|
+
}
|
|
42
|
+
const request = buildLookupRequest(input);
|
|
43
|
+
const response = await postLookup(request, {
|
|
44
|
+
baseUrl: settings.baseUrl,
|
|
45
|
+
timeoutMs: ctx.flags.timeout,
|
|
46
|
+
evalCohort: settings.evalCohort,
|
|
47
|
+
...deps.fetchImpl !== void 0 ? { fetchImpl: deps.fetchImpl } : {}
|
|
48
|
+
});
|
|
49
|
+
const candidates = response.candidates ?? [];
|
|
50
|
+
for (const c of candidates) {
|
|
51
|
+
try {
|
|
52
|
+
assertOnBaseOrigin(c.url, settings.baseUrl, "lookup candidate URL");
|
|
53
|
+
} catch (err) {
|
|
54
|
+
throw new CliError(
|
|
55
|
+
"CONTRACT_MISMATCH",
|
|
56
|
+
`Lookup candidate ${c.resourceId} points off the configured base URL.`,
|
|
57
|
+
{ cause: err }
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
await recordLookup(ctx.dataDir, {
|
|
62
|
+
lookupId: response.lookupId,
|
|
63
|
+
at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
64
|
+
question: request.question,
|
|
65
|
+
decision: response.decision,
|
|
66
|
+
candidates: candidates.map((c) => ({
|
|
67
|
+
resourceId: c.resourceId,
|
|
68
|
+
url: c.url,
|
|
69
|
+
title: c.title,
|
|
70
|
+
price: c.price
|
|
71
|
+
}))
|
|
72
|
+
});
|
|
73
|
+
const humanLines = response.decision === "MISS" ? [`MISS, no candidates (lookupId ${response.lookupId})`] : [
|
|
74
|
+
`${candidates.length} candidate(s) (lookupId ${response.lookupId}):`,
|
|
75
|
+
...candidates.map(
|
|
76
|
+
(c, i) => ` ${i + 1}. ${sanitizeForTerminal(c.title)}, ${c.price} atomic, ${sanitizeForTerminal(c.url)}`
|
|
77
|
+
)
|
|
78
|
+
];
|
|
79
|
+
return { data: response, humanLines };
|
|
80
|
+
}
|
|
81
|
+
function parseLimit(raw) {
|
|
82
|
+
const n = Number(raw);
|
|
83
|
+
if (!Number.isInteger(n)) {
|
|
84
|
+
throw new CliError("USAGE", `Invalid --limit: ${JSON.stringify(raw)}`, {
|
|
85
|
+
fix: "Pass an integer between 1 and 10."
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return n;
|
|
89
|
+
}
|
|
90
|
+
function parseAppliesTo(pairs) {
|
|
91
|
+
const out = {};
|
|
92
|
+
for (const pair of pairs) {
|
|
93
|
+
const eq = pair.indexOf("=");
|
|
94
|
+
if (eq <= 0) {
|
|
95
|
+
throw new CliError("USAGE", `Invalid --applies-to: ${JSON.stringify(pair)}`, {
|
|
96
|
+
fix: "Use key=value, e.g. --applies-to products=Vercel."
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const key = pair.slice(0, eq).trim();
|
|
100
|
+
const values = pair.slice(eq + 1).split(",").map((v) => v.trim()).filter((v) => v.length > 0);
|
|
101
|
+
if (values.length === 0) {
|
|
102
|
+
throw new CliError("USAGE", `--applies-to ${JSON.stringify(key)} has no values`, {
|
|
103
|
+
fix: "Give each key at least one value, e.g. products=Vercel."
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
out[key] = [...out[key] ?? [], ...values];
|
|
107
|
+
}
|
|
108
|
+
return out;
|
|
109
|
+
}
|
|
110
|
+
export {
|
|
111
|
+
runLookup
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=lookup-WYVTOMVY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/lookup.ts"],"sourcesContent":["import { CliError } from '../lib/errors';\nimport { parseUsdToAtomic } from '../lib/money';\nimport { resolveContextSettings } from '../lib/settings';\nimport { buildLookupRequest, postLookup, type LookupInput } from '../lib/agent-api';\nimport { recordLookup } from '../lib/lookup-store';\nimport { assertOnBaseOrigin } from '../lib/resource-ref';\nimport { sanitizeForTerminal } from '../lib/output';\nimport type { CommandContext, CommandResult } from '../context';\n\n/**\n * `tenjin lookup \"<question>\"`, one POST to /api/agent/lookup. Prints the compact\n * CANDIDATES/MISS response verbatim (spec 10), and records the lookupId +\n * candidates locally so `outcome --last` and `buy <resourceId>` can use them. No\n * wallet, no signing: lookup is anonymous.\n */\n\nexport interface LookupArgs {\n question: string;\n /** Decimal USD at the edge (O1); converted to atomic for the wire. */\n maxPrice?: string;\n freshWithin?: string;\n limit?: string;\n /** Raw `k=v` / `k=v1,v2` pairs from repeated --applies-to. */\n appliesTo?: string[];\n}\n\nexport interface LookupDeps {\n fetchImpl?: typeof fetch;\n}\n\nexport async function runLookup(\n args: LookupArgs,\n ctx: CommandContext,\n deps: LookupDeps = {},\n): Promise<CommandResult> {\n const settings = await resolveContextSettings(ctx);\n const input: LookupInput = { question: args.question };\n if (args.maxPrice !== undefined) input.maxPrice = parseUsdToAtomic(args.maxPrice);\n if (args.freshWithin !== undefined) input.freshWithin = args.freshWithin;\n if (args.limit !== undefined) input.limit = parseLimit(args.limit);\n if (args.appliesTo !== undefined && args.appliesTo.length > 0) {\n input.appliesTo = parseAppliesTo(args.appliesTo);\n }\n\n const request = buildLookupRequest(input);\n const response = await postLookup(request, {\n baseUrl: settings.baseUrl,\n timeoutMs: ctx.flags.timeout,\n evalCohort: settings.evalCohort,\n ...(deps.fetchImpl !== undefined ? { fetchImpl: deps.fetchImpl } : {}),\n });\n\n const candidates = response.candidates ?? [];\n // Ingest trust boundary: a candidate url that points off the configured origin\n // would later route a wallet-signed SIWX header and payment to that host via\n // `buy <resourceId>`. Refuse the whole response as a contract violation.\n for (const c of candidates) {\n try {\n assertOnBaseOrigin(c.url, settings.baseUrl, 'lookup candidate URL');\n } catch (err) {\n throw new CliError(\n 'CONTRACT_MISMATCH',\n `Lookup candidate ${c.resourceId} points off the configured base URL.`,\n { cause: err },\n );\n }\n }\n await recordLookup(ctx.dataDir, {\n lookupId: response.lookupId,\n at: new Date().toISOString(),\n question: request.question,\n decision: response.decision,\n candidates: candidates.map((c) => ({\n resourceId: c.resourceId,\n url: c.url,\n title: c.title,\n price: c.price,\n })),\n });\n\n const humanLines =\n response.decision === 'MISS'\n ? [`MISS, no candidates (lookupId ${response.lookupId})`]\n : [\n `${candidates.length} candidate(s) (lookupId ${response.lookupId}):`,\n ...candidates.map(\n (c, i) =>\n ` ${i + 1}. ${sanitizeForTerminal(c.title)}, ${c.price} atomic, ${sanitizeForTerminal(c.url)}`,\n ),\n ];\n\n return { data: response, humanLines };\n}\n\nfunction parseLimit(raw: string): number {\n const n = Number(raw);\n if (!Number.isInteger(n)) {\n throw new CliError('USAGE', `Invalid --limit: ${JSON.stringify(raw)}`, {\n fix: 'Pass an integer between 1 and 10.',\n });\n }\n return n;\n}\n\n/** `products=Vercel` or `products=Vercel,Next` → { products: [\"Vercel\",\"Next\"] }. Repeated\n * keys merge their values. */\nfunction parseAppliesTo(pairs: string[]): Record<string, string[]> {\n const out: Record<string, string[]> = {};\n for (const pair of pairs) {\n const eq = pair.indexOf('=');\n if (eq <= 0) {\n throw new CliError('USAGE', `Invalid --applies-to: ${JSON.stringify(pair)}`, {\n fix: 'Use key=value, e.g. --applies-to products=Vercel.',\n });\n }\n const key = pair.slice(0, eq).trim();\n const values = pair\n .slice(eq + 1)\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v.length > 0);\n if (values.length === 0) {\n throw new CliError('USAGE', `--applies-to ${JSON.stringify(key)} has no values`, {\n fix: 'Give each key at least one value, e.g. products=Vercel.',\n });\n }\n out[key] = [...(out[key] ?? []), ...values];\n }\n return out;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __tenjinCreateRequire } from 'node:module'; const require = __tenjinCreateRequire(import.meta.url);
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-ZXTAQYNA.js";
|
|
3
3
|
|
|
4
4
|
// node_modules/.pnpm/ox@0.14.30_typescript@6.0.3_zod@4.4.3/node_modules/ox/_esm/tempo/internal/mine.wasm.js
|
|
5
5
|
var wasmBase64 = "AGFzbQEAAAABBgFgAX8BfwMCAQAFAwEAAgcRAgZtZW1vcnkCAARtaW5lAAAMAQEKjxABjBACA38ufgJAIABBAEwNAEGQCDEAAEGRCDEAAEIIhoRBkggxAABCEIaEQZMIMQAAQhiGhCEtQYgIMQAAQYkIMQAAQgiGhEGKCDEAAEIQhoRBiwgxAABCGIaEQYwIMQAAQiCGhEGNCDEAAEIohoRBjggxAABCMIaEQY8IMQAAQjiGhCEuQYAIMQAAQYEIMQAAQgiGhEGCCDEAAEIQhoRBgwgxAABCGIaEQYQIMQAAQiCGhEGFCDEAAEIohoRBhggxAABCMIaEQYcIMQAAQjiGhCEvA0BBsAg1AgBCgICAgBCEIQ9BlAg1AgBCIIYgLYQhB0GoCCkDACEQQaAIKQMAIRFBmAgpAwAhCkKAgICAgICAgIB/IRJCACETQcB+IQEgLiELQgAhFEIAIRVCACEWQgAhF0IAIRhCACEZQgAhGkIAIRtCACEcIC8hCUIAIR1CACEeQgAhDEIAIR9CACENQgAhIEIAIQ4DQCAJIBCFIB2FIB6FIAyFIgQgByAZhSAahSAbhSAchSIIQgGJhSIGIA+FIAogH4UgDYUgIIUgDoUiBSAEQgGJhSIEIBiFITEgBiAVhUICiSIjIAcgBUIBiSALIA+FIBSFIBKFIBWFIgWFIgeFQj6JIiFCf4UgCCARIBaFIBeFIBOFIBiFIg9CAYmFIgggH4VCN4kiIoOFIRggDyAFQgGJhSIFIB6FQimJIiUgBCAXhUIniSIkQn+FgyAihSEVIAYgFIVCCokiJyAIIA6FQjiJIg4gByAbhUIPiSImQn+Fg4UhGyAEIBGFQhuJIikgJyAFIBCFQiSJIihCf4WDhSEeIAUgDIVCEokiLCAHIBmFQgaJIisgBiALhUIBiSIqQn+Fg4UhFyAIIA2FQhmJIgxCf4UgBCAThUIIiSINgyArhSEUIAggCoVCHIkiC0J/hSAEIBaFQhSJIgqDIAcgHIVCPYkiBIUhFiAGIBKFQi2JIgYgCyAEQn+Fg4UhHyAEIAZCf4WDIAUgHYVCA4kiBIUhGSAKIAYgBEJ/hYOFIQ8gBCAKQn+FgyALhSEQIAUgCYUiBCAxQg6JIgZCf4WDIAggIIVCFYkiCYUhCiAHIBqFQiuJIgggBiAJQn+Fg4UhB0IsiSIFIAkgCEJ/hYOFIQsgAUHAgQRqKQMAIAggBUJ/hYOFIASFIQkgJiAnQn+FgyAohSESIAYgBSAEQn+Fg4UhESAoIClCf4WDIA6FIRMgLCANQn+FgyAMhSEaICQgIyAlQn+Fg4UhHCAMICtCf4WDICqFIR0gJCAiQn+FgyAhhSEMIA0gKiAsQn+Fg4UhDSApIA5Cf4WDICaFISAgISAjQn+FgyAlhSEOIAFBCGoiAQ0ACwJAAkACQCAJpwRAQbMILQAAIgFB/wFHBEBBswghAgwCC0GzCEEAOgAAQbIILQAAIgFB/wFHBEBBsgghAgwCC0GyCEEAOgAAQbEILQAAIgFB/wFHBEBBsQghAgwCC0GxCEEAOgAAQbAILQAAIgFB/wFHBEBBsAghAgwCC0GwCEEAOgAAQa8ILQAAIgFB/wFHBEBBrwghAgwCC0GvCEEAOgAAQa4ILQAAIgFB/wFHBEBBrgghAgwCC0GuCEEAOgAAQa0ILQAAIgFB/wFHBEBBrQghAgwCC0GtCEEAOgAAQawILQAAIgFB/wFHBEBBrAghAgwCC0GsCEEAOgAAQasILQAAIgFB/wFHBEBBqwghAgwCC0GrCEEAOgAAQaoILQAAIgFB/wFHBEBBqgghAgwCC0GqCEEAOgAAQakILQAAIgFB/wFHBEBBqQghAgwCC0GpCEEAOgAAQagILQAAIgFB/wFHBEBBqAghAgwCC0GoCEEAOgAAQacILQAAIgFB/wFHBEBBpwghAgwCC0GnCEEAOgAAQaYILQAAIgFB/wFHBEBBpgghAgwCC0GmCEEAOgAAQaUILQAAIgFB/wFHBEBBpQghAgwCC0GlCEEAOgAAQaQILQAAIgFB/wFHBEBBpAghAgwCC0GkCEEAOgAAQaMILQAAIgFB/wFHBEBBowghAgwCC0GjCEEAOgAAQaIILQAAIgFB/wFHBEBBogghAgwCC0GiCEEAOgAAQaEILQAAIgFB/wFHBEBBoQghAgwCC0GhCEEAOgAAQaAILQAAIgFB/wFHBEBBoAghAgwCC0GgCEEAOgAAQZ8ILQAAIgFB/wFHBEBBnwghAgwCC0GfCEEAOgAAQZ4ILQAAIgFB/wFHBEBBngghAgwCC0GeCEEAOgAAQZ0ILQAAIgFB/wFHBEBBnQghAgwCC0GdCEEAOgAAQZwILQAAIgFB/wFHBEBBnAghAgwCC0GcCEEAOgAAQZsILQAAIgFB/wFHBEBBmwghAgwCC0GbCEEAOgAAQZoILQAAIgFB/wFHBEBBmgghAgwCC0GaCEEAOgAAQZkILQAAIgFB/wFHBEBBmQghAgwCC0GZCEEAOgAAQZgILQAAIgFB/wFHBEBBmAghAgwCC0GYCEEAOgAAQZcILQAAIgFB/wFHBEBBlwghAgwCC0GXCEEAOgAAQZYILQAAIgFB/wFHBEBBlgghAgwCC0GWCEEAOgAAQZUILQAAIgFB/wFHBEBBlQghAgwCC0GVCEEAOgAAQZQILQAAIgFB/wFGDQJBlAghAgwBC0G0CCAJNwIAQbwIIAs3AgBBxAggBzcCAEHMCCAKNwIAQQEhAQwECyACIAFBAWo6AAAMAQtBlAhBADoAAAsgA0EBaiIDIABHDQALQQAPCyABCwvJAQEAQYCABAvAAQEAAAAAAAAAgoAAAAAAAACKgAAAAAAAgACAAIAAAACAi4AAAAAAAAABAACAAAAAAIGAAIAAAACACYAAAAAAAICKAAAAAAAAAIgAAAAAAAAACYAAgAAAAAAKAACAAAAAAIuAAIAAAAAAiwAAAAAAAICJgAAAAAAAgAOAAAAAAACAAoAAAAAAAICAAAAAAAAAgAqAAAAAAAAACgAAgAAAAICBgACAAAAAgICAAAAAAACAAQAAgAAAAAAIgACAAAAAgACUAQ90YXJnZXRfZmVhdHVyZXMIKw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrC2J1bGstbWVtb3J5KwhzaWduLWV4dCsPcmVmZXJlbmNlLXR5cGVzKwptdWx0aXZhbHVlKw9idWxrLW1lbW9yeS1vcHQrFmNhbGwtaW5kaXJlY3Qtb3Zlcmxvbmc=";
|
|
@@ -8,4 +8,4 @@ export {
|
|
|
8
8
|
dataOffset,
|
|
9
9
|
wasmBase64
|
|
10
10
|
};
|
|
11
|
-
//# sourceMappingURL=mine.wasm-
|
|
11
|
+
//# sourceMappingURL=mine.wasm-6PIT3DK6.js.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { createRequire as __tenjinCreateRequire } from 'node:module'; const require = __tenjinCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
latestLookup
|
|
4
|
+
} from "./chunk-JPHG2JW3.js";
|
|
5
|
+
import {
|
|
6
|
+
buildOutcomeItem,
|
|
7
|
+
postOutcomes
|
|
8
|
+
} from "./chunk-YIYQ2ZNT.js";
|
|
9
|
+
import "./chunk-3OV7E5G5.js";
|
|
10
|
+
import "./chunk-QNP7H47L.js";
|
|
11
|
+
import "./chunk-N62ROTMC.js";
|
|
12
|
+
import {
|
|
13
|
+
resolveContextSettings
|
|
14
|
+
} from "./chunk-UPIEAMGH.js";
|
|
15
|
+
import "./chunk-IYLHQMT5.js";
|
|
16
|
+
import "./chunk-YBMMV4Y4.js";
|
|
17
|
+
import "./chunk-UO22YNY4.js";
|
|
18
|
+
import "./chunk-MUBUQVC3.js";
|
|
19
|
+
import {
|
|
20
|
+
CliError
|
|
21
|
+
} from "./chunk-OYMYCW7J.js";
|
|
22
|
+
import "./chunk-ZXTAQYNA.js";
|
|
23
|
+
|
|
24
|
+
// src/commands/outcome.ts
|
|
25
|
+
async function runOutcome(args, ctx, deps = {}) {
|
|
26
|
+
const lookupId = await resolveLookupId(args, ctx);
|
|
27
|
+
const item = buildOutcomeItem({
|
|
28
|
+
status: args.status,
|
|
29
|
+
...args.resource !== void 0 ? { resourceId: args.resource } : {},
|
|
30
|
+
...args.contentHash !== void 0 ? { contentHash: args.contentHash } : {}
|
|
31
|
+
});
|
|
32
|
+
const settings = await resolveContextSettings(ctx);
|
|
33
|
+
const result = await postOutcomes(lookupId, [item], {
|
|
34
|
+
baseUrl: settings.baseUrl,
|
|
35
|
+
timeoutMs: ctx.flags.timeout,
|
|
36
|
+
...deps.fetchImpl !== void 0 ? { fetchImpl: deps.fetchImpl } : {}
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
data: { lookupId, status: item.status, accepted: result.accepted },
|
|
40
|
+
humanLines: [`Reported ${item.status} for lookup ${lookupId} (accepted ${result.accepted}).`]
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async function resolveLookupId(args, ctx) {
|
|
44
|
+
if (args.lookupId !== void 0 && args.last === true) {
|
|
45
|
+
throw new CliError("USAGE", "Pass either --lookup-id or --last, not both.", {
|
|
46
|
+
fix: "Use --lookup-id <id> for a specific lookup, or --last for the most recent."
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (args.lookupId !== void 0) return args.lookupId;
|
|
50
|
+
if (args.last === true) {
|
|
51
|
+
const latest = await latestLookup(ctx.dataDir);
|
|
52
|
+
if (latest === null) {
|
|
53
|
+
throw new CliError("LOOKUP_NOT_FOUND", "No local lookup to target with --last.", {
|
|
54
|
+
fix: "Run `tenjin lookup` first, or pass --lookup-id <id>."
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return latest.lookupId;
|
|
58
|
+
}
|
|
59
|
+
throw new CliError("USAGE", "An outcome needs a lookup to report against.", {
|
|
60
|
+
fix: "Pass --lookup-id <id> or --last."
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
runOutcome
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=outcome-HKKT6QIA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/outcome.ts"],"sourcesContent":["import { CliError } from '../lib/errors';\nimport { resolveContextSettings } from '../lib/settings';\nimport { buildOutcomeItem, postOutcomes } from '../lib/agent-api';\nimport { latestLookup } from '../lib/lookup-store';\nimport type { CommandContext, CommandResult } from '../context';\n\n/**\n * `tenjin outcome --lookup-id <id> --status <s>`, POST to\n * /api/agent/lookups/:id/outcomes, closing the reuse loop (used / partially_used\n * / rejected / regenerated / purchase_declined). The lookupId is the capability,\n * so no wallet is needed; `--last` sugar targets the most recent local lookup.\n */\n\nexport interface OutcomeArgs {\n lookupId?: string;\n last?: boolean;\n status: string;\n resource?: string;\n contentHash?: string;\n}\n\nexport interface OutcomeDeps {\n fetchImpl?: typeof fetch;\n}\n\nexport async function runOutcome(\n args: OutcomeArgs,\n ctx: CommandContext,\n deps: OutcomeDeps = {},\n): Promise<CommandResult> {\n const lookupId = await resolveLookupId(args, ctx);\n const item = buildOutcomeItem({\n status: args.status,\n ...(args.resource !== undefined ? { resourceId: args.resource } : {}),\n ...(args.contentHash !== undefined ? { contentHash: args.contentHash } : {}),\n });\n\n const settings = await resolveContextSettings(ctx);\n const result = await postOutcomes(lookupId, [item], {\n baseUrl: settings.baseUrl,\n timeoutMs: ctx.flags.timeout,\n ...(deps.fetchImpl !== undefined ? { fetchImpl: deps.fetchImpl } : {}),\n });\n\n return {\n data: { lookupId, status: item.status, accepted: result.accepted },\n humanLines: [`Reported ${item.status} for lookup ${lookupId} (accepted ${result.accepted}).`],\n };\n}\n\nasync function resolveLookupId(args: OutcomeArgs, ctx: CommandContext): Promise<string> {\n if (args.lookupId !== undefined && args.last === true) {\n throw new CliError('USAGE', 'Pass either --lookup-id or --last, not both.', {\n fix: 'Use --lookup-id <id> for a specific lookup, or --last for the most recent.',\n });\n }\n if (args.lookupId !== undefined) return args.lookupId;\n if (args.last === true) {\n const latest = await latestLookup(ctx.dataDir);\n if (latest === null) {\n throw new CliError('LOOKUP_NOT_FOUND', 'No local lookup to target with --last.', {\n fix: 'Run `tenjin lookup` first, or pass --lookup-id <id>.',\n });\n }\n return latest.lookupId;\n }\n throw new CliError('USAGE', 'An outcome needs a lookup to report against.', {\n fix: 'Pass --lookup-id <id> or --last.',\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAyBA,eAAsB,WACpB,MACA,KACA,OAAoB,CAAC,GACG;AACxB,QAAM,WAAW,MAAM,gBAAgB,MAAM,GAAG;AAChD,QAAM,OAAO,iBAAiB;AAAA,IAC5B,QAAQ,KAAK;AAAA,IACb,GAAI,KAAK,aAAa,SAAY,EAAE,YAAY,KAAK,SAAS,IAAI,CAAC;AAAA,IACnE,GAAI,KAAK,gBAAgB,SAAY,EAAE,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,EAC5E,CAAC;AAED,QAAM,WAAW,MAAM,uBAAuB,GAAG;AACjD,QAAM,SAAS,MAAM,aAAa,UAAU,CAAC,IAAI,GAAG;AAAA,IAClD,SAAS,SAAS;AAAA,IAClB,WAAW,IAAI,MAAM;AAAA,IACrB,GAAI,KAAK,cAAc,SAAY,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;AAAA,EACtE,CAAC;AAED,SAAO;AAAA,IACL,MAAM,EAAE,UAAU,QAAQ,KAAK,QAAQ,UAAU,OAAO,SAAS;AAAA,IACjE,YAAY,CAAC,YAAY,KAAK,MAAM,eAAe,QAAQ,cAAc,OAAO,QAAQ,IAAI;AAAA,EAC9F;AACF;AAEA,eAAe,gBAAgB,MAAmB,KAAsC;AACtF,MAAI,KAAK,aAAa,UAAa,KAAK,SAAS,MAAM;AACrD,UAAM,IAAI,SAAS,SAAS,gDAAgD;AAAA,MAC1E,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AACA,MAAI,KAAK,aAAa,OAAW,QAAO,KAAK;AAC7C,MAAI,KAAK,SAAS,MAAM;AACtB,UAAM,SAAS,MAAM,aAAa,IAAI,OAAO;AAC7C,QAAI,WAAW,MAAM;AACnB,YAAM,IAAI,SAAS,oBAAoB,0CAA0C;AAAA,QAC/E,KAAK;AAAA,MACP,CAAC;AAAA,IACH;AACA,WAAO,OAAO;AAAA,EAChB;AACA,QAAM,IAAI,SAAS,SAAS,gDAAgD;AAAA,IAC1E,KAAK;AAAA,EACP,CAAC;AACH;","names":[]}
|