@grimoirelabs/cli 0.14.1 → 0.15.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.
Files changed (116) hide show
  1. package/dist/commands/advisory-handlers.d.ts.map +1 -1
  2. package/dist/commands/advisory-handlers.js +1 -180
  3. package/dist/commands/advisory-handlers.js.map +1 -1
  4. package/dist/commands/advisory-live-trace.d.ts.map +1 -1
  5. package/dist/commands/advisory-live-trace.js +1 -1
  6. package/dist/commands/advisory-live-trace.js.map +1 -1
  7. package/dist/commands/advisory-verbose-trace.d.ts +15 -0
  8. package/dist/commands/advisory-verbose-trace.d.ts.map +1 -0
  9. package/dist/commands/advisory-verbose-trace.js +185 -0
  10. package/dist/commands/advisory-verbose-trace.js.map +1 -0
  11. package/dist/commands/cast-cross-chain.d.ts +69 -0
  12. package/dist/commands/cast-cross-chain.d.ts.map +1 -0
  13. package/dist/commands/cast-cross-chain.js +456 -0
  14. package/dist/commands/cast-cross-chain.js.map +1 -0
  15. package/dist/commands/cast.d.ts +1 -1
  16. package/dist/commands/cast.d.ts.map +1 -1
  17. package/dist/commands/cast.js +84 -709
  18. package/dist/commands/cast.js.map +1 -1
  19. package/dist/commands/compile-all.d.ts +15 -2
  20. package/dist/commands/compile-all.d.ts.map +1 -1
  21. package/dist/commands/compile-all.js +16 -21
  22. package/dist/commands/compile-all.js.map +1 -1
  23. package/dist/commands/compile.d.ts +1 -1
  24. package/dist/commands/compile.d.ts.map +1 -1
  25. package/dist/commands/compile.js +22 -26
  26. package/dist/commands/compile.js.map +1 -1
  27. package/dist/commands/cross-chain-helpers.d.ts +0 -1
  28. package/dist/commands/cross-chain-helpers.d.ts.map +1 -1
  29. package/dist/commands/cross-chain-helpers.js +0 -3
  30. package/dist/commands/cross-chain-helpers.js.map +1 -1
  31. package/dist/commands/history.d.ts +1 -2
  32. package/dist/commands/history.d.ts.map +1 -1
  33. package/dist/commands/history.js +59 -69
  34. package/dist/commands/history.js.map +1 -1
  35. package/dist/commands/init.d.ts +5 -1
  36. package/dist/commands/init.d.ts.map +1 -1
  37. package/dist/commands/init.js +25 -20
  38. package/dist/commands/init.js.map +1 -1
  39. package/dist/commands/log.d.ts +1 -2
  40. package/dist/commands/log.d.ts.map +1 -1
  41. package/dist/commands/log.js +9 -12
  42. package/dist/commands/log.js.map +1 -1
  43. package/dist/commands/resume.d.ts +18 -1
  44. package/dist/commands/resume.d.ts.map +1 -1
  45. package/dist/commands/resume.js +44 -66
  46. package/dist/commands/resume.js.map +1 -1
  47. package/dist/commands/setup-ui.d.ts +46 -0
  48. package/dist/commands/setup-ui.d.ts.map +1 -0
  49. package/dist/commands/setup-ui.js +221 -0
  50. package/dist/commands/setup-ui.js.map +1 -0
  51. package/dist/commands/setup.d.ts +31 -3
  52. package/dist/commands/setup.d.ts.map +1 -1
  53. package/dist/commands/setup.js +27 -270
  54. package/dist/commands/setup.js.map +1 -1
  55. package/dist/commands/simulate-cross-chain.d.ts +53 -0
  56. package/dist/commands/simulate-cross-chain.d.ts.map +1 -0
  57. package/dist/commands/simulate-cross-chain.js +256 -0
  58. package/dist/commands/simulate-cross-chain.js.map +1 -0
  59. package/dist/commands/simulate.d.ts +5 -1
  60. package/dist/commands/simulate.d.ts.map +1 -1
  61. package/dist/commands/simulate.js +16 -364
  62. package/dist/commands/simulate.js.map +1 -1
  63. package/dist/commands/state-helpers.d.ts.map +1 -1
  64. package/dist/commands/state-helpers.js +1 -5
  65. package/dist/commands/state-helpers.js.map +1 -1
  66. package/dist/commands/validate.d.ts +24 -2
  67. package/dist/commands/validate.d.ts.map +1 -1
  68. package/dist/commands/validate.js +40 -42
  69. package/dist/commands/validate.js.map +1 -1
  70. package/dist/commands/venue-doctor-morpho.d.ts +38 -0
  71. package/dist/commands/venue-doctor-morpho.d.ts.map +1 -0
  72. package/dist/commands/venue-doctor-morpho.js +214 -0
  73. package/dist/commands/venue-doctor-morpho.js.map +1 -0
  74. package/dist/commands/venue-doctor.d.ts +2 -26
  75. package/dist/commands/venue-doctor.d.ts.map +1 -1
  76. package/dist/commands/venue-doctor.js +27 -229
  77. package/dist/commands/venue-doctor.js.map +1 -1
  78. package/dist/commands/venue.d.ts +1 -1
  79. package/dist/commands/venue.d.ts.map +1 -1
  80. package/dist/commands/venue.js +32 -122
  81. package/dist/commands/venue.js.map +1 -1
  82. package/dist/commands/venues.d.ts +1 -5
  83. package/dist/commands/venues.d.ts.map +1 -1
  84. package/dist/commands/venues.js +11 -10
  85. package/dist/commands/venues.js.map +1 -1
  86. package/dist/commands/wallet-weth.d.ts +22 -0
  87. package/dist/commands/wallet-weth.d.ts.map +1 -0
  88. package/dist/commands/wallet-weth.js +150 -0
  89. package/dist/commands/wallet-weth.js.map +1 -0
  90. package/dist/commands/wallet.d.ts +65 -3
  91. package/dist/commands/wallet.d.ts.map +1 -1
  92. package/dist/commands/wallet.js +183 -377
  93. package/dist/commands/wallet.js.map +1 -1
  94. package/dist/index.js +375 -170
  95. package/dist/index.js.map +1 -1
  96. package/dist/lib/execution-helpers.d.ts +24 -0
  97. package/dist/lib/execution-helpers.d.ts.map +1 -0
  98. package/dist/lib/execution-helpers.js +133 -0
  99. package/dist/lib/execution-helpers.js.map +1 -0
  100. package/dist/lib/json.d.ts +8 -0
  101. package/dist/lib/json.d.ts.map +1 -0
  102. package/dist/lib/json.js +10 -0
  103. package/dist/lib/json.js.map +1 -0
  104. package/dist/lib/keystore.d.ts +12 -0
  105. package/dist/lib/keystore.d.ts.map +1 -0
  106. package/dist/lib/keystore.js +14 -0
  107. package/dist/lib/keystore.js.map +1 -0
  108. package/dist/lib/prompts.d.ts +16 -0
  109. package/dist/lib/prompts.d.ts.map +1 -0
  110. package/dist/lib/prompts.js +61 -0
  111. package/dist/lib/prompts.js.map +1 -0
  112. package/dist/lib/venue-discovery.d.ts +44 -0
  113. package/dist/lib/venue-discovery.d.ts.map +1 -0
  114. package/dist/lib/venue-discovery.js +192 -0
  115. package/dist/lib/venue-discovery.js.map +1 -0
  116. package/package.json +4 -4
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Shared execution helpers for cast and simulate commands
3
+ */
4
+ import type { CrossChainReceipt, execute, LedgerEntry, LedgerEvent, RunStepResultRecord, SqliteStateStore } from "@grimoirelabs/core";
5
+ export declare function resolveNoState(options: {
6
+ noState?: boolean;
7
+ state?: boolean;
8
+ }): boolean;
9
+ export declare function isMissingNodeSqliteBackend(error: unknown): boolean;
10
+ export declare function parseRequiredNumber(value: string | undefined, flag: string): number;
11
+ export declare function sleep(ms: number): Promise<void>;
12
+ export declare function resolveRpcUrlFromOption(chainId: number, value?: string | string[]): string | undefined;
13
+ export declare function appendLifecycleLedgerEntries(entries: LedgerEntry[], lifecycleEvents: LedgerEvent[], runId: string, spellId: string): LedgerEntry[];
14
+ export declare function persistCrossChainState(store: SqliteStateStore, input: {
15
+ runId: string;
16
+ tracks: CrossChainReceipt["tracks"];
17
+ handoffs: CrossChainReceipt["handoffs"];
18
+ sourceSpellId?: string;
19
+ destinationSpellId?: string;
20
+ sourceResult?: Awaited<ReturnType<typeof execute>>;
21
+ destinationResult?: Awaited<ReturnType<typeof execute>>;
22
+ }): Promise<void>;
23
+ export declare function collectStepStatuses(result: Awaited<ReturnType<typeof execute>> | undefined, trackId: "source" | "destination", runId: string): RunStepResultRecord[];
24
+ //# sourceMappingURL=execution-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/execution-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,WAAW,EAEX,mBAAmB,EAEnB,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAG5B,wBAAgB,cAAc,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAIvF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKlE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASnF;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GACxB,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,WAAW,EAAE,EACtB,eAAe,EAAE,WAAW,EAAE,EAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CAaf;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE;IACL,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC;CACzD,GACA,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,GAAG,SAAS,EACvD,OAAO,EAAE,QAAQ,GAAG,aAAa,EACjC,KAAK,EAAE,MAAM,GACZ,mBAAmB,EAAE,CAyCvB"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Shared execution helpers for cast and simulate commands
3
+ */
4
+ import { parseRpcUrlMappings, resolveRpcUrlForChain } from "../commands/cross-chain-helpers.js";
5
+ export function resolveNoState(options) {
6
+ if (typeof options.noState === "boolean")
7
+ return options.noState;
8
+ if (options.state === false)
9
+ return true;
10
+ return false;
11
+ }
12
+ export function isMissingNodeSqliteBackend(error) {
13
+ if (!(error instanceof Error))
14
+ return false;
15
+ return error.message.includes("SqliteStateStore requires bun:sqlite (Bun) or better-sqlite3 (Node)");
16
+ }
17
+ export function parseRequiredNumber(value, flag) {
18
+ if (!value) {
19
+ throw new Error(`${flag} is required in cross-chain mode`);
20
+ }
21
+ const parsed = Number.parseInt(value, 10);
22
+ if (!Number.isFinite(parsed) || parsed <= 0) {
23
+ throw new Error(`${flag} must be a positive integer`);
24
+ }
25
+ return parsed;
26
+ }
27
+ export function sleep(ms) {
28
+ return new Promise((resolve) => setTimeout(resolve, ms));
29
+ }
30
+ export function resolveRpcUrlFromOption(chainId, value) {
31
+ const parsed = parseRpcUrlMappings(value);
32
+ return resolveRpcUrlForChain(chainId, parsed);
33
+ }
34
+ export function appendLifecycleLedgerEntries(entries, lifecycleEvents, runId, spellId) {
35
+ if (lifecycleEvents.length === 0) {
36
+ return entries;
37
+ }
38
+ const start = entries.length;
39
+ const extras = lifecycleEvents.map((event, index) => ({
40
+ id: `evt_cc_${String(start + index).padStart(3, "0")}`,
41
+ timestamp: Date.now(),
42
+ runId,
43
+ spellId,
44
+ event,
45
+ }));
46
+ return [...entries, ...extras];
47
+ }
48
+ export async function persistCrossChainState(store, input) {
49
+ const nowIso = new Date().toISOString();
50
+ for (const track of input.tracks) {
51
+ const row = {
52
+ runId: input.runId,
53
+ trackId: track.trackId,
54
+ role: track.role,
55
+ spellId: track.spellId,
56
+ chainId: track.chainId,
57
+ status: track.status,
58
+ lastStepId: track.lastStepId,
59
+ error: track.error,
60
+ updatedAt: nowIso,
61
+ };
62
+ await store.upsertRunTrack(row);
63
+ }
64
+ for (const handoff of input.handoffs) {
65
+ const row = {
66
+ runId: input.runId,
67
+ handoffId: handoff.handoffId,
68
+ sourceTrackId: handoff.sourceTrackId,
69
+ destinationTrackId: handoff.destinationTrackId,
70
+ sourceStepId: handoff.sourceStepId,
71
+ originChainId: handoff.originChainId,
72
+ destinationChainId: handoff.destinationChainId,
73
+ asset: handoff.asset,
74
+ submittedAmount: handoff.submittedAmount.toString(),
75
+ settledAmount: handoff.settledAmount?.toString(),
76
+ status: handoff.status,
77
+ reference: handoff.reference,
78
+ originTxHash: handoff.originTxHash,
79
+ reason: handoff.reason,
80
+ createdAt: nowIso,
81
+ updatedAt: nowIso,
82
+ expiresAt: handoff.status === "expired" ? nowIso : undefined,
83
+ };
84
+ await store.upsertRunHandoff(row);
85
+ }
86
+ const sourceSteps = collectStepStatuses(input.sourceResult, "source", input.runId);
87
+ for (const step of sourceSteps) {
88
+ await store.upsertRunStepResult(step);
89
+ }
90
+ const destinationSteps = collectStepStatuses(input.destinationResult, "destination", input.runId);
91
+ for (const step of destinationSteps) {
92
+ await store.upsertRunStepResult(step);
93
+ }
94
+ }
95
+ export function collectStepStatuses(result, trackId, runId) {
96
+ if (!result?.receipt) {
97
+ return [];
98
+ }
99
+ const nowIso = new Date().toISOString();
100
+ const byStep = new Map();
101
+ for (const planned of result.receipt.plannedActions) {
102
+ byStep.set(planned.stepId, {
103
+ runId,
104
+ trackId,
105
+ stepId: planned.stepId,
106
+ status: "pending",
107
+ idempotencyKey: `${runId}:${trackId}:${planned.stepId}`,
108
+ updatedAt: nowIso,
109
+ });
110
+ }
111
+ for (const tx of result.commit?.transactions ?? []) {
112
+ const existing = byStep.get(tx.stepId);
113
+ if (!existing)
114
+ continue;
115
+ existing.status = tx.success ? "confirmed" : "failed";
116
+ existing.reference = tx.hash;
117
+ existing.error = tx.error;
118
+ }
119
+ if (result.success && !result.commit) {
120
+ for (const step of byStep.values()) {
121
+ step.status = "confirmed";
122
+ }
123
+ }
124
+ if (!result.success) {
125
+ for (const step of byStep.values()) {
126
+ if (step.status !== "confirmed") {
127
+ step.status = "failed";
128
+ }
129
+ }
130
+ }
131
+ return [...byStep.values()];
132
+ }
133
+ //# sourceMappingURL=execution-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-helpers.js","sourceRoot":"","sources":["../../src/lib/execution-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared JSON serialization utilities
3
+ */
4
+ /**
5
+ * JSON.stringify with bigint support (converts bigints to strings)
6
+ */
7
+ export declare function stringifyJson(value: unknown): string;
8
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/lib/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMpD"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Shared JSON serialization utilities
3
+ */
4
+ /**
5
+ * JSON.stringify with bigint support (converts bigints to strings)
6
+ */
7
+ export function stringifyJson(value) {
8
+ return JSON.stringify(value, (_key, innerValue) => (typeof innerValue === "bigint" ? innerValue.toString() : innerValue), 2);
9
+ }
10
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/lib/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,IAAI,CAAC,SAAS,CACnB,KAAK,EACL,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAC3F,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shared keystore path constants and resolver
3
+ */
4
+ export declare const DEFAULT_KEYSTORE_DIR: string;
5
+ export declare const DEFAULT_KEYSTORE_PATH: string;
6
+ /**
7
+ * Resolve the keystore file path from options or default
8
+ */
9
+ export declare function resolveKeystorePath(options: {
10
+ keystore?: string;
11
+ }): string;
12
+ //# sourceMappingURL=keystore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.d.ts","sourceRoot":"","sources":["../../src/lib/keystore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,eAAO,MAAM,oBAAoB,QAA+B,CAAC;AACjE,eAAO,MAAM,qBAAqB,QAA8C,CAAC;AAEjF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE1E"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared keystore path constants and resolver
3
+ */
4
+ import { homedir } from "node:os";
5
+ import { join } from "node:path";
6
+ export const DEFAULT_KEYSTORE_DIR = join(homedir(), ".grimoire");
7
+ export const DEFAULT_KEYSTORE_PATH = join(DEFAULT_KEYSTORE_DIR, "keystore.json");
8
+ /**
9
+ * Resolve the keystore file path from options or default
10
+ */
11
+ export function resolveKeystorePath(options) {
12
+ return options.keystore ?? DEFAULT_KEYSTORE_PATH;
13
+ }
14
+ //# sourceMappingURL=keystore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.js","sourceRoot":"","sources":["../../src/lib/keystore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;AAEjF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA8B;IAChE,OAAO,OAAO,CAAC,QAAQ,IAAI,qBAAqB,CAAC;AACnD,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared interactive prompt utilities for CLI commands
3
+ */
4
+ /**
5
+ * Prompt for a password interactively (hides input)
6
+ */
7
+ export declare function promptPassword(message: string): Promise<string>;
8
+ /**
9
+ * Prompt for yes/no confirmation
10
+ */
11
+ export declare function confirmPrompt(message: string): Promise<boolean>;
12
+ /**
13
+ * Prompt for a visible line of input
14
+ */
15
+ export declare function promptLine(message: string): Promise<string>;
16
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBrE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAarE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAajE"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Shared interactive prompt utilities for CLI commands
3
+ */
4
+ import * as readline from "node:readline";
5
+ import { Writable } from "node:stream";
6
+ /**
7
+ * Prompt for a password interactively (hides input)
8
+ */
9
+ export async function promptPassword(message) {
10
+ return new Promise((resolve) => {
11
+ process.stdout.write(message);
12
+ const silentOutput = new Writable({
13
+ write(_chunk, _encoding, cb) {
14
+ cb();
15
+ },
16
+ });
17
+ const rl = readline.createInterface({
18
+ input: process.stdin,
19
+ output: silentOutput,
20
+ terminal: true,
21
+ });
22
+ rl.question("", (answer) => {
23
+ rl.close();
24
+ process.stdout.write("\n");
25
+ resolve(answer);
26
+ });
27
+ });
28
+ }
29
+ /**
30
+ * Prompt for yes/no confirmation
31
+ */
32
+ export async function confirmPrompt(message) {
33
+ const rl = readline.createInterface({
34
+ input: process.stdin,
35
+ output: process.stdout,
36
+ });
37
+ return new Promise((resolve) => {
38
+ rl.question(message, (answer) => {
39
+ rl.close();
40
+ const normalized = answer.toLowerCase().trim();
41
+ resolve(normalized === "yes" || normalized === "y");
42
+ });
43
+ });
44
+ }
45
+ /**
46
+ * Prompt for a visible line of input
47
+ */
48
+ export async function promptLine(message) {
49
+ return await new Promise((resolve) => {
50
+ const rl = readline.createInterface({
51
+ input: process.stdin,
52
+ output: process.stdout,
53
+ terminal: true,
54
+ });
55
+ rl.question(message, (answer) => {
56
+ rl.close();
57
+ resolve(answer);
58
+ });
59
+ });
60
+ }
61
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE9B,MAAM,YAAY,GAAG,IAAI,QAAQ,CAAC;YAChC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;gBACzB,EAAE,EAAE,CAAC;YACP,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;YACzB,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YAC9B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YAC/C,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,GAAG,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe;IAC9C,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YAC9B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Unified venue discovery engine.
3
+ *
4
+ * Combines built-in venues (from @grimoirelabs/venues) with external
5
+ * npm packages matching the `grimoire-venue-*` convention.
6
+ */
7
+ import type { VenueAdapter, VenueManifest } from "@grimoirelabs/core";
8
+ /** Reset discovery caches. Useful for testing. */
9
+ export declare function clearDiscoveryCache(): void;
10
+ /**
11
+ * Discover all venues: built-in + external npm packages.
12
+ * Results are cached for the lifetime of the process.
13
+ */
14
+ export declare function discoverAllVenues(): VenueManifest[];
15
+ /**
16
+ * Build a name + aliases → canonical CLI-name map from manifests.
17
+ * Cached alongside the manifest list.
18
+ */
19
+ export declare function buildVenueCliMap(manifests: VenueManifest[]): Record<string, string>;
20
+ /**
21
+ * Normalize a user-supplied adapter name to its canonical form.
22
+ * Shared by venue command routing and venue-doctor filtering.
23
+ */
24
+ export declare function normalizeAdapterName(adapter: string): string;
25
+ /**
26
+ * Filter manifests to only those from external packages (not in bundled adapters).
27
+ */
28
+ export declare function getExternalManifests(manifests: VenueManifest[]): VenueManifest[];
29
+ /**
30
+ * Load all adapters: bundled + dynamically imported externals.
31
+ */
32
+ export declare function loadAllAdapters(): Promise<VenueAdapter[]>;
33
+ /**
34
+ * Scan node_modules for external venue packages.
35
+ *
36
+ * Convention: packages named `grimoire-venue-*` or `@* /grimoire-venue-*`
37
+ * with a `"grimoire"` field of type `"venue"` in their package.json.
38
+ */
39
+ export declare function discoverExternalVenues(root?: string): VenueManifest[];
40
+ /**
41
+ * Dynamically import adapters from external venue manifests (in parallel).
42
+ */
43
+ export declare function loadExternalAdapters(manifests: VenueManifest[]): Promise<VenueAdapter[]>;
44
+ //# sourceMappingURL=venue-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venue-discovery.d.ts","sourceRoot":"","sources":["../../src/lib/venue-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUtE,kDAAkD;AAClD,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CAiBnD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcnF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAGhF;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAO/D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CA6BrE;AAqCD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAqB9F"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Unified venue discovery engine.
3
+ *
4
+ * Combines built-in venues (from @grimoirelabs/venues) with external
5
+ * npm packages matching the `grimoire-venue-*` convention.
6
+ */
7
+ import { readdirSync, readFileSync } from "node:fs";
8
+ import path from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import { adapters as bundledAdapters, discoverBuiltinVenues } from "@grimoirelabs/venues";
11
+ const VENUE_PKG_PREFIX = "grimoire-venue-";
12
+ const MAX_PARENT_TRAVERSAL_DEPTH = 8;
13
+ /** Module-level cache — venue list doesn't change mid-run. */
14
+ let cachedManifests = null;
15
+ let cachedCliMap = null;
16
+ /** Reset discovery caches. Useful for testing. */
17
+ export function clearDiscoveryCache() {
18
+ cachedManifests = null;
19
+ cachedCliMap = null;
20
+ }
21
+ /**
22
+ * Discover all venues: built-in + external npm packages.
23
+ * Results are cached for the lifetime of the process.
24
+ */
25
+ export function discoverAllVenues() {
26
+ if (cachedManifests)
27
+ return cachedManifests;
28
+ const builtin = discoverBuiltinVenues();
29
+ const external = discoverExternalVenues();
30
+ // Merge: external wins on name collision (allows overriding built-ins)
31
+ const byName = new Map();
32
+ for (const manifest of builtin) {
33
+ byName.set(manifest.name, manifest);
34
+ }
35
+ for (const manifest of external) {
36
+ byName.set(manifest.name, manifest);
37
+ }
38
+ cachedManifests = [...byName.values()];
39
+ return cachedManifests;
40
+ }
41
+ /**
42
+ * Build a name + aliases → canonical CLI-name map from manifests.
43
+ * Cached alongside the manifest list.
44
+ */
45
+ export function buildVenueCliMap(manifests) {
46
+ if (cachedCliMap)
47
+ return cachedCliMap;
48
+ const map = {};
49
+ for (const manifest of manifests) {
50
+ map[manifest.name] = manifest.name;
51
+ if (manifest.aliases) {
52
+ for (const alias of manifest.aliases) {
53
+ map[alias] = manifest.name;
54
+ }
55
+ }
56
+ }
57
+ cachedCliMap = map;
58
+ return map;
59
+ }
60
+ /**
61
+ * Normalize a user-supplied adapter name to its canonical form.
62
+ * Shared by venue command routing and venue-doctor filtering.
63
+ */
64
+ export function normalizeAdapterName(adapter) {
65
+ return adapter
66
+ .trim()
67
+ .toLowerCase()
68
+ .replace(/^grimoire-/, "")
69
+ .replace(/_/g, "-");
70
+ }
71
+ /**
72
+ * Filter manifests to only those from external packages (not in bundled adapters).
73
+ */
74
+ export function getExternalManifests(manifests) {
75
+ const bundledNames = new Set(bundledAdapters.map((adapter) => adapter.meta.name));
76
+ return manifests.filter((manifest) => manifest.adapter && !bundledNames.has(manifest.name));
77
+ }
78
+ /**
79
+ * Load all adapters: bundled + dynamically imported externals.
80
+ */
81
+ export async function loadAllAdapters() {
82
+ const manifests = discoverAllVenues();
83
+ const externalManifests = getExternalManifests(manifests);
84
+ if (externalManifests.length === 0)
85
+ return [...bundledAdapters];
86
+ const external = await loadExternalAdapters(externalManifests);
87
+ return [...bundledAdapters, ...external];
88
+ }
89
+ /**
90
+ * Scan node_modules for external venue packages.
91
+ *
92
+ * Convention: packages named `grimoire-venue-*` or `@* /grimoire-venue-*`
93
+ * with a `"grimoire"` field of type `"venue"` in their package.json.
94
+ */
95
+ export function discoverExternalVenues(root) {
96
+ const projectRoot = root ?? findProjectRoot();
97
+ if (!projectRoot)
98
+ return [];
99
+ const nodeModulesDir = path.join(projectRoot, "node_modules");
100
+ let topLevelEntries;
101
+ try {
102
+ topLevelEntries = readdirSync(nodeModulesDir);
103
+ }
104
+ catch {
105
+ return [];
106
+ }
107
+ const manifests = [];
108
+ // Scan top-level grimoire-venue-* packages
109
+ scanVenuePackages(nodeModulesDir, topLevelEntries, manifests);
110
+ // Scan scoped packages @*/grimoire-venue-*
111
+ for (const entry of topLevelEntries) {
112
+ if (!entry.startsWith("@"))
113
+ continue;
114
+ try {
115
+ const scopedEntries = readdirSync(path.join(nodeModulesDir, entry));
116
+ scanVenuePackages(path.join(nodeModulesDir, entry), scopedEntries, manifests);
117
+ }
118
+ catch {
119
+ // Scope directory not readable — skip
120
+ }
121
+ }
122
+ return manifests;
123
+ }
124
+ function scanVenuePackages(dir, entries, out) {
125
+ for (const entry of entries) {
126
+ if (!entry.startsWith(VENUE_PKG_PREFIX))
127
+ continue;
128
+ const pkgJsonPath = path.join(dir, entry, "package.json");
129
+ try {
130
+ const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
131
+ if (!pkg.grimoire || pkg.grimoire.type !== "venue")
132
+ continue;
133
+ const pkgRoot = path.join(dir, entry);
134
+ const cliPath = pkg.grimoire.cli ? path.resolve(pkgRoot, pkg.grimoire.cli) : undefined;
135
+ if (!cliPath)
136
+ continue;
137
+ out.push({
138
+ name: pkg.grimoire.name ?? entry.replace(/^grimoire-venue-/, ""),
139
+ aliases: pkg.grimoire.aliases,
140
+ cli: cliPath,
141
+ adapter: pkg.grimoire.adapter ? path.resolve(pkgRoot, pkg.grimoire.adapter) : undefined,
142
+ });
143
+ }
144
+ catch {
145
+ // Missing or malformed package.json — skip
146
+ }
147
+ }
148
+ }
149
+ /**
150
+ * Dynamically import adapters from external venue manifests (in parallel).
151
+ */
152
+ export async function loadExternalAdapters(manifests) {
153
+ const importable = manifests.filter((manifest) => manifest.adapter);
154
+ if (importable.length === 0)
155
+ return [];
156
+ const results = await Promise.allSettled(importable.map(async (manifest) => {
157
+ const mod = (await import(manifest.adapter));
158
+ return mod.default ?? mod.adapter;
159
+ }));
160
+ return results
161
+ .filter((result) => result.status === "fulfilled")
162
+ .map((result) => result.value)
163
+ .filter((adapter) => adapter?.meta !== undefined);
164
+ }
165
+ function findProjectRoot() {
166
+ let current = path.dirname(fileURLToPath(import.meta.url));
167
+ for (let depth = 0; depth < MAX_PARENT_TRAVERSAL_DEPTH; depth++) {
168
+ try {
169
+ const raw = readFileSync(path.join(current, "package.json"), "utf-8");
170
+ const pkg = JSON.parse(raw);
171
+ if (pkg.workspaces)
172
+ return current;
173
+ }
174
+ catch {
175
+ // No package.json here — continue walking up
176
+ }
177
+ // Also accept a directory with node_modules (non-workspace root)
178
+ try {
179
+ readdirSync(path.join(current, "node_modules"), { withFileTypes: false });
180
+ return current;
181
+ }
182
+ catch {
183
+ // No node_modules — continue
184
+ }
185
+ const parent = path.dirname(current);
186
+ if (parent === current)
187
+ break;
188
+ current = parent;
189
+ }
190
+ return null;
191
+ }
192
+ //# sourceMappingURL=venue-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"venue-discovery.js","sourceRoot":"","sources":["../../src/lib/venue-discovery.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grimoirelabs/cli",
3
- "version": "0.14.1",
3
+ "version": "0.15.0",
4
4
  "description": "CLI for Grimoire spell execution",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,11 +19,11 @@
19
19
  "test": "bun test"
20
20
  },
21
21
  "dependencies": {
22
- "@grimoirelabs/core": "0.16.0",
23
- "@grimoirelabs/venues": "0.9.2",
22
+ "@grimoirelabs/core": "0.17.0",
23
+ "@grimoirelabs/venues": "0.10.0",
24
24
  "@mariozechner/pi-coding-agent": "0.51.2",
25
25
  "chalk": "^5.3.0",
26
- "commander": "^12.1.0",
26
+ "incur": "^0.3.4",
27
27
  "ora": "^8.1.0",
28
28
  "viem": "^2.21.55"
29
29
  },