agda-mcp-server 0.4.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 (39) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +472 -0
  3. package/dist/agda/advanced-queries.d.ts +52 -0
  4. package/dist/agda/advanced-queries.js +249 -0
  5. package/dist/agda/advanced-queries.js.map +1 -0
  6. package/dist/agda/batch.d.ts +6 -0
  7. package/dist/agda/batch.js +59 -0
  8. package/dist/agda/batch.js.map +1 -0
  9. package/dist/agda/expression-operations.d.ts +17 -0
  10. package/dist/agda/expression-operations.js +86 -0
  11. package/dist/agda/expression-operations.js.map +1 -0
  12. package/dist/agda/goal-operations.d.ts +29 -0
  13. package/dist/agda/goal-operations.js +156 -0
  14. package/dist/agda/goal-operations.js.map +1 -0
  15. package/dist/agda/response-parsing.d.ts +4 -0
  16. package/dist/agda/response-parsing.js +44 -0
  17. package/dist/agda/response-parsing.js.map +1 -0
  18. package/dist/agda/session.d.ts +88 -0
  19. package/dist/agda/session.js +340 -0
  20. package/dist/agda/session.js.map +1 -0
  21. package/dist/agda/types.d.ts +99 -0
  22. package/dist/agda/types.js +5 -0
  23. package/dist/agda/types.js.map +1 -0
  24. package/dist/agda-process.d.ts +4 -0
  25. package/dist/agda-process.js +14 -0
  26. package/dist/agda-process.js.map +1 -0
  27. package/dist/index.d.ts +11 -0
  28. package/dist/index.js +91 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/tools/navigation.d.ts +3 -0
  31. package/dist/tools/navigation.js +192 -0
  32. package/dist/tools/navigation.js.map +1 -0
  33. package/dist/tools/proof.d.ts +3 -0
  34. package/dist/tools/proof.js +250 -0
  35. package/dist/tools/proof.js.map +1 -0
  36. package/dist/tools/session.d.ts +3 -0
  37. package/dist/tools/session.js +108 -0
  38. package/dist/tools/session.js.map +1 -0
  39. package/package.json +65 -0
