@sharpee/parser-en-us 0.9.60-beta
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/LICENSE +21 -0
- package/README.md +123 -0
- package/dist/direction-mappings.d.ts +24 -0
- package/dist/direction-mappings.d.ts.map +1 -0
- package/dist/direction-mappings.js +82 -0
- package/dist/direction-mappings.js.map +1 -0
- package/dist/english-grammar-engine.d.ts +85 -0
- package/dist/english-grammar-engine.d.ts.map +1 -0
- package/dist/english-grammar-engine.js +562 -0
- package/dist/english-grammar-engine.js.map +1 -0
- package/dist/english-parser.d.ts +184 -0
- package/dist/english-parser.d.ts.map +1 -0
- package/dist/english-parser.js +1268 -0
- package/dist/english-parser.js.map +1 -0
- package/dist/english-pattern-compiler.d.ts +29 -0
- package/dist/english-pattern-compiler.d.ts.map +1 -0
- package/dist/english-pattern-compiler.js +211 -0
- package/dist/english-pattern-compiler.js.map +1 -0
- package/dist/grammar.d.ts +19 -0
- package/dist/grammar.d.ts.map +1 -0
- package/dist/grammar.js +620 -0
- package/dist/grammar.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/parse-failure.d.ts +59 -0
- package/dist/parse-failure.d.ts.map +1 -0
- package/dist/parse-failure.js +132 -0
- package/dist/parse-failure.js.map +1 -0
- package/dist/parser-types.d.ts +185 -0
- package/dist/parser-types.d.ts.map +1 -0
- package/dist/parser-types.js +134 -0
- package/dist/parser-types.js.map +1 -0
- package/dist/pronoun-context.d.ts +119 -0
- package/dist/pronoun-context.d.ts.map +1 -0
- package/dist/pronoun-context.js +249 -0
- package/dist/pronoun-context.js.map +1 -0
- package/dist/scope-evaluator.d.ts +58 -0
- package/dist/scope-evaluator.d.ts.map +1 -0
- package/dist/scope-evaluator.js +205 -0
- package/dist/scope-evaluator.js.map +1 -0
- package/dist/slot-consumers/entity-slot-consumer.d.ts +36 -0
- package/dist/slot-consumers/entity-slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/entity-slot-consumer.js +413 -0
- package/dist/slot-consumers/entity-slot-consumer.js.map +1 -0
- package/dist/slot-consumers/index.d.ts +43 -0
- package/dist/slot-consumers/index.d.ts.map +1 -0
- package/dist/slot-consumers/index.js +78 -0
- package/dist/slot-consumers/index.js.map +1 -0
- package/dist/slot-consumers/slot-consumer.d.ts +61 -0
- package/dist/slot-consumers/slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/slot-consumer.js +31 -0
- package/dist/slot-consumers/slot-consumer.js.map +1 -0
- package/dist/slot-consumers/text-slot-consumer.d.ts +33 -0
- package/dist/slot-consumers/text-slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/text-slot-consumer.js +157 -0
- package/dist/slot-consumers/text-slot-consumer.js.map +1 -0
- package/dist/slot-consumers/typed-slot-consumer.d.ts +35 -0
- package/dist/slot-consumers/typed-slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/typed-slot-consumer.js +151 -0
- package/dist/slot-consumers/typed-slot-consumer.js.map +1 -0
- package/dist/slot-consumers/vocabulary-slot-consumer.d.ts +42 -0
- package/dist/slot-consumers/vocabulary-slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/vocabulary-slot-consumer.js +186 -0
- package/dist/slot-consumers/vocabulary-slot-consumer.js.map +1 -0
- package/package.json +65 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* English (US) Parser for Sharpee Interactive Fiction Platform
|
|
4
|
+
*
|
|
5
|
+
* This package provides English-specific parsing functionality
|
|
6
|
+
* for converting natural language commands into structured commands.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.metadata = exports.INANIMATE_THEM = exports.INANIMATE_IT = exports.RECOGNIZED_PRONOUNS = exports.isRecognizedPronoun = exports.PronounContextManager = exports.analyzeBestFailure = exports.Parser = exports.EnglishParser = void 0;
|
|
10
|
+
var english_parser_1 = require("./english-parser");
|
|
11
|
+
Object.defineProperty(exports, "EnglishParser", { enumerable: true, get: function () { return english_parser_1.EnglishParser; } });
|
|
12
|
+
var english_parser_2 = require("./english-parser"); // For convenience
|
|
13
|
+
Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return english_parser_2.EnglishParser; } });
|
|
14
|
+
var parse_failure_1 = require("./parse-failure");
|
|
15
|
+
Object.defineProperty(exports, "analyzeBestFailure", { enumerable: true, get: function () { return parse_failure_1.analyzeBestFailure; } });
|
|
16
|
+
var pronoun_context_1 = require("./pronoun-context");
|
|
17
|
+
Object.defineProperty(exports, "PronounContextManager", { enumerable: true, get: function () { return pronoun_context_1.PronounContextManager; } });
|
|
18
|
+
Object.defineProperty(exports, "isRecognizedPronoun", { enumerable: true, get: function () { return pronoun_context_1.isRecognizedPronoun; } });
|
|
19
|
+
Object.defineProperty(exports, "RECOGNIZED_PRONOUNS", { enumerable: true, get: function () { return pronoun_context_1.RECOGNIZED_PRONOUNS; } });
|
|
20
|
+
Object.defineProperty(exports, "INANIMATE_IT", { enumerable: true, get: function () { return pronoun_context_1.INANIMATE_IT; } });
|
|
21
|
+
Object.defineProperty(exports, "INANIMATE_THEM", { enumerable: true, get: function () { return pronoun_context_1.INANIMATE_THEM; } });
|
|
22
|
+
/**
|
|
23
|
+
* Package metadata
|
|
24
|
+
*/
|
|
25
|
+
exports.metadata = {
|
|
26
|
+
languageCode: 'en-US',
|
|
27
|
+
languageName: 'English (United States)',
|
|
28
|
+
parserVersion: '1.0.0',
|
|
29
|
+
supportedPatterns: [
|
|
30
|
+
'VERB_ONLY',
|
|
31
|
+
'VERB_NOUN',
|
|
32
|
+
'VERB_PREP_NOUN',
|
|
33
|
+
'VERB_NOUN_PREP_NOUN',
|
|
34
|
+
'DIRECTION_ONLY'
|
|
35
|
+
],
|
|
36
|
+
features: [
|
|
37
|
+
'compound-verbs',
|
|
38
|
+
'articles',
|
|
39
|
+
'adjectives',
|
|
40
|
+
'abbreviations',
|
|
41
|
+
'multi-word-nouns'
|
|
42
|
+
]
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,mDAA2D,CAAC,kBAAkB;AAArE,wGAAA,aAAa,OAAU;AAWhC,iDAAqD;AAA5C,mHAAA,kBAAkB,OAAA;AAI3B,qDAM2B;AALzB,wHAAA,qBAAqB,OAAA;AACrB,sHAAA,mBAAmB,OAAA;AACnB,sHAAA,mBAAmB,OAAA;AACnB,+GAAA,YAAY,OAAA;AACZ,iHAAA,cAAc,OAAA;AAGhB;;GAEG;AACU,QAAA,QAAQ,GAAG;IACtB,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE,yBAAyB;IACvC,aAAa,EAAE,OAAO;IACtB,iBAAiB,EAAE;QACjB,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,qBAAqB;QACrB,gBAAgB;KACjB;IACD,QAAQ,EAAE;QACR,gBAAgB;QAChB,UAAU;QACV,YAAY;QACZ,eAAe;QACf,kBAAkB;KACnB;CACF,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Parse Failure Tracking
|
|
3
|
+
* @description Types and utilities for tracking partial match failures
|
|
4
|
+
* to provide better error messages (Phase 1.2 of parser recommendations)
|
|
5
|
+
*/
|
|
6
|
+
import type { ParseErrorCode } from '@sharpee/world-model';
|
|
7
|
+
/**
|
|
8
|
+
* Reason why a pattern match failed
|
|
9
|
+
*/
|
|
10
|
+
export type MatchFailureReason = 'NO_TOKENS' | 'VERB_MISMATCH' | 'LITERAL_MISMATCH' | 'SLOT_FAILED' | 'LEFTOVER_TOKENS' | 'NOT_ENOUGH_TOKENS';
|
|
11
|
+
/**
|
|
12
|
+
* Detailed slot failure information
|
|
13
|
+
*/
|
|
14
|
+
export interface SlotFailure {
|
|
15
|
+
/** Slot name (e.g., 'target', 'container') */
|
|
16
|
+
slotName: string;
|
|
17
|
+
/** Tokens that were tried for this slot */
|
|
18
|
+
attemptedText: string;
|
|
19
|
+
/** Why the slot failed */
|
|
20
|
+
reason: 'NO_MATCH' | 'SCOPE_VIOLATION' | 'AMBIGUOUS';
|
|
21
|
+
/** For NO_MATCH: the word(s) that couldn't be resolved */
|
|
22
|
+
unknownWord?: string;
|
|
23
|
+
/** For SCOPE_VIOLATION: entities found but out of scope */
|
|
24
|
+
outOfScopeEntities?: string[];
|
|
25
|
+
/** For AMBIGUOUS: multiple matches found */
|
|
26
|
+
candidates?: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Information about a partial pattern match failure
|
|
30
|
+
*/
|
|
31
|
+
export interface PartialMatchFailure {
|
|
32
|
+
/** The pattern that was attempted */
|
|
33
|
+
pattern: string;
|
|
34
|
+
/** The action this pattern maps to */
|
|
35
|
+
action: string;
|
|
36
|
+
/** How far into the pattern we got (0-1, higher = more matched) */
|
|
37
|
+
progress: number;
|
|
38
|
+
/** Number of tokens consumed before failure */
|
|
39
|
+
tokensConsumed: number;
|
|
40
|
+
/** Why the match failed */
|
|
41
|
+
reason: MatchFailureReason;
|
|
42
|
+
/** If verb was recognized, what was it */
|
|
43
|
+
matchedVerb?: string;
|
|
44
|
+
/** If a slot failed, details about that failure */
|
|
45
|
+
slotFailure?: SlotFailure;
|
|
46
|
+
/** The token that caused the mismatch (if applicable) */
|
|
47
|
+
failedAtToken?: string;
|
|
48
|
+
/** What was expected at the failure point */
|
|
49
|
+
expected?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Analyze partial match failures to determine the best error to report
|
|
53
|
+
*/
|
|
54
|
+
export declare function analyzeBestFailure(failures: PartialMatchFailure[], input: string, hasVerb: boolean): {
|
|
55
|
+
code: ParseErrorCode;
|
|
56
|
+
messageId: string;
|
|
57
|
+
context: Record<string, any>;
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=parse-failure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-failure.d.ts","sourceRoot":"","sources":["../src/parse-failure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,eAAe,GACf,kBAAkB,GAClB,aAAa,GACb,iBAAiB,GACjB,mBAAmB,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IAEjB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IAEtB,0BAA0B;IAC1B,MAAM,EAAE,UAAU,GAAG,iBAAiB,GAAG,WAAW,CAAC;IAErD,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAEhB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IAEf,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IAEjB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IAEvB,2BAA2B;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAE3B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,mDAAmD;IACnD,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAgI3E"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file Parse Failure Tracking
|
|
4
|
+
* @description Types and utilities for tracking partial match failures
|
|
5
|
+
* to provide better error messages (Phase 1.2 of parser recommendations)
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.analyzeBestFailure = analyzeBestFailure;
|
|
9
|
+
/**
|
|
10
|
+
* Analyze partial match failures to determine the best error to report
|
|
11
|
+
*/
|
|
12
|
+
function analyzeBestFailure(failures, input, hasVerb) {
|
|
13
|
+
if (failures.length === 0) {
|
|
14
|
+
// No patterns even tried
|
|
15
|
+
if (!input.trim()) {
|
|
16
|
+
return {
|
|
17
|
+
code: 'NO_VERB',
|
|
18
|
+
messageId: 'parser.error.noInput',
|
|
19
|
+
context: {}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
code: 'UNKNOWN_VERB',
|
|
24
|
+
messageId: 'parser.error.unknownVerb',
|
|
25
|
+
context: { verb: input.split(/\s+/)[0] }
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Sort by progress descending - most progress = best failure info
|
|
29
|
+
const sorted = [...failures].sort((a, b) => b.progress - a.progress);
|
|
30
|
+
const best = sorted[0];
|
|
31
|
+
// If best failure has verb matched and slot failure, we have good info
|
|
32
|
+
if (best.matchedVerb && best.slotFailure) {
|
|
33
|
+
const sf = best.slotFailure;
|
|
34
|
+
if (sf.reason === 'NO_MATCH') {
|
|
35
|
+
return {
|
|
36
|
+
code: 'ENTITY_NOT_FOUND',
|
|
37
|
+
messageId: 'parser.error.entityNotFound',
|
|
38
|
+
context: {
|
|
39
|
+
verb: best.matchedVerb,
|
|
40
|
+
noun: sf.unknownWord || sf.attemptedText,
|
|
41
|
+
slot: sf.slotName
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
if (sf.reason === 'SCOPE_VIOLATION') {
|
|
46
|
+
return {
|
|
47
|
+
code: 'SCOPE_VIOLATION',
|
|
48
|
+
messageId: 'parser.error.scopeViolation',
|
|
49
|
+
context: {
|
|
50
|
+
verb: best.matchedVerb,
|
|
51
|
+
noun: sf.attemptedText,
|
|
52
|
+
slot: sf.slotName
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (sf.reason === 'AMBIGUOUS') {
|
|
57
|
+
return {
|
|
58
|
+
code: 'AMBIGUOUS_INPUT',
|
|
59
|
+
messageId: 'parser.error.ambiguous',
|
|
60
|
+
context: {
|
|
61
|
+
verb: best.matchedVerb,
|
|
62
|
+
noun: sf.attemptedText,
|
|
63
|
+
candidates: sf.candidates
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// If verb matched but we ran out of tokens (missing object)
|
|
69
|
+
if (best.matchedVerb && best.reason === 'NOT_ENOUGH_TOKENS') {
|
|
70
|
+
// Check if it was looking for a slot
|
|
71
|
+
if (best.expected?.startsWith(':')) {
|
|
72
|
+
const slotName = best.expected.slice(1);
|
|
73
|
+
// Determine if it's direct or indirect object
|
|
74
|
+
if (slotName === 'target' || slotName === 'item' || slotName === 'object') {
|
|
75
|
+
return {
|
|
76
|
+
code: 'MISSING_OBJECT',
|
|
77
|
+
messageId: 'parser.error.missingObject',
|
|
78
|
+
context: { verb: best.matchedVerb }
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return {
|
|
83
|
+
code: 'MISSING_INDIRECT',
|
|
84
|
+
messageId: 'parser.error.missingIndirect',
|
|
85
|
+
context: {
|
|
86
|
+
verb: best.matchedVerb,
|
|
87
|
+
slot: slotName
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
code: 'MISSING_OBJECT',
|
|
94
|
+
messageId: 'parser.error.missingObject',
|
|
95
|
+
context: { verb: best.matchedVerb }
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Verb matched but slot failed without details (generic slot failure)
|
|
99
|
+
if (best.matchedVerb && best.reason === 'SLOT_FAILED') {
|
|
100
|
+
return {
|
|
101
|
+
code: 'MISSING_OBJECT',
|
|
102
|
+
messageId: 'parser.error.missingObject',
|
|
103
|
+
context: { verb: best.matchedVerb }
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// If first token matched verb patterns but all failed
|
|
107
|
+
if (best.matchedVerb && best.reason === 'LEFTOVER_TOKENS') {
|
|
108
|
+
return {
|
|
109
|
+
code: 'INVALID_SYNTAX',
|
|
110
|
+
messageId: 'parser.error.invalidSyntax',
|
|
111
|
+
context: {
|
|
112
|
+
verb: best.matchedVerb,
|
|
113
|
+
extraWords: best.failedAtToken
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// No verb matched at all - unknown verb
|
|
118
|
+
if (!hasVerb) {
|
|
119
|
+
return {
|
|
120
|
+
code: 'UNKNOWN_VERB',
|
|
121
|
+
messageId: 'parser.error.unknownVerb',
|
|
122
|
+
context: { verb: input.split(/\s+/)[0] }
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// Fallback
|
|
126
|
+
return {
|
|
127
|
+
code: 'INVALID_SYNTAX',
|
|
128
|
+
messageId: 'parser.error.invalidSyntax',
|
|
129
|
+
context: {}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=parse-failure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-failure.js","sourceRoot":"","sources":["../src/parse-failure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser-specific types
|
|
3
|
+
* These were previously in @sharpee/if-domain but are now local to the parser
|
|
4
|
+
*/
|
|
5
|
+
import type { IParsedCommand, IParseError as CoreParseError } from '@sharpee/world-model';
|
|
6
|
+
/**
|
|
7
|
+
* Parser interface
|
|
8
|
+
*/
|
|
9
|
+
export interface Parser {
|
|
10
|
+
parse(input: string): CommandResult<IParsedCommand, CoreParseError>;
|
|
11
|
+
setDebugCallback?(callback: ((event: any) => void) | undefined): void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Parser options
|
|
15
|
+
*/
|
|
16
|
+
export interface ParserOptions {
|
|
17
|
+
allowPartial?: boolean;
|
|
18
|
+
expandAbbreviations?: boolean;
|
|
19
|
+
ignoreArticles?: boolean;
|
|
20
|
+
minConfidence?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Internal token representation
|
|
24
|
+
*/
|
|
25
|
+
export interface Token {
|
|
26
|
+
word: string;
|
|
27
|
+
normalized: string;
|
|
28
|
+
position: number;
|
|
29
|
+
candidates: TokenCandidate[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Token candidate
|
|
33
|
+
*/
|
|
34
|
+
export interface TokenCandidate {
|
|
35
|
+
partOfSpeech: PartOfSpeech;
|
|
36
|
+
mapsTo: string;
|
|
37
|
+
priority?: number;
|
|
38
|
+
source?: string;
|
|
39
|
+
metadata?: Record<string, any>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Command result wrapper
|
|
43
|
+
*/
|
|
44
|
+
export type CommandResult<T, E> = {
|
|
45
|
+
success: true;
|
|
46
|
+
value: T;
|
|
47
|
+
} | {
|
|
48
|
+
success: false;
|
|
49
|
+
error: E;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Candidate command (legacy format)
|
|
53
|
+
*/
|
|
54
|
+
export interface CandidateCommand {
|
|
55
|
+
action: string;
|
|
56
|
+
originalInput: string;
|
|
57
|
+
tokens: Token[];
|
|
58
|
+
pattern: string;
|
|
59
|
+
confidence: number;
|
|
60
|
+
nounText?: string;
|
|
61
|
+
nounCandidates?: string[];
|
|
62
|
+
preposition?: string;
|
|
63
|
+
secondNounText?: string;
|
|
64
|
+
secondNounCandidates?: string[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Internal parse result (legacy format)
|
|
68
|
+
*/
|
|
69
|
+
export interface InternalParseResult {
|
|
70
|
+
candidates: CandidateCommand[];
|
|
71
|
+
errors: ParseError[];
|
|
72
|
+
partial: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse error types
|
|
76
|
+
*/
|
|
77
|
+
export declare enum ParseErrorType {
|
|
78
|
+
UNKNOWN_WORD = "UNKNOWN_WORD",
|
|
79
|
+
PATTERN_MISMATCH = "PATTERN_MISMATCH",
|
|
80
|
+
AMBIGUOUS = "AMBIGUOUS",
|
|
81
|
+
NO_COMMAND = "NO_COMMAND"
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Parse error
|
|
85
|
+
*/
|
|
86
|
+
export interface ParseError {
|
|
87
|
+
type: ParseErrorType;
|
|
88
|
+
message: string;
|
|
89
|
+
words?: string[];
|
|
90
|
+
position?: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Vocabulary part of speech
|
|
94
|
+
*/
|
|
95
|
+
export declare enum PartOfSpeech {
|
|
96
|
+
VERB = "VERB",
|
|
97
|
+
NOUN = "NOUN",
|
|
98
|
+
ADJECTIVE = "ADJECTIVE",
|
|
99
|
+
ARTICLE = "ARTICLE",
|
|
100
|
+
PREPOSITION = "PREPOSITION",
|
|
101
|
+
PRONOUN = "PRONOUN",
|
|
102
|
+
DIRECTION = "DIRECTION",
|
|
103
|
+
SPECIAL = "SPECIAL"
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Grammar patterns
|
|
107
|
+
*/
|
|
108
|
+
export interface GrammarPatterns {
|
|
109
|
+
patterns: Array<{
|
|
110
|
+
name: string;
|
|
111
|
+
pattern: string;
|
|
112
|
+
action?: string;
|
|
113
|
+
}>;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Language provider interface
|
|
117
|
+
*/
|
|
118
|
+
export interface LanguageProvider {
|
|
119
|
+
getVerbs?(): Array<{
|
|
120
|
+
actionId: string;
|
|
121
|
+
verbs: string[];
|
|
122
|
+
}>;
|
|
123
|
+
getDirections?(): Array<{
|
|
124
|
+
directionId: string;
|
|
125
|
+
words: string[];
|
|
126
|
+
}>;
|
|
127
|
+
getSpecialWords?(): Record<string, string[]>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Vocabulary entry
|
|
131
|
+
*/
|
|
132
|
+
export interface VocabularyEntry {
|
|
133
|
+
word: string;
|
|
134
|
+
partOfSpeech: PartOfSpeech;
|
|
135
|
+
mapsTo: string;
|
|
136
|
+
priority?: number;
|
|
137
|
+
source?: string;
|
|
138
|
+
metadata?: Record<string, any>;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Simple vocabulary registry
|
|
142
|
+
*/
|
|
143
|
+
export declare class VocabularyRegistry {
|
|
144
|
+
private entries;
|
|
145
|
+
clear(): void;
|
|
146
|
+
register(entry: VocabularyEntry): void;
|
|
147
|
+
registerVerbs(verbs: Array<{
|
|
148
|
+
word: string;
|
|
149
|
+
mapsTo: string;
|
|
150
|
+
priority?: number;
|
|
151
|
+
}>): void;
|
|
152
|
+
registerDirections(directions: Array<{
|
|
153
|
+
word: string;
|
|
154
|
+
mapsTo: string;
|
|
155
|
+
}>): void;
|
|
156
|
+
registerSpecial(special: Array<{
|
|
157
|
+
word: string;
|
|
158
|
+
type: string;
|
|
159
|
+
}>): void;
|
|
160
|
+
lookup(word: string): VocabularyEntry[];
|
|
161
|
+
}
|
|
162
|
+
export declare const vocabularyRegistry: VocabularyRegistry;
|
|
163
|
+
/**
|
|
164
|
+
* Adapt verb vocabulary from language provider format
|
|
165
|
+
*/
|
|
166
|
+
export declare function adaptVerbVocabulary(language: LanguageProvider): Array<{
|
|
167
|
+
word: string;
|
|
168
|
+
mapsTo: string;
|
|
169
|
+
priority?: number;
|
|
170
|
+
}>;
|
|
171
|
+
/**
|
|
172
|
+
* Adapt direction vocabulary from language provider format
|
|
173
|
+
*/
|
|
174
|
+
export declare function adaptDirectionVocabulary(language: LanguageProvider): Array<{
|
|
175
|
+
word: string;
|
|
176
|
+
mapsTo: string;
|
|
177
|
+
}>;
|
|
178
|
+
/**
|
|
179
|
+
* Adapt special vocabulary from language provider format
|
|
180
|
+
*/
|
|
181
|
+
export declare function adaptSpecialVocabulary(language: LanguageProvider): Array<{
|
|
182
|
+
word: string;
|
|
183
|
+
type: string;
|
|
184
|
+
}>;
|
|
185
|
+
//# sourceMappingURL=parser-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-types.d.ts","sourceRoot":"","sources":["../src/parser-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Parser-specific types
|
|
4
|
+
* These were previously in @sharpee/if-domain but are now local to the parser
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.vocabularyRegistry = exports.VocabularyRegistry = exports.PartOfSpeech = exports.ParseErrorType = void 0;
|
|
8
|
+
exports.adaptVerbVocabulary = adaptVerbVocabulary;
|
|
9
|
+
exports.adaptDirectionVocabulary = adaptDirectionVocabulary;
|
|
10
|
+
exports.adaptSpecialVocabulary = adaptSpecialVocabulary;
|
|
11
|
+
/**
|
|
12
|
+
* Parse error types
|
|
13
|
+
*/
|
|
14
|
+
var ParseErrorType;
|
|
15
|
+
(function (ParseErrorType) {
|
|
16
|
+
ParseErrorType["UNKNOWN_WORD"] = "UNKNOWN_WORD";
|
|
17
|
+
ParseErrorType["PATTERN_MISMATCH"] = "PATTERN_MISMATCH";
|
|
18
|
+
ParseErrorType["AMBIGUOUS"] = "AMBIGUOUS";
|
|
19
|
+
ParseErrorType["NO_COMMAND"] = "NO_COMMAND";
|
|
20
|
+
})(ParseErrorType || (exports.ParseErrorType = ParseErrorType = {}));
|
|
21
|
+
/**
|
|
22
|
+
* Vocabulary part of speech
|
|
23
|
+
*/
|
|
24
|
+
var PartOfSpeech;
|
|
25
|
+
(function (PartOfSpeech) {
|
|
26
|
+
PartOfSpeech["VERB"] = "VERB";
|
|
27
|
+
PartOfSpeech["NOUN"] = "NOUN";
|
|
28
|
+
PartOfSpeech["ADJECTIVE"] = "ADJECTIVE";
|
|
29
|
+
PartOfSpeech["ARTICLE"] = "ARTICLE";
|
|
30
|
+
PartOfSpeech["PREPOSITION"] = "PREPOSITION";
|
|
31
|
+
PartOfSpeech["PRONOUN"] = "PRONOUN";
|
|
32
|
+
PartOfSpeech["DIRECTION"] = "DIRECTION";
|
|
33
|
+
PartOfSpeech["SPECIAL"] = "SPECIAL";
|
|
34
|
+
})(PartOfSpeech || (exports.PartOfSpeech = PartOfSpeech = {}));
|
|
35
|
+
/**
|
|
36
|
+
* Simple vocabulary registry
|
|
37
|
+
*/
|
|
38
|
+
class VocabularyRegistry {
|
|
39
|
+
entries = new Map();
|
|
40
|
+
clear() {
|
|
41
|
+
this.entries.clear();
|
|
42
|
+
}
|
|
43
|
+
register(entry) {
|
|
44
|
+
const word = entry.word.toLowerCase();
|
|
45
|
+
if (!this.entries.has(word)) {
|
|
46
|
+
this.entries.set(word, []);
|
|
47
|
+
}
|
|
48
|
+
this.entries.get(word).push(entry);
|
|
49
|
+
}
|
|
50
|
+
registerVerbs(verbs) {
|
|
51
|
+
for (const verb of verbs) {
|
|
52
|
+
this.register({
|
|
53
|
+
word: verb.word,
|
|
54
|
+
partOfSpeech: PartOfSpeech.VERB,
|
|
55
|
+
mapsTo: verb.mapsTo,
|
|
56
|
+
priority: verb.priority
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
registerDirections(directions) {
|
|
61
|
+
for (const dir of directions) {
|
|
62
|
+
this.register({
|
|
63
|
+
word: dir.word,
|
|
64
|
+
partOfSpeech: PartOfSpeech.DIRECTION,
|
|
65
|
+
mapsTo: dir.mapsTo
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
registerSpecial(special) {
|
|
70
|
+
for (const spec of special) {
|
|
71
|
+
this.register({
|
|
72
|
+
word: spec.word,
|
|
73
|
+
partOfSpeech: PartOfSpeech.SPECIAL,
|
|
74
|
+
mapsTo: spec.type
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
lookup(word) {
|
|
79
|
+
return this.entries.get(word.toLowerCase()) || [];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.VocabularyRegistry = VocabularyRegistry;
|
|
83
|
+
exports.vocabularyRegistry = new VocabularyRegistry();
|
|
84
|
+
/**
|
|
85
|
+
* Adapt verb vocabulary from language provider format
|
|
86
|
+
*/
|
|
87
|
+
function adaptVerbVocabulary(language) {
|
|
88
|
+
const verbs = [];
|
|
89
|
+
if (language.getVerbs) {
|
|
90
|
+
for (const verbDef of language.getVerbs()) {
|
|
91
|
+
for (const verb of verbDef.verbs) {
|
|
92
|
+
verbs.push({
|
|
93
|
+
word: verb,
|
|
94
|
+
mapsTo: verbDef.actionId,
|
|
95
|
+
priority: 1.0
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return verbs;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Adapt direction vocabulary from language provider format
|
|
104
|
+
*/
|
|
105
|
+
function adaptDirectionVocabulary(language) {
|
|
106
|
+
const directions = [];
|
|
107
|
+
if (language.getDirections) {
|
|
108
|
+
for (const dirDef of language.getDirections()) {
|
|
109
|
+
for (const word of dirDef.words) {
|
|
110
|
+
directions.push({
|
|
111
|
+
word,
|
|
112
|
+
mapsTo: dirDef.directionId
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return directions;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Adapt special vocabulary from language provider format
|
|
121
|
+
*/
|
|
122
|
+
function adaptSpecialVocabulary(language) {
|
|
123
|
+
const special = [];
|
|
124
|
+
if (language.getSpecialWords) {
|
|
125
|
+
const specialWords = language.getSpecialWords();
|
|
126
|
+
for (const [type, words] of Object.entries(specialWords)) {
|
|
127
|
+
for (const word of words) {
|
|
128
|
+
special.push({ word, type });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return special;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=parser-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-types.js","sourceRoot":"","sources":["../src/parser-types.ts"],"names":[],"mappings":"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"}
|