@wirecat/cli-template 0.15.0 → 0.17.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/.github/workflows/ci.yml +35 -0
- package/.github/workflows/release-pr.yml +37 -0
- package/AGENTS.md +56 -2
- package/CHANGELOG.md +50 -0
- package/README.md +12 -4
- package/bin/release +10 -3
- package/biome.json +8 -2
- package/contracts/mcp-tools.json +2 -2
- package/contracts/plan.json +2 -1
- package/dist/bin/clidev.js +2 -2
- package/dist/bundle/{chunk-LU4A2T7Y.js → all-profiles-CCT2XPJL.js} +10 -7
- package/dist/bundle/{anthropic-ICTW7CNQ.js → anthropic-QLLP7EE4.js} +4 -4
- package/dist/bundle/{app-server-OW5LT5XV.js → app-server-ELI5TGL7.js} +36 -37
- package/dist/bundle/{bun-ILPS6AYA.js → bun-C7JS2V7G.js} +2 -2
- package/dist/bundle/{bun-sqlite-JE6FJFQT.js → bun-sqlite-OM72TCYT.js} +3 -3
- package/dist/bundle/{chunk-7F5VMLVK.js → chunk-2Y5NBD7U.js} +4 -4
- package/dist/bundle/chunk-33JGD2CR.js +141 -0
- package/dist/bundle/{chunk-F34HGYWF.js → chunk-3VVIEZRY.js} +2 -2
- package/dist/bundle/{chunk-CGFQT3LQ.js → chunk-6PHTRAZA.js} +1 -1
- package/dist/bundle/{chunk-VS5LGSTM.js → chunk-6VCFDEHT.js} +1 -1
- package/dist/bundle/{chunk-NENYWEXF.js → chunk-7OQF5ZMN.js} +1 -1
- package/dist/bundle/{chunk-62JRF2JA.js → chunk-AKUMR7PE.js} +2 -2
- package/dist/bundle/{chunk-7UPBPE3Z.js → chunk-ASO23RNM.js} +152 -79
- package/dist/bundle/{chunk-VOTEB3AN.js → chunk-AUVPTFUS.js} +1 -1
- package/dist/bundle/{chunk-KLFYY7KC.js → chunk-BOCIYBBO.js} +53 -44
- package/dist/bundle/{chunk-TJJ2XSJP.js → chunk-BXZRTMXA.js} +5 -5
- package/dist/bundle/{chunk-66VMJGV6.js → chunk-DVLM23HB.js} +2 -2
- package/dist/bundle/{chunk-YIVY2WI3.js → chunk-E4KQOKQ5.js} +1 -1
- package/dist/bundle/{chunk-GHF72SHT.js → chunk-EQDVQN4E.js} +306 -258
- package/dist/bundle/{chunk-NH6LZ3H3.js → chunk-FF3AGTHY.js} +6 -6
- package/dist/bundle/{chunk-NG7MOJBT.js → chunk-GG5PXNMH.js} +61 -21
- package/dist/bundle/{chunk-LFLSV353.js → chunk-GUCMIUNB.js} +2 -2
- package/dist/bundle/{chunk-R5RYPD23.js → chunk-HVAEHUSZ.js} +2 -2
- package/dist/bundle/{chunk-PIJUGF5F.js → chunk-ITPFCKCL.js} +13 -13
- package/dist/bundle/{chunk-DQIBGCF3.js → chunk-J2RUBXCI.js} +6 -6
- package/dist/bundle/{chunk-7Z4HR6GO.js → chunk-KRXN3FV3.js} +1 -1
- package/dist/bundle/{chunk-45244QQ6.js → chunk-LFLN6PVS.js} +4 -4
- package/dist/bundle/{chunk-MWUHBEDN.js → chunk-LN53L2V5.js} +11 -11
- package/dist/bundle/{chunk-IOJ2DTCY.js → chunk-MLSN3UP4.js} +28 -26
- package/dist/bundle/{chunk-3MDNAYQA.js → chunk-O6PBO4BU.js} +1 -1
- package/dist/bundle/{chunk-YOJLIVGO.js → chunk-QJS4WWYK.js} +63 -63
- package/dist/bundle/{chunk-NVNUUHT5.js → chunk-QLBS6OC2.js} +2362 -1225
- package/dist/bundle/{chunk-2DAXUNTS.js → chunk-QVPTZDRA.js} +2 -2
- package/dist/bundle/{chunk-4MU2UM4C.js → chunk-R5CPFSPI.js} +7 -7
- package/dist/bundle/{chunk-AS2PJNQ2.js → chunk-R5IY4O25.js} +4 -4
- package/dist/bundle/{chunk-DZLHY4IA.js → chunk-RGKXMVOZ.js} +3 -3
- package/dist/bundle/{chunk-G45R7M42.js → chunk-RT46AWIH.js} +1 -1
- package/dist/bundle/{chunk-NRZV7K4M.js → chunk-RUHNHEAF.js} +3 -3
- package/dist/bundle/{chunk-VXOR76ZL.js → chunk-S465TCR3.js} +8 -8
- package/dist/bundle/{chunk-NVGOHYTE.js → chunk-SQKP6V4S.js} +27 -13
- package/dist/bundle/{chunk-FC53WQHG.js → chunk-SQOXYNKF.js} +1 -1
- package/dist/bundle/{chunk-R2JKPHH5.js → chunk-URPKIONS.js} +8 -8
- package/dist/bundle/{chunk-VVGPAHUN.js → chunk-UW4PJZVJ.js} +298 -170
- package/dist/bundle/{chunk-EX2FV7YJ.js → chunk-WKUJCPSP.js} +89 -45
- package/dist/bundle/{chunk-LATYBJ4T.js → chunk-WQBBSVZM.js} +2 -2
- package/dist/bundle/{chunk-G7W53MQP.js → chunk-WRLOK7XC.js} +3 -3
- package/dist/bundle/{chunk-SOYOOU2D.js → chunk-X44ZT64I.js} +3 -3
- package/dist/bundle/{chunk-U6QD3J3F.js → chunk-XKL5FRH3.js} +3 -3
- package/dist/bundle/{chunk-6AW4DDK4.js → chunk-XS56LIQ7.js} +4 -4
- package/dist/bundle/{chunk-3WDYHOAF.js → chunk-YIH3PYWJ.js} +1 -1
- package/dist/bundle/{chunk-5GTMQTQH.js → chunk-ZRNBKTPP.js} +27 -29
- package/dist/bundle/clidev.js +3 -3
- package/dist/bundle/{command-contract-3MPKXBVL.js → command-contract-RV5ZOEAT.js} +11 -11
- package/dist/bundle/{decode-NXB5UKMO.js → decode-V7HNHZBC.js} +3 -3
- package/dist/bundle/{echarts-DRDGGHJT.js → echarts-Y42YP2OL.js} +2 -2
- package/dist/bundle/{embed-IKZ24BMC.js → embed-JSQZL7JF.js} +4 -4
- package/dist/bundle/{embedder-GMQ24DOQ.js → embedder-7BHRCXWL.js} +7 -7
- package/dist/bundle/{first-run-PURIGDLD.js → first-run-BJ36KGST.js} +8 -8
- package/dist/bundle/first-screen-5YHQVNY4.js +26 -0
- package/dist/bundle/{instructions-EOQOXY6V.js → instructions-UWERND54.js} +1 -1
- package/dist/bundle/{mcp-7HBLFGCW.js → mcp-P4FSBSRS.js} +2 -2
- package/dist/bundle/{node-52WF2326.js → node-PZDNPKN7.js} +2 -2
- package/dist/bundle/{node-sqlite-73Z4SFOA.js → node-sqlite-4F5NLRNT.js} +4 -4
- package/dist/bundle/{oauth-EVTPAMZP.js → oauth-VDXNA3DK.js} +5 -5
- package/dist/bundle/{open-46WZAPJ3.js → open-EUJRQQNS.js} +3 -3
- package/dist/bundle/{openai-GWRDAHDU.js → openai-EIBV2K72.js} +14 -35
- package/dist/bundle/{process-YIQPKLZI.js → process-XD5ZIFIL.js} +1 -1
- package/dist/bundle/{program-37NVH5YJ.js → program-TJTVMIOX.js} +3067 -736
- package/dist/bundle/{prompt-IVEYRLS5.js → prompt-LYUZNHDK.js} +3 -3
- package/dist/bundle/{recognize-WVEKHODM.js → recognize-LQMHLOD5.js} +2 -2
- package/dist/bundle/{remote-4K5VPMC7.js → remote-34HUWSZI.js} +5 -5
- package/dist/bundle/{rerank-V24UJZYJ.js → rerank-ONBASQ5Z.js} +5 -5
- package/dist/bundle/{chunk-EMHCXXNJ.js → serve-UJ7FDYAM.js} +8 -6
- package/dist/bundle/{chunk-KJ3UADR3.js → server-GNT76BXM.js} +29 -9
- package/dist/bundle/server-J4YIXKMI.js +52 -0
- package/dist/bundle/{state-ZPYGECVP.js → state-IW5OO6IZ.js} +4 -4
- package/dist/bundle/{store-6JQCLPQF.js → store-55UB27H2.js} +12 -10
- package/dist/bundle/store-maintenance-command-BLDKUZ3L.js +42 -0
- package/dist/commands/comments.d.ts +3 -0
- package/dist/commands/comments.d.ts.map +1 -0
- package/dist/commands/comments.js +114 -0
- package/dist/commands/comments.js.map +1 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +96 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/context.d.ts +83 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +58 -0
- package/dist/context.js.map +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +25 -4
- package/dist/program.js.map +1 -1
- package/dist/sample/comments.d.ts +61 -0
- package/dist/sample/comments.d.ts.map +1 -0
- package/dist/sample/comments.js +39 -0
- package/dist/sample/comments.js.map +1 -0
- package/dist/sample/transport.d.ts +42 -0
- package/dist/sample/transport.d.ts.map +1 -0
- package/dist/sample/transport.js +152 -0
- package/dist/sample/transport.js.map +1 -0
- package/dist/token.d.ts +16 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +32 -0
- package/dist/token.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/commands.md +234 -12
- package/docs/configuration.md +1 -1
- package/docs/dev/reference-clis.md +3 -2
- package/docs/dev/skills/release/SKILL.md +9 -3
- package/docs/dev/skills/release/fresh-audit.md +1 -1
- package/docs/dev/test-matrix.md +36 -5
- package/docs/index.md +4 -3
- package/docs/security.md +4 -2
- package/kit/dist/new.js +7 -3
- package/lint/overrides.json +9 -1
- package/package.json +6 -7
- package/scripts/test-matrix-untested.ts +19 -0
- package/skills/clidev-cli/SKILL.md +1 -1
- package/src/commands/comments.ts +167 -0
- package/src/commands/session.ts +144 -0
- package/src/comments.test.ts +258 -0
- package/src/context.ts +78 -0
- package/src/mcp.test.ts +71 -76
- package/src/program.test.ts +9 -16
- package/src/program.ts +29 -4
- package/src/sample/comments.ts +51 -0
- package/src/sample/transport.test.ts +117 -0
- package/src/sample/transport.ts +184 -0
- package/src/testing/fake-comments.ts +167 -0
- package/src/testing/harness.ts +51 -0
- package/src/token.ts +42 -0
- package/src/version.ts +1 -1
- package/dist/bundle/all-profiles-NVB2HT2S.js +0 -24
- package/dist/bundle/chunk-GUFPQZUA.js +0 -48
- package/dist/bundle/chunk-NL2DQPT7.js +0 -2
- package/dist/bundle/first-screen-B2CF2CET.js +0 -26
- package/dist/bundle/mcp-ASNYBQ5B.js +0 -152
- package/dist/bundle/mcp-EY2NUYDQ.js +0 -82
- package/dist/bundle/serve-PJWSOV7F.js +0 -19
- package/dist/bundle/server-3TPCEZ6P.js +0 -40
- package/dist/bundle/server-GQX5MZTT.js +0 -53
- package/dist/bundle/store-maintenance-command-ND4ADMGC.js +0 -42
- package/dist/commands/doctor.d.ts +0 -77
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -74
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -3
- package/dist/commands/mcp.d.ts.map +0 -1
- package/dist/commands/mcp.js +0 -97
- package/dist/commands/mcp.js.map +0 -1
- package/dist/mcp.d.ts +0 -29
- package/dist/mcp.d.ts.map +0 -1
- package/dist/mcp.js +0 -98
- package/dist/mcp.js.map +0 -1
- package/src/commands/doctor.ts +0 -86
- package/src/commands/mcp.ts +0 -130
- package/src/mcp-http.test.ts +0 -172
- package/src/mcp.ts +0 -140
|
@@ -2,9 +2,9 @@ import { createRequire as __bundleRequire } from "node:module";
|
|
|
2
2
|
const require = __bundleRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
readSecret
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-WRLOK7XC.js";
|
|
6
|
+
import "./chunk-QVPTZDRA.js";
|
|
7
|
+
import "./chunk-MLSN3UP4.js";
|
|
8
8
|
import "./chunk-Y5E2WNWB.js";
|
|
9
9
|
import "./chunk-ZVVMGPBJ.js";
|
|
10
10
|
export {
|
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
openRecognizer,
|
|
9
9
|
openSpeechCutter,
|
|
10
10
|
toModelRate
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-2Y5NBD7U.js";
|
|
12
|
+
import "./chunk-MLSN3UP4.js";
|
|
13
13
|
import "./chunk-Y5E2WNWB.js";
|
|
14
14
|
import "./chunk-ZVVMGPBJ.js";
|
|
15
15
|
export {
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
openRemote,
|
|
9
9
|
remoteKey,
|
|
10
10
|
remoteModel
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-X44ZT64I.js";
|
|
12
|
+
import "./chunk-J2RUBXCI.js";
|
|
13
|
+
import "./chunk-LFLN6PVS.js";
|
|
14
|
+
import "./chunk-AKUMR7PE.js";
|
|
15
|
+
import "./chunk-MLSN3UP4.js";
|
|
16
16
|
import "./chunk-Y5E2WNWB.js";
|
|
17
17
|
import "./chunk-ZVVMGPBJ.js";
|
|
18
18
|
export {
|
|
@@ -4,16 +4,16 @@ import {
|
|
|
4
4
|
defaultThreads,
|
|
5
5
|
loadModel,
|
|
6
6
|
truncated
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-J2RUBXCI.js";
|
|
8
|
+
import "./chunk-LFLN6PVS.js";
|
|
9
|
+
import "./chunk-AKUMR7PE.js";
|
|
10
|
+
import "./chunk-MLSN3UP4.js";
|
|
11
11
|
import "./chunk-Y5E2WNWB.js";
|
|
12
12
|
import {
|
|
13
13
|
__name
|
|
14
14
|
} from "./chunk-ZVVMGPBJ.js";
|
|
15
15
|
|
|
16
|
-
// node_modules/.pnpm/@wirecat+cli-core@0.
|
|
16
|
+
// node_modules/.pnpm/@wirecat+cli-core@0.595.0_@wirecat+cli-base@0.80.3_commander@15.0.0_esbuild@0.28.2_type_2c96d170c489856a39cafd5889a9e4ba/node_modules/@wirecat/cli-core/dist/embeddings/rerank.js
|
|
17
17
|
var openReranker = /* @__PURE__ */ __name(async (model, directory, { threads = defaultThreads() } = {}) => {
|
|
18
18
|
const { ort, tokenizer, session } = await loadModel(model, directory, threads);
|
|
19
19
|
const typeIds = session.inputNames.includes("token_type_ids");
|
|
@@ -2,10 +2,10 @@ import { createRequire as __bundleRequire } from "node:module";
|
|
|
2
2
|
const require = __bundleRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
listen
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-7OQF5ZMN.js";
|
|
6
6
|
import {
|
|
7
7
|
ownerLogin
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-DVLM23HB.js";
|
|
9
9
|
import {
|
|
10
10
|
WebStandardStreamableHTTPServerTransport,
|
|
11
11
|
createMcpHandler,
|
|
@@ -20,15 +20,18 @@ import {
|
|
|
20
20
|
calledTools,
|
|
21
21
|
httpActivityFile,
|
|
22
22
|
httpLock
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-XS56LIQ7.js";
|
|
24
|
+
import "./chunk-RGKXMVOZ.js";
|
|
25
|
+
import "./chunk-AUVPTFUS.js";
|
|
24
26
|
import {
|
|
25
27
|
CliError
|
|
26
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-MLSN3UP4.js";
|
|
29
|
+
import "./chunk-Y5E2WNWB.js";
|
|
27
30
|
import {
|
|
28
31
|
__name
|
|
29
32
|
} from "./chunk-ZVVMGPBJ.js";
|
|
30
33
|
|
|
31
|
-
// node_modules/.pnpm/@wirecat+cli-core@0.
|
|
34
|
+
// node_modules/.pnpm/@wirecat+cli-core@0.595.0_@wirecat+cli-base@0.80.3_commander@15.0.0_esbuild@0.28.2_type_2c96d170c489856a39cafd5889a9e4ba/node_modules/@wirecat/cli-core/dist/mcp/http/serve.js
|
|
32
35
|
import { randomUUID } from "node:crypto";
|
|
33
36
|
var MCP_PATH = "/mcp";
|
|
34
37
|
var AS_METADATA = "/.well-known/oauth-authorization-server";
|
|
@@ -187,7 +190,6 @@ var serveOverHttp = /* @__PURE__ */ __name(async (build, options) => {
|
|
|
187
190
|
}, "close")
|
|
188
191
|
};
|
|
189
192
|
}, "serveOverHttp");
|
|
190
|
-
|
|
191
193
|
export {
|
|
192
194
|
MCP_PATH,
|
|
193
195
|
serveOverHttp
|
|
@@ -2,28 +2,34 @@ import { createRequire as __bundleRequire } from "node:module";
|
|
|
2
2
|
const require = __bundleRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
botInstructions
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-E4KQOKQ5.js";
|
|
6
6
|
import {
|
|
7
7
|
answered,
|
|
8
8
|
normal,
|
|
9
9
|
registerCommands,
|
|
10
10
|
runCommandForAgent,
|
|
11
11
|
toolsFromCommands
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ASO23RNM.js";
|
|
13
13
|
import {
|
|
14
14
|
agentJson,
|
|
15
15
|
skillResource
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-SQKP6V4S.js";
|
|
17
17
|
import {
|
|
18
18
|
callerOf,
|
|
19
19
|
serveStdio
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-3VVIEZRY.js";
|
|
21
21
|
import {
|
|
22
22
|
wholeList
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-EQDVQN4E.js";
|
|
24
|
+
import "./chunk-ITPFCKCL.js";
|
|
25
|
+
import "./chunk-QVPTZDRA.js";
|
|
26
|
+
import "./chunk-R5IY4O25.js";
|
|
27
|
+
import "./chunk-KRXN3FV3.js";
|
|
24
28
|
import {
|
|
25
29
|
McpServer
|
|
26
30
|
} from "./chunk-5D4AEUVA.js";
|
|
31
|
+
import "./chunk-X44ZT64I.js";
|
|
32
|
+
import "./chunk-WQBBSVZM.js";
|
|
27
33
|
import {
|
|
28
34
|
MESSENGER_CHANGE_REFUSAL,
|
|
29
35
|
changesMessenger,
|
|
@@ -31,16 +37,31 @@ import {
|
|
|
31
37
|
itemOf,
|
|
32
38
|
readOnlyLockOf,
|
|
33
39
|
readOnlyRefusal
|
|
34
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-UW4PJZVJ.js";
|
|
41
|
+
import "./chunk-S465TCR3.js";
|
|
42
|
+
import "./chunk-XKL5FRH3.js";
|
|
43
|
+
import "./chunk-AUVPTFUS.js";
|
|
44
|
+
import "./chunk-QLBS6OC2.js";
|
|
45
|
+
import "./chunk-URPKIONS.js";
|
|
46
|
+
import "./chunk-QJS4WWYK.js";
|
|
47
|
+
import "./chunk-YIH3PYWJ.js";
|
|
48
|
+
import "./chunk-BXZRTMXA.js";
|
|
49
|
+
import "./chunk-FF3AGTHY.js";
|
|
50
|
+
import "./chunk-O6PBO4BU.js";
|
|
51
|
+
import "./chunk-6PHTRAZA.js";
|
|
52
|
+
import "./chunk-J2RUBXCI.js";
|
|
53
|
+
import "./chunk-LFLN6PVS.js";
|
|
54
|
+
import "./chunk-AKUMR7PE.js";
|
|
35
55
|
import {
|
|
36
56
|
mcpErrorResult,
|
|
37
57
|
object
|
|
38
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-MLSN3UP4.js";
|
|
59
|
+
import "./chunk-Y5E2WNWB.js";
|
|
39
60
|
import {
|
|
40
61
|
__name
|
|
41
62
|
} from "./chunk-ZVVMGPBJ.js";
|
|
42
63
|
|
|
43
|
-
// node_modules/.pnpm/@wirecat+cli-core@0.
|
|
64
|
+
// node_modules/.pnpm/@wirecat+cli-core@0.595.0_@wirecat+cli-base@0.80.3_commander@15.0.0_esbuild@0.28.2_type_2c96d170c489856a39cafd5889a9e4ba/node_modules/@wirecat/cli-core/dist/mcp/bot/server.js
|
|
44
65
|
import { randomUUID } from "node:crypto";
|
|
45
66
|
var body = /* @__PURE__ */ __name((command, value) => Array.isArray(value) ? wholeList(`bot ${command}`, value) : value !== null && typeof value === "object" && ("item" in value || "items" in value) ? value : itemOf(value !== null && typeof value === "object" ? value : { value }), "body");
|
|
46
67
|
var createBotServer = /* @__PURE__ */ __name((options) => {
|
|
@@ -151,7 +172,6 @@ var serveBotOverStdio = /* @__PURE__ */ __name(async (options, note) => {
|
|
|
151
172
|
});
|
|
152
173
|
await handle.close();
|
|
153
174
|
}, "serveBotOverStdio");
|
|
154
|
-
|
|
155
175
|
export {
|
|
156
176
|
createBotServer,
|
|
157
177
|
serveBotOverStdio
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { createRequire as __bundleRequire } from "node:module";
|
|
2
|
+
const require = __bundleRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
PER_RUN,
|
|
5
|
+
createServer,
|
|
6
|
+
envelope,
|
|
7
|
+
serveOverHttpUntilStopped,
|
|
8
|
+
serveOverStdio
|
|
9
|
+
} from "./chunk-ZRNBKTPP.js";
|
|
10
|
+
import "./chunk-GG5PXNMH.js";
|
|
11
|
+
import "./chunk-6VCFDEHT.js";
|
|
12
|
+
import "./chunk-ASO23RNM.js";
|
|
13
|
+
import "./chunk-SQKP6V4S.js";
|
|
14
|
+
import "./chunk-3VVIEZRY.js";
|
|
15
|
+
import "./chunk-BOCIYBBO.js";
|
|
16
|
+
import "./chunk-EQDVQN4E.js";
|
|
17
|
+
import "./chunk-ITPFCKCL.js";
|
|
18
|
+
import "./chunk-QVPTZDRA.js";
|
|
19
|
+
import "./chunk-R5IY4O25.js";
|
|
20
|
+
import "./chunk-KRXN3FV3.js";
|
|
21
|
+
import "./chunk-RT46AWIH.js";
|
|
22
|
+
import "./chunk-5D4AEUVA.js";
|
|
23
|
+
import "./chunk-XS56LIQ7.js";
|
|
24
|
+
import "./chunk-RGKXMVOZ.js";
|
|
25
|
+
import "./chunk-X44ZT64I.js";
|
|
26
|
+
import "./chunk-WQBBSVZM.js";
|
|
27
|
+
import "./chunk-RUHNHEAF.js";
|
|
28
|
+
import "./chunk-UW4PJZVJ.js";
|
|
29
|
+
import "./chunk-S465TCR3.js";
|
|
30
|
+
import "./chunk-XKL5FRH3.js";
|
|
31
|
+
import "./chunk-AUVPTFUS.js";
|
|
32
|
+
import "./chunk-QLBS6OC2.js";
|
|
33
|
+
import "./chunk-URPKIONS.js";
|
|
34
|
+
import "./chunk-QJS4WWYK.js";
|
|
35
|
+
import "./chunk-YIH3PYWJ.js";
|
|
36
|
+
import "./chunk-BXZRTMXA.js";
|
|
37
|
+
import "./chunk-FF3AGTHY.js";
|
|
38
|
+
import "./chunk-O6PBO4BU.js";
|
|
39
|
+
import "./chunk-6PHTRAZA.js";
|
|
40
|
+
import "./chunk-J2RUBXCI.js";
|
|
41
|
+
import "./chunk-LFLN6PVS.js";
|
|
42
|
+
import "./chunk-AKUMR7PE.js";
|
|
43
|
+
import "./chunk-MLSN3UP4.js";
|
|
44
|
+
import "./chunk-Y5E2WNWB.js";
|
|
45
|
+
import "./chunk-ZVVMGPBJ.js";
|
|
46
|
+
export {
|
|
47
|
+
PER_RUN,
|
|
48
|
+
createServer,
|
|
49
|
+
envelope,
|
|
50
|
+
serveOverHttpUntilStopped,
|
|
51
|
+
serveOverStdio
|
|
52
|
+
};
|
|
@@ -12,10 +12,10 @@ import {
|
|
|
12
12
|
readHttpLock,
|
|
13
13
|
readStored,
|
|
14
14
|
signedInClients
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
15
|
+
} from "./chunk-XS56LIQ7.js";
|
|
16
|
+
import "./chunk-RGKXMVOZ.js";
|
|
17
|
+
import "./chunk-AUVPTFUS.js";
|
|
18
|
+
import "./chunk-MLSN3UP4.js";
|
|
19
19
|
import "./chunk-Y5E2WNWB.js";
|
|
20
20
|
import "./chunk-ZVVMGPBJ.js";
|
|
21
21
|
export {
|
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
resetNoteIndex,
|
|
40
40
|
resetSearchIndex,
|
|
41
41
|
resetStems,
|
|
42
|
+
rollBack,
|
|
42
43
|
rowCounts,
|
|
43
44
|
saveStorePhoneCountries,
|
|
44
45
|
savedAgentClose,
|
|
@@ -55,16 +56,16 @@ import {
|
|
|
55
56
|
threadConversation,
|
|
56
57
|
titlePart,
|
|
57
58
|
vectorIndexCounts
|
|
58
|
-
} from "./chunk-
|
|
59
|
-
import "./chunk-
|
|
60
|
-
import "./chunk-
|
|
61
|
-
import "./chunk-
|
|
62
|
-
import "./chunk-
|
|
63
|
-
import "./chunk-
|
|
64
|
-
import "./chunk-
|
|
65
|
-
import "./chunk-
|
|
66
|
-
import "./chunk-
|
|
67
|
-
import "./chunk-
|
|
59
|
+
} from "./chunk-QLBS6OC2.js";
|
|
60
|
+
import "./chunk-URPKIONS.js";
|
|
61
|
+
import "./chunk-QJS4WWYK.js";
|
|
62
|
+
import "./chunk-YIH3PYWJ.js";
|
|
63
|
+
import "./chunk-BXZRTMXA.js";
|
|
64
|
+
import "./chunk-FF3AGTHY.js";
|
|
65
|
+
import "./chunk-O6PBO4BU.js";
|
|
66
|
+
import "./chunk-6PHTRAZA.js";
|
|
67
|
+
import "./chunk-AKUMR7PE.js";
|
|
68
|
+
import "./chunk-MLSN3UP4.js";
|
|
68
69
|
import "./chunk-Y5E2WNWB.js";
|
|
69
70
|
import "./chunk-ZVVMGPBJ.js";
|
|
70
71
|
export {
|
|
@@ -106,6 +107,7 @@ export {
|
|
|
106
107
|
resetNoteIndex,
|
|
107
108
|
resetSearchIndex,
|
|
108
109
|
resetStems,
|
|
110
|
+
rollBack,
|
|
109
111
|
rowCounts,
|
|
110
112
|
saveStorePhoneCountries,
|
|
111
113
|
savedAgentClose,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createRequire as __bundleRequire } from "node:module";
|
|
2
|
+
const require = __bundleRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
buildStems,
|
|
5
|
+
storeMaintenanceCommands,
|
|
6
|
+
storeSummary
|
|
7
|
+
} from "./chunk-WKUJCPSP.js";
|
|
8
|
+
import "./chunk-BOCIYBBO.js";
|
|
9
|
+
import "./chunk-EQDVQN4E.js";
|
|
10
|
+
import "./chunk-ITPFCKCL.js";
|
|
11
|
+
import "./chunk-WRLOK7XC.js";
|
|
12
|
+
import "./chunk-QVPTZDRA.js";
|
|
13
|
+
import "./chunk-HTQTIKWP.js";
|
|
14
|
+
import "./chunk-R5IY4O25.js";
|
|
15
|
+
import "./chunk-KRXN3FV3.js";
|
|
16
|
+
import "./chunk-RGKXMVOZ.js";
|
|
17
|
+
import "./chunk-X44ZT64I.js";
|
|
18
|
+
import "./chunk-HVAEHUSZ.js";
|
|
19
|
+
import "./chunk-WQBBSVZM.js";
|
|
20
|
+
import "./chunk-UW4PJZVJ.js";
|
|
21
|
+
import "./chunk-S465TCR3.js";
|
|
22
|
+
import "./chunk-XKL5FRH3.js";
|
|
23
|
+
import "./chunk-AUVPTFUS.js";
|
|
24
|
+
import "./chunk-QLBS6OC2.js";
|
|
25
|
+
import "./chunk-URPKIONS.js";
|
|
26
|
+
import "./chunk-QJS4WWYK.js";
|
|
27
|
+
import "./chunk-YIH3PYWJ.js";
|
|
28
|
+
import "./chunk-BXZRTMXA.js";
|
|
29
|
+
import "./chunk-FF3AGTHY.js";
|
|
30
|
+
import "./chunk-O6PBO4BU.js";
|
|
31
|
+
import "./chunk-6PHTRAZA.js";
|
|
32
|
+
import "./chunk-J2RUBXCI.js";
|
|
33
|
+
import "./chunk-LFLN6PVS.js";
|
|
34
|
+
import "./chunk-AKUMR7PE.js";
|
|
35
|
+
import "./chunk-MLSN3UP4.js";
|
|
36
|
+
import "./chunk-Y5E2WNWB.js";
|
|
37
|
+
import "./chunk-ZVVMGPBJ.js";
|
|
38
|
+
export {
|
|
39
|
+
buildStems,
|
|
40
|
+
storeMaintenanceCommands,
|
|
41
|
+
storeSummary
|
|
42
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/commands/comments.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6InC,eAAO,MAAM,eAAe,QAAO,OAMH,CAAA"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { annotate } from "@wirecat/cli-base/commands";
|
|
3
|
+
import { answerEntity, commandPath, itemOf, outputFor, pagedList, pageOf, queryTerms, REMOTE_READ, REMOTE_WRITE, renderAnswer, termField, terminalAsker, withPaging, withQuery, } from "@wirecat/cli-core/cli";
|
|
4
|
+
import { guardedWrite, guardFor, keyedGuard, levelFor, newOperationId } from "@wirecat/cli-core/sends";
|
|
5
|
+
import { Command } from "commander";
|
|
6
|
+
import { permissions } from "../config.js";
|
|
7
|
+
import { contextOf, withService } from "../context.js";
|
|
8
|
+
import { IDENTITY } from "../identity.js";
|
|
9
|
+
import { commentSchema } from "../sample/comments.js";
|
|
10
|
+
import { SERVICE } from "../sample/transport.js";
|
|
11
|
+
// SAMPLE: `comments` is the reference command group. Keep its shape; replace the noun and the calls with your
|
|
12
|
+
// service's. Every command path is its own permission key (`comments.create`), from `commandPermissions()`.
|
|
13
|
+
const CLI = IDENTITY.command;
|
|
14
|
+
/** The list's query: one field the service filters itself (WC-CMD-20). Nothing is filtered in memory. */
|
|
15
|
+
const COMMENTS_QUERY = {
|
|
16
|
+
entity: "comment",
|
|
17
|
+
backend: "native",
|
|
18
|
+
fields: [termField("author", "kw", "author:u2")],
|
|
19
|
+
};
|
|
20
|
+
/** --all walks pages until the service has no more, at most this many, so a huge account cannot hold the run open. */
|
|
21
|
+
const ALL_PAGES = 20;
|
|
22
|
+
const ALL_PAGE_SIZE = 100;
|
|
23
|
+
const listAll = async (service, author) => {
|
|
24
|
+
const items = [];
|
|
25
|
+
for (let page = 0; page < ALL_PAGES; page++) {
|
|
26
|
+
const found = await service.list({ limit: ALL_PAGE_SIZE, offset: page * ALL_PAGE_SIZE, author });
|
|
27
|
+
for (const item of found.items)
|
|
28
|
+
items.push(item);
|
|
29
|
+
if (!found.has_more)
|
|
30
|
+
return { items, has_more: false };
|
|
31
|
+
}
|
|
32
|
+
return { items, has_more: true };
|
|
33
|
+
};
|
|
34
|
+
const listCommand = () => withPaging(withQuery(answerEntity(annotate(new Command("list"), {
|
|
35
|
+
effects: REMOTE_READ,
|
|
36
|
+
offline: false,
|
|
37
|
+
examples: [`${CLI} personal comments list`, `${CLI} personal comments list author:u2 --json=id,text`],
|
|
38
|
+
}), "comment", commentSchema), COMMENTS_QUERY))
|
|
39
|
+
.description(`list the comments in ${SERVICE}, newest first`)
|
|
40
|
+
.action(async function (words) {
|
|
41
|
+
const path = commandPath(this);
|
|
42
|
+
const author = queryTerms(words, COMMENTS_QUERY, path).get("author");
|
|
43
|
+
const { settings } = contextOf(this);
|
|
44
|
+
const found = await withService(this, (service) => settings.all ? listAll(service, author) : service.list({ ...pageOf(settings), author }));
|
|
45
|
+
renderAnswer(this, outputFor(this), pagedList(path, settings, found));
|
|
46
|
+
});
|
|
47
|
+
const showCommand = () => answerEntity(annotate(new Command("show"), {
|
|
48
|
+
effects: REMOTE_READ,
|
|
49
|
+
offline: false,
|
|
50
|
+
examples: [`${CLI} personal comments show c1`, `${CLI} personal comments show c1 --json`],
|
|
51
|
+
}), "comment", commentSchema)
|
|
52
|
+
.description(`show one comment in ${SERVICE}`)
|
|
53
|
+
.argument("<id>", "the comment's id, as list prints it")
|
|
54
|
+
.action(async function (id) {
|
|
55
|
+
renderAnswer(this, outputFor(this), itemOf(await withService(this, (service) => service.show(id))));
|
|
56
|
+
});
|
|
57
|
+
/**
|
|
58
|
+
* Every write's one path (WC-PERM-13). The profile's level for the command's key refuses, or asks once; the send
|
|
59
|
+
* journal records the attempt and its outcome, never its content (WC-PERM-17); the answer carries the `operation_id`
|
|
60
|
+
* (WC-OUT-10). cli-core's `run` has already answered `--dry-run` and refused under `<PREFIX>_READ_ONLY` before this
|
|
61
|
+
* runs. Never retried: a write that got no answer is `outcome_unknown`, with the id to look it up by (WC-LIFE-9).
|
|
62
|
+
*/
|
|
63
|
+
const write = async (command, act) => {
|
|
64
|
+
const { settings, env, renderer } = contextOf(command);
|
|
65
|
+
const key = commandPath(command).replaceAll(" ", ".");
|
|
66
|
+
const operationId = newOperationId();
|
|
67
|
+
const levelOf = (one) => levelFor(settings.permissions, one, permissions.defaults).level;
|
|
68
|
+
const guard = keyedGuard((ask) => guardFor(IDENTITY,
|
|
69
|
+
// SAMPLE: the service limits its own rate, so this guard keeps the levels and the journal, not a send cap.
|
|
70
|
+
{ ...settings, sendsPerHour: Number.MAX_SAFE_INTEGER, permissionDefaults: permissions.defaults }, renderer.warn, env, ask), terminalAsker(command), levelOf, []);
|
|
71
|
+
const request = { chatId: null, kind: "edit", key, operationId };
|
|
72
|
+
guard.refuse(request);
|
|
73
|
+
let comment;
|
|
74
|
+
try {
|
|
75
|
+
comment = await guardedWrite(guard, request, () => withService(command, act));
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error instanceof CliError && error.code === "outcome_unknown")
|
|
79
|
+
throw new CliError("outcome_unknown", error.message, { ...error.details, operation_id: operationId });
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
renderAnswer(command, outputFor(command), itemOf({ operation_id: operationId, comment }));
|
|
83
|
+
};
|
|
84
|
+
const createCommand = () => annotate(new Command("create"), {
|
|
85
|
+
effects: REMOTE_WRITE,
|
|
86
|
+
offline: false,
|
|
87
|
+
examples: [
|
|
88
|
+
`${CLI} personal comments create --text "Looks good to me"`,
|
|
89
|
+
`${CLI} personal comments create --text "Looks good to me" --dry-run`,
|
|
90
|
+
],
|
|
91
|
+
})
|
|
92
|
+
.description(`post a comment in ${SERVICE}`)
|
|
93
|
+
.requiredOption("--text <text>", "the comment's text")
|
|
94
|
+
.action(async function (args) {
|
|
95
|
+
await write(this, (service) => service.create(args.text));
|
|
96
|
+
});
|
|
97
|
+
const updateCommand = () => annotate(new Command("update"), {
|
|
98
|
+
effects: REMOTE_WRITE,
|
|
99
|
+
offline: false,
|
|
100
|
+
examples: [`${CLI} personal comments update c1 --text "Looks good now"`],
|
|
101
|
+
})
|
|
102
|
+
.description(`change the text of your comment in ${SERVICE}`)
|
|
103
|
+
.argument("<id>", "the comment's id, as list prints it")
|
|
104
|
+
.requiredOption("--text <text>", "the new text")
|
|
105
|
+
.action(async function (id, args) {
|
|
106
|
+
await write(this, (service) => service.update(id, args.text));
|
|
107
|
+
});
|
|
108
|
+
export const commentsCommand = () => annotate(new Command("comments"), { effects: REMOTE_READ })
|
|
109
|
+
.description(`read and write comments in ${SERVICE}, the sample service`)
|
|
110
|
+
.addCommand(listCommand())
|
|
111
|
+
.addCommand(showCommand())
|
|
112
|
+
.addCommand(createCommand())
|
|
113
|
+
.addCommand(updateCommand());
|
|
114
|
+
//# sourceMappingURL=comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/commands/comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,MAAM,EACN,SAAS,EACT,SAAS,EACT,MAAM,EACN,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,GACV,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACtG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAsC,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEhD,8GAA8G;AAC9G,4GAA4G;AAE5G,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAA;AAE5B,yGAAyG;AACzG,MAAM,cAAc,GAAG;IACrB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;CACxC,CAAA;AAEV,sHAAsH;AACtH,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,aAAa,GAAG,GAAG,CAAA;AAEzB,MAAM,OAAO,GAAG,KAAK,EAAE,OAAwB,EAAE,MAA0B,EAAE,EAAE;IAC7E,MAAM,KAAK,GAAc,EAAE,CAAA;IAC3B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,GAAG,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;QAChG,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IACxD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,UAAU,CACR,SAAS,CACP,YAAY,CACV,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;IAC5B,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,CAAC,GAAG,GAAG,yBAAyB,EAAE,GAAG,GAAG,kDAAkD,CAAC;CACtG,CAAC,EACF,SAAS,EACT,aAAa,CACd,EACD,cAAc,CACf,CACF;KACE,WAAW,CAAC,wBAAwB,OAAO,gBAAgB,CAAC;KAC5D,MAAM,CAAC,KAAK,WAA0B,KAAe;IACpD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACpE,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAChD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,CACxF,CAAA;IACD,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;AACvE,CAAC,CAAC,CAAA;AAEN,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,YAAY,CACV,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;IAC5B,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,CAAC,GAAG,GAAG,4BAA4B,EAAE,GAAG,GAAG,mCAAmC,CAAC;CAC1F,CAAC,EACF,SAAS,EACT,aAAa,CACd;KACE,WAAW,CAAC,uBAAuB,OAAO,EAAE,CAAC;KAC7C,QAAQ,CAAC,MAAM,EAAE,qCAAqC,CAAC;KACvD,MAAM,CAAC,KAAK,WAA0B,EAAU;IAC/C,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AACrG,CAAC,CAAC,CAAA;AAEN;;;;;GAKG;AACH,MAAM,KAAK,GAAG,KAAK,EAAE,OAAgB,EAAE,GAAmD,EAAE,EAAE;IAC5F,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACrD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAA;IAChG,MAAM,KAAK,GAAG,UAAU,CACtB,CAAC,GAAG,EAAE,EAAE,CACN,QAAQ,CACN,QAAQ;IACR,2GAA2G;IAC3G,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,CAAC,QAAQ,EAAE,EAChG,QAAQ,CAAC,IAAI,EACb,GAAG,EACH,GAAG,CACJ,EACH,aAAa,CAAC,OAAO,CAAC,EACtB,OAAO,EACP,EAAE,CACH,CAAA;IACD,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,EAAE,WAAW,EAAE,CAAA;IACzE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACrB,IAAI,OAAgB,CAAA;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;IAC/E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB;YAC/D,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAA;QACvG,MAAM,KAAK,CAAA;IACb,CAAC;IACD,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;AAC3F,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,GAAG,EAAE,CACzB,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;IAC9B,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE;QACR,GAAG,GAAG,qDAAqD;QAC3D,GAAG,GAAG,+DAA+D;KACtE;CACF,CAAC;KACC,WAAW,CAAC,qBAAqB,OAAO,EAAE,CAAC;KAC3C,cAAc,CAAC,eAAe,EAAE,oBAAoB,CAAC;KACrD,MAAM,CAAC,KAAK,WAA0B,IAAsB;IAC3D,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAC3D,CAAC,CAAC,CAAA;AAEN,MAAM,aAAa,GAAG,GAAG,EAAE,CACzB,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;IAC9B,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,CAAC,GAAG,GAAG,sDAAsD,CAAC;CACzE,CAAC;KACC,WAAW,CAAC,sCAAsC,OAAO,EAAE,CAAC;KAC5D,QAAQ,CAAC,MAAM,EAAE,qCAAqC,CAAC;KACvD,cAAc,CAAC,eAAe,EAAE,cAAc,CAAC;KAC/C,MAAM,CAAC,KAAK,WAA0B,EAAU,EAAE,IAAsB;IACvE,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAC/D,CAAC,CAAC,CAAA;AAEN,MAAM,CAAC,MAAM,eAAe,GAAG,GAAY,EAAE,CAC3C,QAAQ,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;KACxD,WAAW,CAAC,8BAA8B,OAAO,sBAAsB,CAAC;KACxE,UAAU,CAAC,WAAW,EAAE,CAAC;KACzB,UAAU,CAAC,WAAW,EAAE,CAAC;KACzB,UAAU,CAAC,aAAa,EAAE,CAAC;KAC3B,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkHnC,eAAO,MAAM,cAAc,QAAO,OAMJ,CAAA"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { annotate } from "@wirecat/cli-base/commands";
|
|
3
|
+
import { readSecret } from "@wirecat/cli-core";
|
|
4
|
+
import { commandWords, environmentOf, FETCH, itemOf, LOCAL_READ, LOCAL_WRITE, listOf, logsInOrOut, outputFor, profileFree, profilesHere, REMOTE_READ, refuseCommandName, refuseUnderReadOnly, rememberAccount, renderAnswer, rootOf, secretInputOf, } from "@wirecat/cli-core/cli";
|
|
5
|
+
import { Command } from "commander";
|
|
6
|
+
import { configuration } from "../config.js";
|
|
7
|
+
import { contextOf, refuseOffline, serviceFor, withService } from "../context.js";
|
|
8
|
+
import { IDENTITY } from "../identity.js";
|
|
9
|
+
import { SERVICE } from "../sample/transport.js";
|
|
10
|
+
import { TOKEN_VARIABLE, tokenStore } from "../token.js";
|
|
11
|
+
// `session start | status | end | list` is every provider CLI's sign-in (WC-ACCT-12). Keep it; replace the token
|
|
12
|
+
// prompt and the `me` check with your service's. A service with OAuth signs in through cli-core's oauth module
|
|
13
|
+
// instead (WC-SECR-22); see gcal-cli's src/commands/session.ts.
|
|
14
|
+
const CLI = IDENTITY.command;
|
|
15
|
+
const answer = (command, item) => renderAnswer(command, outputFor(command), itemOf(item));
|
|
16
|
+
const storageOf = (raw) => {
|
|
17
|
+
if (raw === "keyring" || raw === "file")
|
|
18
|
+
return raw;
|
|
19
|
+
throw new CliError("validation_error", `--credential-storage takes keyring or file; got ${raw}`);
|
|
20
|
+
};
|
|
21
|
+
const startCommand = () => logsInOrOut(annotate(new Command("start"), {
|
|
22
|
+
effects: FETCH,
|
|
23
|
+
lifetime: "interactive",
|
|
24
|
+
mcp: false,
|
|
25
|
+
examples: [`${CLI} personal session start`, `${CLI} personal session start --credential-storage file`],
|
|
26
|
+
}))
|
|
27
|
+
.summary(`sign in to ${SERVICE} with an API token`)
|
|
28
|
+
.description(`sign this profile in: the ${SERVICE} API token is asked hidden or read from stdin, never taken as an ` +
|
|
29
|
+
"argument, checked against the service, and only then kept in the keyring, or in a private file")
|
|
30
|
+
.option("--credential-storage <storage>", "where the token is kept: keyring, which falls back to a private file by itself, or file", storageOf, "keyring")
|
|
31
|
+
.action(async function (args) {
|
|
32
|
+
const { env, flags, profile, tokens, run } = contextOf(this);
|
|
33
|
+
refuseCommandName(profile, commandWords(rootOf(this)), CLI);
|
|
34
|
+
refuseOffline(flags);
|
|
35
|
+
// A secret is never an argument: it would land in shell history and in the run record (WC-SECR-5).
|
|
36
|
+
const token = (await readSecret(`${SERVICE} API token: `, secretInputOf(this))).trim();
|
|
37
|
+
if (!token)
|
|
38
|
+
throw new CliError("validation_error", "no token was given");
|
|
39
|
+
const user = await run((events) => serviceFor(this, token, events).me());
|
|
40
|
+
const storedIn = tokens.write(profile, token, args.credentialStorage);
|
|
41
|
+
rememberAccount(IDENTITY, profile, user.id, env);
|
|
42
|
+
answer(this, { profile, state: "saved", stored_in: storedIn, verified: true, user });
|
|
43
|
+
});
|
|
44
|
+
const statusCommand = () => annotate(new Command("status"), {
|
|
45
|
+
effects: REMOTE_READ,
|
|
46
|
+
examples: [`${CLI} personal session status`, `${CLI} personal session status --check --json`],
|
|
47
|
+
})
|
|
48
|
+
.summary("show where this profile's token comes from; never the token")
|
|
49
|
+
.description(`show where this profile's token comes from: ${TOKEN_VARIABLE}, the keyring or a file, never the token; ` +
|
|
50
|
+
`--check asks ${SERVICE} whose token it is`)
|
|
51
|
+
.option("--check", `ask ${SERVICE} whether the token still works, and whose it is`)
|
|
52
|
+
.action(async function (args) {
|
|
53
|
+
const { profile, tokens } = contextOf(this);
|
|
54
|
+
const saved = tokens.read(profile);
|
|
55
|
+
const status = { profile, state: saved ? "saved" : "missing", token_from: saved?.source ?? null };
|
|
56
|
+
if (!args.check || !saved)
|
|
57
|
+
return answer(this, { ...status, verified: false });
|
|
58
|
+
answer(this, { ...status, verified: true, user: await withService(this, (service) => service.me()) });
|
|
59
|
+
});
|
|
60
|
+
const endCommand = () => logsInOrOut(annotate(new Command("end"), {
|
|
61
|
+
effects: LOCAL_WRITE,
|
|
62
|
+
mcp: false,
|
|
63
|
+
examples: [`${CLI} personal session end`],
|
|
64
|
+
}))
|
|
65
|
+
.summary("forget this profile's token on this computer")
|
|
66
|
+
.description(`forget this profile's token on this computer; the token itself stays valid in ${SERVICE}`)
|
|
67
|
+
.action(function () {
|
|
68
|
+
refuseUnderReadOnly(this, "session end");
|
|
69
|
+
const { profile, tokens } = contextOf(this);
|
|
70
|
+
answer(this, { profile, ended: tokens.remove(profile) });
|
|
71
|
+
});
|
|
72
|
+
const listCommand = () => profileFree(annotate(new Command("list"), {
|
|
73
|
+
effects: LOCAL_READ,
|
|
74
|
+
examples: [`${CLI} session list`, `${CLI} session list --json`],
|
|
75
|
+
}))
|
|
76
|
+
.summary("list the profiles here and whether each is signed in")
|
|
77
|
+
.description("list the profiles on this computer and whether each has a token; picks none")
|
|
78
|
+
.action(function () {
|
|
79
|
+
const environment = environmentOf(this);
|
|
80
|
+
const env = environment.env ?? process.env;
|
|
81
|
+
// biome-ignore lint/plugin/no-own-settings: baseContext needs a profile, and this local read names none
|
|
82
|
+
const { configuredProfiles } = configuration.resolveSettings({}, { env, needsProfile: false });
|
|
83
|
+
const tokens = tokenStore(env, environment.keyring, outputFor(this).renderer.warn);
|
|
84
|
+
const items = profilesHere(IDENTITY, configuredProfiles, env).map((profile) => {
|
|
85
|
+
const saved = tokens.read(profile);
|
|
86
|
+
return { profile, signed_in: saved !== undefined, token_from: saved?.source ?? null };
|
|
87
|
+
});
|
|
88
|
+
renderAnswer(this, outputFor(this), listOf("session list", { items, limit: Math.max(1, items.length), has_more: false }));
|
|
89
|
+
});
|
|
90
|
+
export const sessionCommand = () => annotate(new Command("session"), { effects: LOCAL_READ })
|
|
91
|
+
.description(`keep this profile's ${SERVICE} token in the OS keyring`)
|
|
92
|
+
.addCommand(startCommand())
|
|
93
|
+
.addCommand(statusCommand())
|
|
94
|
+
.addCommand(endCommand())
|
|
95
|
+
.addCommand(listCommand());
|
|
96
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
|