prolog-trace-viz 1.1.2 → 2.0.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 (46) hide show
  1. package/README.md +43 -30
  2. package/dist/analyzer.d.ts.map +1 -1
  3. package/dist/analyzer.js +268 -96
  4. package/dist/analyzer.js.map +1 -1
  5. package/dist/build-info.d.ts +3 -3
  6. package/dist/build-info.js +3 -3
  7. package/dist/clauses.d.ts +11 -0
  8. package/dist/clauses.d.ts.map +1 -1
  9. package/dist/clauses.js +12 -0
  10. package/dist/clauses.js.map +1 -1
  11. package/dist/cli.d.ts +4 -6
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +2 -25
  14. package/dist/cli.js.map +1 -1
  15. package/dist/index.js +80 -22
  16. package/dist/index.js.map +1 -1
  17. package/dist/markdown-generator.d.ts +24 -0
  18. package/dist/markdown-generator.d.ts.map +1 -0
  19. package/dist/markdown-generator.js +124 -0
  20. package/dist/markdown-generator.js.map +1 -0
  21. package/dist/parser.d.ts +12 -1
  22. package/dist/parser.d.ts.map +1 -1
  23. package/dist/parser.js +67 -35
  24. package/dist/parser.js.map +1 -1
  25. package/dist/timeline-formatter.d.ts +9 -0
  26. package/dist/timeline-formatter.d.ts.map +1 -0
  27. package/dist/timeline-formatter.js +149 -0
  28. package/dist/timeline-formatter.js.map +1 -0
  29. package/dist/timeline.d.ts +148 -0
  30. package/dist/timeline.d.ts.map +1 -0
  31. package/dist/timeline.js +601 -0
  32. package/dist/timeline.js.map +1 -0
  33. package/dist/tree-formatter.d.ts +13 -0
  34. package/dist/tree-formatter.d.ts.map +1 -0
  35. package/dist/tree-formatter.js +136 -0
  36. package/dist/tree-formatter.js.map +1 -0
  37. package/dist/tree.d.ts +75 -0
  38. package/dist/tree.d.ts.map +1 -0
  39. package/dist/tree.js +267 -0
  40. package/dist/tree.js.map +1 -0
  41. package/dist/wrapper.d.ts +8 -1
  42. package/dist/wrapper.d.ts.map +1 -1
  43. package/dist/wrapper.js +41 -17
  44. package/dist/wrapper.js.map +1 -1
  45. package/package.json +1 -1
  46. package/tracer.pl +127 -16
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Timeline Formatter - Formats timeline steps into markdown
3
+ */
4
+ /**
5
+ * Format timeline steps into markdown
6
+ */
7
+ export function formatTimeline(steps) {
8
+ const lines = [];
9
+ for (const step of steps) {
10
+ lines.push(...formatStep(step));
11
+ lines.push('');
12
+ }
13
+ return lines.join('\n');
14
+ }
15
+ /**
16
+ * Format a single timeline step
17
+ */
18
+ function formatStep(step) {
19
+ const lines = [];
20
+ // Step header with box drawing
21
+ lines.push(`┌─ Step ${step.stepNumber}: ${step.port.toUpperCase()} ${step.goal}`);
22
+ // Add subgoal marker for CALL steps only
23
+ if (step.port === 'call' && step.subgoalLabel) {
24
+ lines.push(`│ ◀── Solving subgoal ${step.subgoalLabel}`);
25
+ }
26
+ // Format based on port type
27
+ switch (step.port) {
28
+ case 'call':
29
+ lines.push(...formatCallStep(step));
30
+ break;
31
+ case 'exit':
32
+ lines.push(...formatExitStep(step));
33
+ break;
34
+ case 'redo':
35
+ lines.push(...formatRedoStep(step));
36
+ break;
37
+ case 'fail':
38
+ lines.push(...formatFailStep(step));
39
+ break;
40
+ }
41
+ lines.push('└─');
42
+ return lines;
43
+ }
44
+ /**
45
+ * Format CALL step
46
+ */
47
+ function formatCallStep(step) {
48
+ const lines = [];
49
+ // Show pattern match if clause available
50
+ if (step.clause) {
51
+ lines.push('│ ');
52
+ lines.push('│ Pattern Match:');
53
+ lines.push(`│ Goal: ${step.goal}`);
54
+ lines.push(`│ Head: ${step.clause.head}`);
55
+ // Show unifications if any
56
+ if (step.unifications.length > 0) {
57
+ for (const unif of step.unifications) {
58
+ lines.push(`│ ├─ ${unif.variable} = ${unif.value}`);
59
+ }
60
+ }
61
+ lines.push('│ ');
62
+ // Display clause head and body separately
63
+ if (step.clause.body && step.clause.body !== 'true') {
64
+ // Clause with body
65
+ lines.push(`│ Clause: ${step.clause.head} :- ${step.clause.body} [line ${step.clause.line}]`);
66
+ }
67
+ else {
68
+ // Fact (no body)
69
+ lines.push(`│ Clause: ${step.clause.head} [line ${step.clause.line}] (fact)`);
70
+ }
71
+ // Show spawned subgoals
72
+ if (step.subgoals.length > 0) {
73
+ lines.push('│ Spawns subgoals:');
74
+ for (const subgoal of step.subgoals) {
75
+ lines.push(`│ ${subgoal.label} ${subgoal.goal}`);
76
+ }
77
+ }
78
+ }
79
+ return lines;
80
+ }
81
+ /**
82
+ * Format EXIT step
83
+ */
84
+ function formatExitStep(step) {
85
+ const lines = [];
86
+ // Show completed subgoal marker
87
+ if (step.subgoalLabel) {
88
+ lines.push(`│ ◀── Completed subgoal ${step.subgoalLabel}`);
89
+ }
90
+ // Show bindings
91
+ if (step.unifications.length > 0) {
92
+ lines.push('│ Bindings:');
93
+ for (const unif of step.unifications) {
94
+ lines.push(`│ ${unif.variable} = ${unif.value}`);
95
+ }
96
+ }
97
+ // Show return-to reference
98
+ if (step.returnsTo) {
99
+ lines.push(`│ Returns to: Step ${step.returnsTo}`);
100
+ }
101
+ // Show variable flow notes
102
+ if (step.variableFlowNotes && step.variableFlowNotes.length > 0) {
103
+ for (const note of step.variableFlowNotes) {
104
+ lines.push(`│ Note: ${note}`);
105
+ }
106
+ }
107
+ // Show general note (if any)
108
+ if (step.note) {
109
+ lines.push(`│ Note: ${step.note}`);
110
+ }
111
+ // Show next subgoal
112
+ if (step.nextSubgoal) {
113
+ lines.push(`│ Next: ${step.nextSubgoal}`);
114
+ }
115
+ return lines;
116
+ }
117
+ /**
118
+ * Format REDO step
119
+ */
120
+ function formatRedoStep(step) {
121
+ const lines = [];
122
+ if (step.note) {
123
+ lines.push(`│ ${step.note}`);
124
+ }
125
+ if (step.clause) {
126
+ lines.push(`│ Trying clause: ${step.clause.head} [line ${step.clause.line}]`);
127
+ }
128
+ return lines;
129
+ }
130
+ /**
131
+ * Format FAIL step
132
+ */
133
+ function formatFailStep(step) {
134
+ const lines = [];
135
+ lines.push('│ Failure');
136
+ if (step.note) {
137
+ lines.push(`│ ${step.note}`);
138
+ }
139
+ return lines;
140
+ }
141
+ /**
142
+ * Format built-in predicates concisely
143
+ */
144
+ function isBuiltIn(goal) {
145
+ const builtins = ['>', '<', '>=', '=<', '=:=', '=\\=', 'is', '=', '\\=', 'true'];
146
+ const predicate = goal.match(/^([^(]+)/)?.[1];
147
+ return predicate ? builtins.includes(predicate) : false;
148
+ }
149
+ //# sourceMappingURL=timeline-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-formatter.js","sourceRoot":"","sources":["../src/timeline-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Timeline Builder - Constructs a flat, sequential timeline from trace events
3
+ */
4
+ import { SourceClauseMap } from './clauses.js';
5
+ export interface TimelineStep {
6
+ stepNumber: number;
7
+ port: 'call' | 'exit' | 'redo' | 'fail';
8
+ level: number;
9
+ goal: string;
10
+ clause?: {
11
+ head: string;
12
+ body: string;
13
+ line: number;
14
+ };
15
+ unifications: Array<{
16
+ variable: string;
17
+ value: string;
18
+ }>;
19
+ subgoals: Array<{
20
+ label: string;
21
+ goal: string;
22
+ }>;
23
+ subgoalLabel?: string;
24
+ returnsTo?: number;
25
+ note?: string;
26
+ nextSubgoal?: string;
27
+ variableFlowNotes?: string[];
28
+ }
29
+ export interface TraceEvent {
30
+ port: 'call' | 'exit' | 'redo' | 'fail';
31
+ level: number;
32
+ goal: string;
33
+ predicate: string;
34
+ arguments?: any[];
35
+ clause?: {
36
+ head: string;
37
+ body: string;
38
+ line: number;
39
+ };
40
+ parent_info?: {
41
+ level: number;
42
+ goal: string;
43
+ };
44
+ }
45
+ /**
46
+ * Timeline Builder class - processes trace events into timeline steps
47
+ */
48
+ export declare class TimelineBuilder {
49
+ private events;
50
+ private sourceClauseMap?;
51
+ private steps;
52
+ private stepCounter;
53
+ private callStack;
54
+ private subgoalMap;
55
+ private parentSubgoals;
56
+ private completedSubgoals;
57
+ constructor(events: TraceEvent[], sourceClauseMap?: SourceClauseMap | undefined);
58
+ /**
59
+ * Check if a predicate is part of tracer infrastructure and should be filtered
60
+ */
61
+ private isTracerPredicate;
62
+ /**
63
+ * Build the complete timeline from trace events
64
+ */
65
+ build(): TimelineStep[];
66
+ /**
67
+ * Backfill clause information from EXIT events to their corresponding CALL events
68
+ */
69
+ private backfillClauseInfo;
70
+ /**
71
+ * Update subgoal tracking markers based on execution flow
72
+ * This must run after backfillClauseInfo so we have all subgoals defined
73
+ */
74
+ private updateSubgoalTracking;
75
+ /**
76
+ * Add variable flow tracking notes to steps
77
+ * This shows how variables from parent clauses flow into child goals
78
+ */
79
+ private addVariableFlowNotes;
80
+ /**
81
+ * Extract the value of a variable from a goal based on its position in the clause head
82
+ */
83
+ private extractVariableValueFromGoal;
84
+ /**
85
+ * Get source clause from the source clause map
86
+ */
87
+ private getSourceClause;
88
+ /**
89
+ * Find the matching EXIT step for a CALL step
90
+ */
91
+ private findMatchingExit;
92
+ /**
93
+ * Process a single trace event
94
+ */
95
+ private processEvent;
96
+ /**
97
+ * Extract subgoals from a clause body
98
+ */
99
+ private extractSubgoals;
100
+ /**
101
+ * Process CALL event
102
+ */
103
+ private processCall;
104
+ /**
105
+ * Extract pattern match bindings by comparing goal with clause head
106
+ * Uses structural decomposition - not heuristics, just comparing known data
107
+ */
108
+ private extractPatternMatchBindings;
109
+ /**
110
+ * Recursively extract bindings by comparing pattern term with value term
111
+ * This is structural decomposition, not unification - we're just comparing strings
112
+ */
113
+ private extractBindingsFromTermPair;
114
+ /**
115
+ * Check if a term is a simple variable
116
+ */
117
+ private isSimpleVariable;
118
+ /**
119
+ * Find the main operator in a term
120
+ * Returns null if no operator found
121
+ */
122
+ private findOperator;
123
+ /**
124
+ * Parse a list pattern
125
+ */
126
+ private parseListPattern;
127
+ /**
128
+ * Extract unifications by comparing CALL and EXIT goals
129
+ */
130
+ private extractUnifications;
131
+ /**
132
+ * Split arguments respecting parentheses and brackets
133
+ */
134
+ private splitArguments;
135
+ /**
136
+ * Process EXIT event
137
+ */
138
+ private processExit;
139
+ /**
140
+ * Process REDO event
141
+ */
142
+ private processRedo;
143
+ /**
144
+ * Process FAIL event
145
+ */
146
+ private processFail;
147
+ }
148
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}