@@ -0,0 +1,249 @@
1
+ // MIT License — see LICENSE
2
+ //
3
+ // Advanced Agda interaction queries: constraints, scope, elaboration,
4
+ // module contents, search, and combined goal inspection.
5
+ //
6
+ // Each function receives an AgdaSessionContext and delegates the IOTCM
7
+ // protocol work through it, keeping the session class thin.
8
+ import { extractMessage, escapeAgdaString } from "./response-parsing.js";
9
+ /**
10
+ * Show current constraints.
11
+ */
12
+ export async function constraints(ctx) {
13
+ ctx.requireFile();
14
+ const cmd = ctx.iotcm("Cmd_constraints");
15
+ const responses = await ctx.sendCommand(cmd);
16
+ let text = "";
17
+ for (const resp of responses) {
18
+ if (resp.kind === "DisplayInfo") {
19
+ const info = resp.info;
20
+ if (info) {
21
+ text = extractMessage(info);
22
+ }
23
+ }
24
+ }
25
+ return { text, raw: responses };
26
+ }
27
+ /**
28
+ * Solve all goals that have unique solutions.
29
+ */
30
+ export async function solveAll(ctx) {
31
+ ctx.requireFile();
32
+ const cmd = ctx.iotcm("Cmd_solveAll Normalised");
33
+ const responses = await ctx.sendCommand(cmd);
34
+ const solutions = [];
35
+ for (const resp of responses) {
36
+ if (resp.kind === "SolveAll") {
37
+ const solns = resp.solutions;
38
+ if (Array.isArray(solns)) {
39
+ for (const [id, expr] of solns) {
40
+ solutions.push(`?${id} := ${expr}`);
41
+ }
42
+ }
43
+ }
44
+ if (resp.kind === "DisplayInfo") {
45
+ const info = resp.info;
46
+ if (info) {
47
+ const msg = extractMessage(info);
48
+ if (msg)
49
+ solutions.push(msg);
50
+ }
51
+ }
52
+ }
53
+ return { solutions, raw: responses };
54
+ }
55
+ /**
56
+ * Explain why a name is in scope at a given goal.
57
+ */
58
+ export async function whyInScope(ctx, goalId, name) {
59
+ ctx.requireFile();
60
+ const cmd = ctx.iotcm(`Cmd_why_in_scope ${goalId} noRange "${escapeAgdaString(name)}"`);
61
+ const responses = await ctx.sendCommand(cmd);
62
+ let explanation = "";
63
+ for (const resp of responses) {
64
+ if (resp.kind === "DisplayInfo") {
65
+ const info = resp.info;
66
+ if (info) {
67
+ explanation = extractMessage(info);
68
+ }
69
+ }
70
+ }
71
+ return { explanation, raw: responses };
72
+ }
73
+ /**
74
+ * Explain why a name is in scope at the top level.
75
+ */
76
+ export async function whyInScopeTopLevel(ctx, name) {
77
+ ctx.requireFile();
78
+ const cmd = ctx.iotcm(`Cmd_why_in_scope_toplevel "${escapeAgdaString(name)}"`);
79
+ const responses = await ctx.sendCommand(cmd);
80
+ let explanation = "";
81
+ for (const resp of responses) {
82
+ if (resp.kind === "DisplayInfo") {
83
+ const info = resp.info;
84
+ if (info) {
85
+ explanation = extractMessage(info);
86
+ }
87
+ }
88
+ }
89
+ return { explanation, raw: responses };
90
+ }
91
+ /**
92
+ * Elaborate an expression in a goal context (normalize and show full form).
93
+ */
94
+ export async function elaborate(ctx, goalId, expr) {
95
+ ctx.requireFile();
96
+ const cmd = ctx.iotcm(`Cmd_elaborate_give Normalised ${goalId} noRange "${escapeAgdaString(expr)}"`);
97
+ const responses = await ctx.sendCommand(cmd);
98
+ let elaboration = "";
99
+ for (const resp of responses) {
100
+ if (resp.kind === "DisplayInfo") {
101
+ const info = resp.info;
102
+ if (info) {
103
+ elaboration = extractMessage(info);
104
+ }
105
+ }
106
+ if (resp.kind === "GiveAction") {
107
+ elaboration = String(resp.giveResult ?? resp.result ?? elaboration);
108
+ }
109
+ }
110
+ return { elaboration, raw: responses };
111
+ }
112
+ /**
113
+ * Generate a helper function type for an expression in a goal context.
114
+ */
115
+ export async function helperFunction(ctx, goalId, expr) {
116
+ ctx.requireFile();
117
+ const cmd = ctx.iotcm(`Cmd_helper_function Normalised ${goalId} noRange "${escapeAgdaString(expr)}"`);
118
+ const responses = await ctx.sendCommand(cmd);
119
+ let helperType = "";
120
+ for (const resp of responses) {
121
+ if (resp.kind === "DisplayInfo") {
122
+ const info = resp.info;
123
+ if (info) {
124
+ helperType = extractMessage(info);
125
+ }
126
+ }
127
+ }
128
+ return { helperType, raw: responses };
129
+ }
130
+ /**
131
+ * Show the contents of a module in a goal context.
132
+ */
133
+ export async function showModuleContents(ctx, goalId, moduleName) {
134
+ ctx.requireFile();
135
+ const cmd = ctx.iotcm(`Cmd_show_module_contents Normalised ${goalId} noRange "${escapeAgdaString(moduleName)}"`);
136
+ const responses = await ctx.sendCommand(cmd);
137
+ let contents = "";
138
+ for (const resp of responses) {
139
+ if (resp.kind === "DisplayInfo") {
140
+ const info = resp.info;
141
+ if (info) {
142
+ contents = extractMessage(info);
143
+ }
144
+ }
145
+ }
146
+ return { contents, raw: responses };
147
+ }
148
+ /**
149
+ * Show the contents of a module at the top level.
150
+ */
151
+ export async function showModuleContentsTopLevel(ctx, moduleName) {
152
+ ctx.requireFile();
153
+ const cmd = ctx.iotcm(`Cmd_show_module_contents_toplevel Normalised "${escapeAgdaString(moduleName)}"`);
154
+ const responses = await ctx.sendCommand(cmd);
155
+ let contents = "";
156
+ for (const resp of responses) {
157
+ if (resp.kind === "DisplayInfo") {
158
+ const info = resp.info;
159
+ if (info) {
160
+ contents = extractMessage(info);
161
+ }
162
+ }
163
+ }
164
+ return { contents, raw: responses };
165
+ }
166
+ /**
167
+ * Search for definitions matching a query string.
168
+ */
169
+ export async function searchAbout(ctx, query) {
170
+ ctx.requireFile();
171
+ const cmd = ctx.iotcm(`Cmd_search_about_toplevel Normalised "${escapeAgdaString(query)}"`);
172
+ const responses = await ctx.sendCommand(cmd);
173
+ let results = "";
174
+ for (const resp of responses) {
175
+ if (resp.kind === "DisplayInfo") {
176
+ const info = resp.info;
177
+ if (info) {
178
+ results = extractMessage(info);
179
+ }
180
+ }
181
+ }
182
+ return { results, raw: responses };
183
+ }
184
+ /**
185
+ * Auto-solve all goals.
186
+ */
187
+ export async function autoAll(ctx) {
188
+ ctx.requireFile();
189
+ const cmd = ctx.iotcm("Cmd_autoAll Normalised");
190
+ const responses = await ctx.sendCommand(cmd);
191
+ let solution = "";
192
+ for (const resp of responses) {
193
+ if (resp.kind === "GiveAction") {
194
+ solution = String(resp.giveResult ?? resp.result ?? "");
195
+ }
196
+ if (resp.kind === "DisplayInfo") {
197
+ const info = resp.info;
198
+ if (info) {
199
+ const msg = extractMessage(info);
200
+ if (msg)
201
+ solution = solution ? `${solution}\n${msg}` : msg;
202
+ }
203
+ }
204
+ }
205
+ return { solution, raw: responses };
206
+ }
207
+ /**
208
+ * Get the goal type, context, and inferred type of an expression
209
+ * in a goal context (combined query).
210
+ */
211
+ export async function goalTypeContextInfer(ctx, goalId, expr) {
212
+ ctx.requireFile();
213
+ const cmd = ctx.iotcm(`Cmd_goal_type_context_infer Normalised ${goalId} noRange "${escapeAgdaString(expr)}"`);
214
+ const responses = await ctx.sendCommand(cmd);
215
+ let goalType = "";
216
+ let inferredType = "";
217
+ const context = [];
218
+ for (const resp of responses) {
219
+ if (resp.kind === "DisplayInfo") {
220
+ const info = resp.info;
221
+ if (info?.kind === "GoalSpecific") {
222
+ const goalInfo = info.goalInfo;
223
+ if (goalInfo) {
224
+ const fullText = extractMessage(goalInfo);
225
+ // Agda formats combined output with sections separated by ----
226
+ if (fullText.includes("————")) {
227
+ const parts = fullText.split(/————+/);
228
+ if (parts.length >= 2) {
229
+ const ctxLines = parts[0].trim().split("\n").filter((l) => l.trim());
230
+ context.push(...ctxLines);
231
+ goalType = parts[1]?.trim() ?? "";
232
+ if (parts.length >= 3) {
233
+ inferredType = parts[2].trim();
234
+ }
235
+ }
236
+ }
237
+ else {
238
+ goalType = fullText;
239
+ }
240
+ }
241
+ }
242
+ if (info?.kind === "GoalType") {
243
+ goalType = extractMessage(info);
244
+ }
245
+ }
246
+ }
247
+ return { goalType, context, inferredType, raw: responses };
248
+ }
249
+ //# sourceMappingURL=advanced-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-queries.js","sourceRoot":"","sources":["../../src/agda/advanced-queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { TypeCheckResult } from "./types.js";
2
+ /**
3
+ * Run Agda in batch mode (stateless, simpler).
4
+ * Used for quick type-checking without interactive features.
5
+ */
6
+ export declare function typeCheckBatch(filePath: string, repoRoot: string): Promise<TypeCheckResult>;
@@ -0,0 +1,59 @@
1
+ // MIT License — see LICENSE
2
+ //
3
+ // Stateless batch type-checking — runs Agda once and exits.
4
+ // Used for quick type-check without establishing an interactive session.
5
+ import { spawn } from "node:child_process";
6
+ import { resolve } from "node:path";
7
+ import { findAgdaBinary } from "./session.js";
8
+ /**
9
+ * Run Agda in batch mode (stateless, simpler).
10
+ * Used for quick type-checking without interactive features.
11
+ */
12
+ export async function typeCheckBatch(filePath, repoRoot) {
13
+ const agdaBin = findAgdaBinary(repoRoot);
14
+ const absPath = resolve(filePath);
15
+ return new Promise((resolvePromise, reject) => {
16
+ const args = ["--safe", "--without-K", absPath];
17
+ const proc = spawn(agdaBin, args, {
18
+ cwd: repoRoot,
19
+ env: { ...process.env },
20
+ stdio: ["ignore", "pipe", "pipe"],
21
+ });
22
+ let stdout = "";
23
+ let stderr = "";
24
+ proc.stdout?.on("data", (chunk) => {
25
+ stdout += chunk.toString();
26
+ });
27
+ proc.stderr?.on("data", (chunk) => {
28
+ stderr += chunk.toString();
29
+ });
30
+ proc.on("close", (code) => {
31
+ const errors = [];
32
+ const warnings = [];
33
+ if (stderr.trim()) {
34
+ for (const line of stderr.split("\n")) {
35
+ const trimmed = line.trim();
36
+ if (!trimmed)
37
+ continue;
38
+ if (trimmed.includes("warning") || trimmed.includes("Warning")) {
39
+ warnings.push(trimmed);
40
+ }
41
+ else if (trimmed.length > 0) {
42
+ errors.push(trimmed);
43
+ }
44
+ }
45
+ }
46
+ resolvePromise({
47
+ success: code === 0,
48
+ errors,
49
+ warnings,
50
+ goals: [],
51
+ raw: [],
52
+ });
53
+ });
54
+ proc.on("error", (err) => {
55
+ reject(new Error(`Failed to start Agda: ${err.message}`));
56
+ });
57
+ });
58
+ }
59
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/agda/batch.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,EAAE;AACF,4DAA4D;AAC5D,yEAAyE;AAEzE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,QAAgB;IAEhB,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAElC,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YAChC,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;YACvB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;YAE9B,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO;wBAAE,SAAS;oBACvB,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC/D,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACzB,CAAC;yBAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,cAAc,CAAC;gBACb,OAAO,EAAE,IAAI,KAAK,CAAC;gBACnB,MAAM;gBACN,QAAQ;gBACR,KAAK,EAAE,EAAE;gBACT,GAAG,EAAE,EAAE;aACR,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { AgdaSessionContext, ComputeResult, InferResult } from "./types.js";
2
+ /**
3
+ * Normalize (evaluate) a term in a goal context.
4
+ */
5
+ export declare function compute(ctx: AgdaSessionContext, goalId: number, expr: string): Promise<ComputeResult>;
6
+ /**
7
+ * Normalize a top-level expression (not in a goal context).
8
+ */
9
+ export declare function computeTopLevel(ctx: AgdaSessionContext, expr: string): Promise<ComputeResult>;
10
+ /**
11
+ * Infer the type of an expression in a goal context.
12
+ */
13
+ export declare function infer(ctx: AgdaSessionContext, goalId: number, expr: string): Promise<InferResult>;
14
+ /**
15
+ * Infer the type of a top-level expression.
16
+ */
17
+ export declare function inferTopLevel(ctx: AgdaSessionContext, expr: string): Promise<InferResult>;
@@ -0,0 +1,86 @@
1
+ // MIT License — see LICENSE
2
+ //
3
+ // Expression-level Agda commands: compute (normalize) and infer (type-check).
4
+ //
5
+ // Each function receives an AgdaSessionContext and delegates the IOTCM
6
+ // protocol work through it, keeping the session class thin.
7
+ import { extractMessage, escapeAgdaString } from "./response-parsing.js";
8
+ /**
9
+ * Normalize (evaluate) a term in a goal context.
10
+ */
11
+ export async function compute(ctx, goalId, expr) {
12
+ ctx.requireFile();
13
+ const cmd = ctx.iotcm(`Cmd_compute DefaultCompute ${goalId} noRange "${escapeAgdaString(expr)}"`);
14
+ const responses = await ctx.sendCommand(cmd);
15
+ let normalForm = "";
16
+ for (const resp of responses) {
17
+ if (resp.kind === "DisplayInfo") {
18
+ const info = resp.info;
19
+ if (info?.kind === "NormalForm" || info?.kind === "GoalSpecific") {
20
+ normalForm = extractMessage(info);
21
+ }
22
+ if (!normalForm) {
23
+ normalForm = extractMessage(info ?? {});
24
+ }
25
+ }
26
+ }
27
+ return { normalForm, raw: responses };
28
+ }
29
+ /**
30
+ * Normalize a top-level expression (not in a goal context).
31
+ */
32
+ export async function computeTopLevel(ctx, expr) {
33
+ ctx.requireFile();
34
+ const cmd = ctx.iotcm(`Cmd_compute_toplevel DefaultCompute "${escapeAgdaString(expr)}"`);
35
+ const responses = await ctx.sendCommand(cmd);
36
+ let normalForm = "";
37
+ for (const resp of responses) {
38
+ if (resp.kind === "DisplayInfo") {
39
+ const info = resp.info;
40
+ if (info) {
41
+ normalForm = extractMessage(info);
42
+ }
43
+ }
44
+ }
45
+ return { normalForm, raw: responses };
46
+ }
47
+ /**
48
+ * Infer the type of an expression in a goal context.
49
+ */
50
+ export async function infer(ctx, goalId, expr) {
51
+ ctx.requireFile();
52
+ const cmd = ctx.iotcm(`Cmd_infer Normalised ${goalId} noRange "${escapeAgdaString(expr)}"`);
53
+ const responses = await ctx.sendCommand(cmd);
54
+ let type = "";
55
+ for (const resp of responses) {
56
+ if (resp.kind === "DisplayInfo") {
57
+ const info = resp.info;
58
+ if (info?.kind === "InferredType" || info?.kind === "GoalSpecific") {
59
+ type = extractMessage(info);
60
+ }
61
+ if (!type) {
62
+ type = extractMessage(info ?? {});
63
+ }
64
+ }
65
+ }
66
+ return { type, raw: responses };
67
+ }
68
+ /**
69
+ * Infer the type of a top-level expression.
70
+ */
71
+ export async function inferTopLevel(ctx, expr) {
72
+ ctx.requireFile();
73
+ const cmd = ctx.iotcm(`Cmd_infer_toplevel Normalised "${escapeAgdaString(expr)}"`);
74
+ const responses = await ctx.sendCommand(cmd);
75
+ let type = "";
76
+ for (const resp of responses) {
77
+ if (resp.kind === "DisplayInfo") {
78
+ const info = resp.info;
79
+ if (info) {
80
+ type = extractMessage(info);
81
+ }
82
+ }
83
+ }
84
+ return { type, raw: responses };
85
+ }
86
+ //# sourceMappingURL=expression-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-operations.js","sourceRoot":"","sources":["../../src/agda/expression-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { AgdaSessionContext, AgdaResponse, AgdaGoal, GoalInfo, CaseSplitResult, GiveResult, AutoResult } from "./types.js";
2
+ /**
3
+ * Get the type and local context for a specific goal.
4
+ */
5
+ export declare function goalTypeContext(ctx: AgdaSessionContext, goalId: number): Promise<GoalInfo>;
6
+ /**
7
+ * Case-split on a variable in a goal.
8
+ */
9
+ export declare function caseSplit(ctx: AgdaSessionContext, goalId: number, variable: string): Promise<CaseSplitResult>;
10
+ /**
11
+ * Give (fill) a goal with an expression.
12
+ */
13
+ export declare function give(ctx: AgdaSessionContext, goalId: number, expr: string): Promise<GiveResult>;
14
+ /**
15
+ * Refine a goal -- apply a function and create subgoals.
16
+ */
17
+ export declare function refine(ctx: AgdaSessionContext, goalId: number, expr: string): Promise<GiveResult>;
18
+ /**
19
+ * Auto-solve a single goal.
20
+ */
21
+ export declare function autoOne(ctx: AgdaSessionContext, goalId: number): Promise<AutoResult>;
22
+ /**
23
+ * List all unsolved metavariables (goals).
24
+ */
25
+ export declare function metas(ctx: AgdaSessionContext): Promise<{
26
+ goals: AgdaGoal[];
27
+ text: string;
28
+ raw: AgdaResponse[];
29
+ }>;
@@ -0,0 +1,156 @@
1
+ // MIT License — see LICENSE
2
+ //
3
+ // Goal-oriented Agda interaction commands.
4
+ //
5
+ // Each function receives an AgdaSessionContext and delegates the IOTCM
6
+ // protocol work through it, keeping the session class thin.
7
+ import { extractMessage, escapeAgdaString } from "./response-parsing.js";
8
+ /**
9
+ * Get the type and local context for a specific goal.
10
+ */
11
+ export async function goalTypeContext(ctx, goalId) {
12
+ ctx.requireFile();
13
+ const cmd = ctx.iotcm(`Cmd_goal_type_context Normalised ${goalId} noRange ""`);
14
+ const responses = await ctx.sendCommand(cmd);
15
+ let type = "";
16
+ const context = [];
17
+ for (const resp of responses) {
18
+ if (resp.kind === "DisplayInfo") {
19
+ const info = resp.info;
20
+ if (info?.kind === "GoalSpecific") {
21
+ const goalInfo = info.goalInfo;
22
+ if (goalInfo) {
23
+ type = extractMessage(goalInfo);
24
+ }
25
+ }
26
+ if (info?.kind === "GoalType") {
27
+ type = extractMessage(info);
28
+ }
29
+ }
30
+ }
31
+ // Parse context from the type display (Agda formats it as "ctx\n----\ngoalType")
32
+ if (type.includes("————")) {
33
+ const parts = type.split(/————+/);
34
+ if (parts.length >= 2) {
35
+ const ctxLines = parts[0].trim().split("\n").filter((l) => l.trim());
36
+ context.push(...ctxLines);
37
+ type = parts[parts.length - 1].trim();
38
+ }
39
+ }
40
+ return { goalId, type, context, raw: responses };
41
+ }
42
+ /**
43
+ * Case-split on a variable in a goal.
44
+ */
45
+ export async function caseSplit(ctx, goalId, variable) {
46
+ ctx.requireFile();
47
+ const cmd = ctx.iotcm(`Cmd_make_case ${goalId} noRange "${variable}"`);
48
+ const responses = await ctx.sendCommand(cmd);
49
+ const clauses = [];
50
+ for (const resp of responses) {
51
+ if (resp.kind === "MakeCase") {
52
+ const cs = resp.clauses;
53
+ if (Array.isArray(cs)) {
54
+ clauses.push(...cs);
55
+ }
56
+ }
57
+ // Also check DisplayInfo for MakeCase results
58
+ if (resp.kind === "DisplayInfo") {
59
+ const info = resp.info;
60
+ if (info) {
61
+ const msg = extractMessage(info);
62
+ if (msg && clauses.length === 0) {
63
+ clauses.push(msg);
64
+ }
65
+ }
66
+ }
67
+ }
68
+ return { clauses, raw: responses };
69
+ }
70
+ /**
71
+ * Give (fill) a goal with an expression.
72
+ */
73
+ export async function give(ctx, goalId, expr) {
74
+ ctx.requireFile();
75
+ const cmd = ctx.iotcm(`Cmd_give WithoutForce ${goalId} noRange "${escapeAgdaString(expr)}"`);
76
+ const responses = await ctx.sendCommand(cmd);
77
+ let result = "";
78
+ for (const resp of responses) {
79
+ if (resp.kind === "GiveAction") {
80
+ result = String(resp.giveResult ?? resp.result ?? "");
81
+ }
82
+ if (resp.kind === "DisplayInfo") {
83
+ const info = resp.info;
84
+ if (info) {
85
+ const msg = extractMessage(info);
86
+ if (msg)
87
+ result = msg;
88
+ }
89
+ }
90
+ }
91
+ return { result, raw: responses };
92
+ }
93
+ /**
94
+ * Refine a goal -- apply a function and create subgoals.
95
+ */
96
+ export async function refine(ctx, goalId, expr) {
97
+ ctx.requireFile();
98
+ const cmd = ctx.iotcm(`Cmd_refine_or_intro True ${goalId} noRange "${escapeAgdaString(expr)}"`);
99
+ const responses = await ctx.sendCommand(cmd);
100
+ let result = "";
101
+ for (const resp of responses) {
102
+ if (resp.kind === "DisplayInfo") {
103
+ const info = resp.info;
104
+ if (info) {
105
+ result = extractMessage(info);
106
+ }
107
+ }
108
+ }
109
+ return { result, raw: responses };
110
+ }
111
+ /**
112
+ * Auto-solve a single goal.
113
+ */
114
+ export async function autoOne(ctx, goalId) {
115
+ ctx.requireFile();
116
+ const cmd = ctx.iotcm(`Cmd_autoOne ${goalId} noRange ""`);
117
+ const responses = await ctx.sendCommand(cmd);
118
+ let solution = "";
119
+ for (const resp of responses) {
120
+ if (resp.kind === "GiveAction") {
121
+ solution = String(resp.giveResult ?? resp.result ?? "");
122
+ }
123
+ if (resp.kind === "DisplayInfo") {
124
+ const info = resp.info;
125
+ if (info) {
126
+ const msg = extractMessage(info);
127
+ if (msg)
128
+ solution = msg;
129
+ }
130
+ }
131
+ }
132
+ return { solution, raw: responses };
133
+ }
134
+ /**
135
+ * List all unsolved metavariables (goals).
136
+ */
137
+ export async function metas(ctx) {
138
+ ctx.requireFile();
139
+ const cmd = ctx.iotcm("Cmd_metas");
140
+ const responses = await ctx.sendCommand(cmd);
141
+ let text = "";
142
+ for (const resp of responses) {
143
+ if (resp.kind === "DisplayInfo") {
144
+ const info = resp.info;
145
+ if (info) {
146
+ text = extractMessage(info);
147
+ }
148
+ }
149
+ }
150
+ return {
151
+ goals: ctx.goalIds.map((id) => ({ goalId: id, type: "?", context: [] })),
152
+ text,
153
+ raw: responses,
154
+ };
155
+ }
156
+ //# sourceMappingURL=goal-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-operations.js","sourceRoot":"","sources":["../../src/agda/goal-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Extract a human-readable message from an Agda DisplayInfo payload. */
2
+ export declare function extractMessage(info: Record<string, unknown>): string;
3
+ /** Escape a string for embedding in an Agda IOTCM command. */
4
+ export declare function escapeAgdaString(s: string): string;