@sharpee/lang-en-us 1.5.0 → 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 (223) hide show
  1. package/actions/about.d.ts.map +1 -1
  2. package/actions/about.js +8 -8
  3. package/actions/about.js.map +1 -1
  4. package/actions/again.d.ts.map +1 -1
  5. package/actions/again.js.map +1 -1
  6. package/actions/answering.d.ts.map +1 -1
  7. package/actions/answering.js.map +1 -1
  8. package/actions/asking.d.ts.map +1 -1
  9. package/actions/asking.js +14 -14
  10. package/actions/asking.js.map +1 -1
  11. package/actions/attacking.d.ts.map +1 -1
  12. package/actions/attacking.js +51 -51
  13. package/actions/attacking.js.map +1 -1
  14. package/actions/climbing.d.ts.map +1 -1
  15. package/actions/climbing.js +4 -4
  16. package/actions/climbing.js.map +1 -1
  17. package/actions/closing.d.ts.map +1 -1
  18. package/actions/closing.js +5 -5
  19. package/actions/closing.js.map +1 -1
  20. package/actions/drinking.d.ts.map +1 -1
  21. package/actions/drinking.js +20 -20
  22. package/actions/drinking.js.map +1 -1
  23. package/actions/dropping.d.ts.map +1 -1
  24. package/actions/dropping.js +3 -3
  25. package/actions/dropping.js.map +1 -1
  26. package/actions/eating.d.ts.map +1 -1
  27. package/actions/eating.js +20 -20
  28. package/actions/eating.js.map +1 -1
  29. package/actions/entering.d.ts.map +1 -1
  30. package/actions/entering.js +10 -10
  31. package/actions/entering.js.map +1 -1
  32. package/actions/examining.d.ts.map +1 -1
  33. package/actions/examining.js +28 -23
  34. package/actions/examining.js.map +1 -1
  35. package/actions/exiting.d.ts.map +1 -1
  36. package/actions/exiting.js +4 -4
  37. package/actions/exiting.js.map +1 -1
  38. package/actions/giving.d.ts.map +1 -1
  39. package/actions/giving.js +12 -12
  40. package/actions/giving.js.map +1 -1
  41. package/actions/going.d.ts.map +1 -1
  42. package/actions/going.js +7 -7
  43. package/actions/going.js.map +1 -1
  44. package/actions/help.d.ts.map +1 -1
  45. package/actions/help.js +2 -2
  46. package/actions/help.js.map +1 -1
  47. package/actions/hiding.d.ts.map +1 -1
  48. package/actions/hiding.js.map +1 -1
  49. package/actions/index.d.ts.map +1 -1
  50. package/actions/index.js.map +1 -1
  51. package/actions/inserting.d.ts.map +1 -1
  52. package/actions/inserting.js +8 -8
  53. package/actions/inserting.js.map +1 -1
  54. package/actions/inventory.d.ts.map +1 -1
  55. package/actions/inventory.js.map +1 -1
  56. package/actions/listening.d.ts.map +1 -1
  57. package/actions/listening.js +7 -7
  58. package/actions/listening.js.map +1 -1
  59. package/actions/locking.d.ts.map +1 -1
  60. package/actions/locking.js +8 -8
  61. package/actions/locking.js.map +1 -1
  62. package/actions/looking.d.ts.map +1 -1
  63. package/actions/looking.js +5 -5
  64. package/actions/looking.js.map +1 -1
  65. package/actions/lowering.d.ts.map +1 -1
  66. package/actions/lowering.js +2 -2
  67. package/actions/lowering.js.map +1 -1
  68. package/actions/opening.d.ts.map +1 -1
  69. package/actions/opening.js +7 -7
  70. package/actions/opening.js.map +1 -1
  71. package/actions/pulling.d.ts.map +1 -1
  72. package/actions/pulling.js +19 -19
  73. package/actions/pulling.js.map +1 -1
  74. package/actions/pushing.d.ts.map +1 -1
  75. package/actions/pushing.js +14 -14
  76. package/actions/pushing.js.map +1 -1
  77. package/actions/putting.d.ts.map +1 -1
  78. package/actions/putting.js +12 -12
  79. package/actions/putting.js.map +1 -1
  80. package/actions/quitting.d.ts.map +1 -1
  81. package/actions/quitting.js.map +1 -1
  82. package/actions/raising.d.ts.map +1 -1
  83. package/actions/raising.js +2 -2
  84. package/actions/raising.js.map +1 -1
  85. package/actions/reading.d.ts.map +1 -1
  86. package/actions/reading.js +7 -7
  87. package/actions/reading.js.map +1 -1
  88. package/actions/removing.d.ts.map +1 -1
  89. package/actions/removing.js +8 -8
  90. package/actions/removing.js.map +1 -1
  91. package/actions/restoring.d.ts.map +1 -1
  92. package/actions/restoring.js +6 -6
  93. package/actions/restoring.js.map +1 -1
  94. package/actions/saving.d.ts.map +1 -1
  95. package/actions/saving.js +6 -6
  96. package/actions/saving.js.map +1 -1
  97. package/actions/scoring.d.ts.map +1 -1
  98. package/actions/scoring.js.map +1 -1
  99. package/actions/searching.d.ts.map +1 -1
  100. package/actions/searching.js +7 -7
  101. package/actions/searching.js.map +1 -1
  102. package/actions/showing.d.ts.map +1 -1
  103. package/actions/showing.js +11 -11
  104. package/actions/showing.js.map +1 -1
  105. package/actions/sleeping.d.ts.map +1 -1
  106. package/actions/sleeping.js.map +1 -1
  107. package/actions/smelling.d.ts.map +1 -1
  108. package/actions/smelling.js +10 -10
  109. package/actions/smelling.js.map +1 -1
  110. package/actions/switching-off.d.ts.map +1 -1
  111. package/actions/switching-off.js +12 -12
  112. package/actions/switching-off.js.map +1 -1
  113. package/actions/switching-on.d.ts.map +1 -1
  114. package/actions/switching-on.js +12 -12
  115. package/actions/switching-on.js.map +1 -1
  116. package/actions/taking-off.d.ts.map +1 -1
  117. package/actions/taking-off.js +4 -4
  118. package/actions/taking-off.js.map +1 -1
  119. package/actions/taking.d.ts.map +1 -1
  120. package/actions/taking.js +5 -5
  121. package/actions/taking.js.map +1 -1
  122. package/actions/talking.d.ts.map +1 -1
  123. package/actions/talking.js +15 -15
  124. package/actions/talking.js.map +1 -1
  125. package/actions/telling.d.ts.map +1 -1
  126. package/actions/telling.js +13 -13
  127. package/actions/telling.js.map +1 -1
  128. package/actions/throwing.d.ts.map +1 -1
  129. package/actions/throwing.js +21 -21
  130. package/actions/throwing.js.map +1 -1
  131. package/actions/touching.d.ts.map +1 -1
  132. package/actions/touching.js +20 -20
  133. package/actions/touching.js.map +1 -1
  134. package/actions/turning.d.ts.map +1 -1
  135. package/actions/turning.js +24 -24
  136. package/actions/turning.js.map +1 -1
  137. package/actions/undoing.d.ts.map +1 -1
  138. package/actions/undoing.js.map +1 -1
  139. package/actions/unlocking.d.ts.map +1 -1
  140. package/actions/unlocking.js +8 -8
  141. package/actions/unlocking.js.map +1 -1
  142. package/actions/version.d.ts.map +1 -1
  143. package/actions/version.js +3 -3
  144. package/actions/version.js.map +1 -1
  145. package/actions/waiting.d.ts.map +1 -1
  146. package/actions/waiting.js +1 -1
  147. package/actions/waiting.js.map +1 -1
  148. package/actions/wearing.d.ts.map +1 -1
  149. package/actions/wearing.js +5 -5
  150. package/actions/wearing.js.map +1 -1
  151. package/assembler/english-assembler.d.ts +66 -0
  152. package/assembler/english-assembler.d.ts.map +1 -0
  153. package/assembler/english-assembler.js +806 -0
  154. package/assembler/english-assembler.js.map +1 -0
  155. package/assembler/errors.d.ts +23 -0
  156. package/assembler/errors.d.ts.map +1 -0
  157. package/assembler/errors.js +35 -0
  158. package/assembler/errors.js.map +1 -0
  159. package/assembler/index.d.ts +10 -0
  160. package/assembler/index.d.ts.map +1 -0
  161. package/assembler/index.js +17 -0
  162. package/assembler/index.js.map +1 -0
  163. package/data/events.d.ts.map +1 -1
  164. package/data/events.js +11 -11
  165. package/data/events.js.map +1 -1
  166. package/data/messages.d.ts.map +1 -1
  167. package/data/messages.js +1 -1
  168. package/data/messages.js.map +1 -1
  169. package/data/verbs.d.ts.map +1 -1
  170. package/data/verbs.js.map +1 -1
  171. package/data/words.d.ts.map +1 -1
  172. package/data/words.js.map +1 -1
  173. package/grammar.d.ts.map +1 -1
  174. package/grammar.js.map +1 -1
  175. package/index.d.ts +2 -1
  176. package/index.d.ts.map +1 -1
  177. package/index.js +4 -1
  178. package/index.js.map +1 -1
  179. package/language-provider.d.ts +44 -24
  180. package/language-provider.d.ts.map +1 -1
  181. package/language-provider.js +83 -40
  182. package/language-provider.js.map +1 -1
  183. package/npc/conversation.d.ts +5 -0
  184. package/npc/conversation.d.ts.map +1 -1
  185. package/npc/conversation.js +24 -19
  186. package/npc/conversation.js.map +1 -1
  187. package/npc/index.d.ts.map +1 -1
  188. package/npc/index.js.map +1 -1
  189. package/npc/influence.d.ts.map +1 -1
  190. package/npc/influence.js +4 -4
  191. package/npc/influence.js.map +1 -1
  192. package/npc/npc.d.ts +6 -0
  193. package/npc/npc.d.ts.map +1 -1
  194. package/npc/npc.js +39 -33
  195. package/npc/npc.js.map +1 -1
  196. package/npc/propagation.d.ts.map +1 -1
  197. package/npc/propagation.js +6 -6
  198. package/npc/propagation.js.map +1 -1
  199. package/number-words.d.ts +18 -0
  200. package/number-words.d.ts.map +1 -1
  201. package/number-words.js +77 -0
  202. package/number-words.js.map +1 -1
  203. package/package.json +3 -3
  204. package/parser/index.d.ts +8 -0
  205. package/parser/index.d.ts.map +1 -0
  206. package/parser/index.js +13 -0
  207. package/parser/index.js.map +1 -0
  208. package/parser/parse-phrase-template.d.ts +62 -0
  209. package/parser/parse-phrase-template.d.ts.map +1 -0
  210. package/parser/parse-phrase-template.js +384 -0
  211. package/parser/parse-phrase-template.js.map +1 -0
  212. package/perspective/index.d.ts.map +1 -1
  213. package/perspective/index.js.map +1 -1
  214. package/perspective/placeholder-resolver.d.ts +1 -1
  215. package/perspective/placeholder-resolver.d.ts.map +1 -1
  216. package/perspective/placeholder-resolver.js +12 -1
  217. package/perspective/placeholder-resolver.js.map +1 -1
  218. package/pluralize.d.ts.map +1 -1
  219. package/pluralize.js.map +1 -1
  220. package/sound-messages.d.ts +8 -8
  221. package/sound-messages.d.ts.map +1 -1
  222. package/sound-messages.js +8 -8
  223. package/sound-messages.js.map +1 -1
@@ -0,0 +1,384 @@
1
+ "use strict";
2
+ /**
3
+ * @file parsePhraseTemplate — the phrase-tree template parser (ADR-192 §5).
4
+ *
5
+ * Purpose: parse an author template string into a `Phrase` tree, binding each
6
+ * placeholder to a producer/param value. Replaces `parsePlaceholder` and the
7
+ * `:`-chain formatter grammar. Placeholders are producer references, never
8
+ * formatter chains.
9
+ *
10
+ * Public interface: `parsePhraseTemplate(template, params)` and
11
+ * `PhraseParseError`.
12
+ *
13
+ * Owner context: `@sharpee/lang-en-us`. The grammar is English-locale authoring
14
+ * surface; the produced `Phrase` tree is language-neutral.
15
+ *
16
+ * Grammar (ADR-192 §5):
17
+ * - `{item}` / `{the item}` / `{a item}` / `{an item}` / `{some item}` /
18
+ * `{capitalize the item}` → `NounPhrase` (last bare token = param name,
19
+ * leading bare tokens = reserved hints).
20
+ * - `{verb:is target}` / `{verb:has target}` / `{verb:opens door}` → a `Verb`
21
+ * atom (ADR-199): leading bare token is the lemma, last bare token is the
22
+ * subject param to agree with. The subject must be a bound param.
23
+ * - `{verbatim:name}` → a `Verbatim` atom (ADR-200): the param's value rendered
24
+ * as opaque, whitespace-exempt text. The param must be bound.
25
+ * - `{number:coins}` / `{number:coins words}` / `{number:floor ordinal}` → a
26
+ * `Numeral` atom (ADR-198): the numeric param, optional format. Must be bound.
27
+ * - `{pronoun:subject}` / `{pronoun:object}` / `{pronoun:possessive}` → a `Pronoun`
28
+ * atom (ADR-197): a grammatical case; the referent is the last-mentioned entity.
29
+ * - `{contents:box}` → a `Contents` atom (ADR-194): the container's live contents
30
+ * as a grouped list, read at realize time. The container must be bound.
31
+ * - `{slot:here}` / `{slot:detail clause}` / `{slot:detail clause or}` → a `Slot`
32
+ * combinator (ADR-195): the first bare token is the contribution channel key;
33
+ * optional trailing hints set `mode` (`sentence` default | `clause`) and the
34
+ * `clause` conjunction (`and` default | `or`). The key need NOT be a bound param
35
+ * — an unfilled slot is valid (AC-7); a keyless `{slot:}` is a parse error (AC-9).
36
+ * - No `:`-chain, `?`, `|`, `#`. A `:` head whose prefix is not a known kind,
37
+ * an unknown leading hint, or an unbound param all raise `PhraseParseError`
38
+ * AT PARSE TIME (never a silent `Empty` at realize time). (AC-8, AC-11)
39
+ */
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.PhraseParseError = void 0;
42
+ exports.parsePhraseTemplate = parsePhraseTemplate;
43
+ /** Leading hint → the article it selects on a `NounPhrase`. */
44
+ const ARTICLE_HINTS = {
45
+ the: 'definite',
46
+ a: 'indefinite',
47
+ an: 'indefinite',
48
+ some: 'some',
49
+ };
50
+ /**
51
+ * Recognized `kind:` heads → the reserved (stub) `Phrase` kind they route to.
52
+ * Empty for now: `slot` parses through `parseSlot`; the remaining stubs
53
+ * (`optional` / `choice`, ADR-196) populate this when their parse rules land.
54
+ */
55
+ const KIND_PREFIXES = {};
56
+ /** Recognized `{number:param format?}` formats (ADR-198). */
57
+ const NUMERAL_FORMATS = new Set(['digits', 'words', 'ordinal']);
58
+ /** Recognized `{pronoun:case}` cases (ADR-197). */
59
+ const PRONOUN_CASES = new Set(['subject', 'object', 'possessive', 'possessive-pronoun', 'reflexive']);
60
+ /**
61
+ * Raised when a template cannot be parsed: a legacy `:`-chain, an unknown
62
+ * kind-prefix, an unknown leading hint, or a reference to an unbound param.
63
+ * Carries the offending token and the full template so the author sees both.
64
+ */
65
+ class PhraseParseError extends Error {
66
+ offendingToken;
67
+ template;
68
+ reason;
69
+ constructor(offendingToken, template, reason) {
70
+ super(`Cannot parse template "${template}": ${reason} (at "${offendingToken}").`);
71
+ this.name = 'PhraseParseError';
72
+ this.offendingToken = offendingToken;
73
+ this.template = template;
74
+ this.reason = reason;
75
+ }
76
+ }
77
+ exports.PhraseParseError = PhraseParseError;
78
+ /** True if a param value is already a phrase (rather than a scalar to wrap). */
79
+ function isPhraseValue(value) {
80
+ return typeof value === 'object' && value !== null && typeof value.kind === 'string';
81
+ }
82
+ /** Build the phrase for a NounPhrase-default placeholder from its bound value. */
83
+ function bindNounPhrase(value, articleType, capitalize) {
84
+ if (isPhraseValue(value)) {
85
+ // A producer already supplied a phrase. Hints apply only to noun phrases;
86
+ // other kinds (e.g. a bound PhraseList) pass through untouched.
87
+ if (value.kind === 'noun') {
88
+ const np = { ...value };
89
+ if (articleType !== undefined)
90
+ np.articleType = articleType;
91
+ if (capitalize)
92
+ np.capitalize = true;
93
+ return np;
94
+ }
95
+ return value;
96
+ }
97
+ // Numbers/booleans with no hint render as literal text (not "a 42").
98
+ if ((typeof value === 'number' || typeof value === 'boolean') && articleType === undefined && !capitalize) {
99
+ return { kind: 'literal', text: String(value) };
100
+ }
101
+ // Strings (and hinted scalars) become the unprefixed NounPhrase default.
102
+ const np = {
103
+ kind: 'noun',
104
+ name: String(value),
105
+ number: 'singular',
106
+ articleType: articleType ?? 'indefinite',
107
+ };
108
+ if (capitalize)
109
+ np.capitalize = true;
110
+ return np;
111
+ }
112
+ /**
113
+ * Parse a `{verb:lemma subject}` head into a `Verb` atom (ADR-199 §2). Leading
114
+ * bare token(s) are the lemma; the last bare token is the subject param to agree
115
+ * with. The subject must be bound — an unbound subject is an authoring error and
116
+ * fails here at parse time (AC-11), matching the NounPhrase unbound-param rule.
117
+ */
118
+ function parseVerb(inner, template, params) {
119
+ const rest = inner.slice(inner.indexOf(':') + 1).trim();
120
+ const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
121
+ if (tokens.length < 2) {
122
+ throw new PhraseParseError(inner, template, 'a verb needs a lemma and a subject, e.g. {verb:is target}');
123
+ }
124
+ const subjectRef = tokens.pop();
125
+ const lemma = tokens.join(' ');
126
+ if (!(subjectRef in params)) {
127
+ throw new PhraseParseError(subjectRef, template, `verb subject '${subjectRef}' is not bound`);
128
+ }
129
+ return { kind: 'verb', lemma, subjectRef };
130
+ }
131
+ /**
132
+ * Parse a `{verbatim:x}` head into a `Verbatim` atom (ADR-200): the last bare
133
+ * token is the param whose value is rendered as opaque text. The param must be
134
+ * bound — an unbound param fails at parse time (ADR-192 AC-11).
135
+ */
136
+ function parseVerbatim(inner, template, params) {
137
+ const rest = inner.slice(inner.indexOf(':') + 1).trim();
138
+ const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
139
+ if (tokens.length !== 1) {
140
+ throw new PhraseParseError(inner, template, 'verbatim takes a single param, e.g. {verbatim:name}');
141
+ }
142
+ const name = tokens[0];
143
+ if (!(name in params)) {
144
+ throw new PhraseParseError(name, template, `verbatim param '${name}' is not bound`);
145
+ }
146
+ return { kind: 'verbatim', text: String(params[name]) };
147
+ }
148
+ /**
149
+ * Parse a `{number:param format?}` head into a `Numeral` atom (ADR-198). The
150
+ * first bare token is the numeric param; an optional trailing token is the format
151
+ * (`digits` default | `words` | `ordinal`). The param must be bound (AC-11).
152
+ */
153
+ function parseNumber(inner, template, params) {
154
+ const rest = inner.slice(inner.indexOf(':') + 1).trim();
155
+ const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
156
+ if (tokens.length < 1 || tokens.length > 2) {
157
+ throw new PhraseParseError(inner, template, 'a number takes a param and an optional format, e.g. {number:coins words}');
158
+ }
159
+ const name = tokens[0];
160
+ const format = tokens[1] ?? 'digits';
161
+ if (!NUMERAL_FORMATS.has(format)) {
162
+ throw new PhraseParseError(format, template, `'${format}' is not a number format (digits | words | ordinal)`);
163
+ }
164
+ if (!(name in params)) {
165
+ throw new PhraseParseError(name, template, `number param '${name}' is not bound`);
166
+ }
167
+ return { kind: 'number', value: Number(params[name]), format: format };
168
+ }
169
+ /**
170
+ * Parse a `{pronoun:case}` head into a `Pronoun` atom (ADR-197). The referent is
171
+ * the last-mentioned entity (resolved at realize time); the single token is the
172
+ * grammatical case. An unknown case fails at parse time (AC-11).
173
+ *
174
+ * `capitalize` (ADR-201 §2, from a `{capitalize pronoun:…}` head) sets the S40
175
+ * explicit override so the pronoun caps regardless of position.
176
+ */
177
+ function parsePronoun(inner, template, capitalize = false) {
178
+ const rest = inner.slice(inner.indexOf(':') + 1).trim();
179
+ const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
180
+ if (tokens.length !== 1 || !PRONOUN_CASES.has(tokens[0])) {
181
+ throw new PhraseParseError(inner, template, 'a pronoun takes one case: {pronoun:subject|object|possessive|possessive-pronoun|reflexive}');
182
+ }
183
+ const cased = tokens[0];
184
+ return capitalize ? { kind: 'pronoun', case: cased, capitalize: true } : { kind: 'pronoun', case: cased };
185
+ }
186
+ /**
187
+ * Parse a `{quote:utterance [terminal]}` head into a `Quote` atom (ADR-201 §5).
188
+ * The first bare token is the utterance param (must be bound); an optional second
189
+ * token sets the terminal placed inside the closing quote (`.` default | `?` | `!`).
190
+ * A bound `Phrase` value is used as the utterance directly; a scalar becomes a
191
+ * `Literal` (quoted speech, not an article-bearing noun phrase). An unbound param
192
+ * or a missing utterance fails at parse time (AC-10).
193
+ */
194
+ function parseQuote(inner, template, params) {
195
+ const rest = inner.slice(inner.indexOf(':') + 1).trim();
196
+ const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
197
+ if (tokens.length < 1) {
198
+ throw new PhraseParseError(inner, template, 'a quote needs an utterance param, e.g. {quote:line}');
199
+ }
200
+ if (tokens.length > 2) {
201
+ throw new PhraseParseError(inner, template, 'a quote takes an utterance param and an optional terminal, e.g. {quote:line !}');
202
+ }
203
+ const name = tokens[0];
204
+ const terminal = tokens[1];
205
+ if (terminal !== undefined && terminal !== '.' && terminal !== '?' && terminal !== '!') {
206
+ throw new PhraseParseError(terminal, template, `'${terminal}' is not a terminal (. | ? | !)`);
207
+ }
208
+ if (!(name in params)) {
209
+ throw new PhraseParseError(name, template, `quote utterance '${name}' is not bound`);
210
+ }
211
+ const value = params[name];
212
+ const utterance = isPhraseValue(value) ? value : { kind: 'literal', text: String(value) };
213
+ return terminal ? { kind: 'quote', utterance, terminal } : { kind: 'quote', utterance };
214
+ }
215
+ /**
216
+ * Parse a `{contents:container [or]}` head into a `Contents` atom (ADR-194). The
217
+ * first bare token is the container param (must be bound); an optional `or`/`and`
218
+ * sets the conjunction (default `and`). The contents are read at realize time.
219
+ */
220
+ function parseContents(inner, template, params) {
221
+ const rest = inner.slice(inner.indexOf(':') + 1).trim();
222
+ const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
223
+ if (tokens.length < 1 || tokens.length > 2) {
224
+ throw new PhraseParseError(inner, template, 'contents takes a container and an optional conjunction, e.g. {contents:box}');
225
+ }
226
+ const name = tokens[0];
227
+ const conj = tokens[1];
228
+ if (conj !== undefined && conj !== 'and' && conj !== 'or') {
229
+ throw new PhraseParseError(conj, template, `'${conj}' is not a conjunction (and | or)`);
230
+ }
231
+ if (!(name in params)) {
232
+ throw new PhraseParseError(name, template, `contents container '${name}' is not bound`);
233
+ }
234
+ return conj === 'or'
235
+ ? { kind: 'contents', containerRef: name, conj: 'or' }
236
+ : { kind: 'contents', containerRef: name };
237
+ }
238
+ /**
239
+ * Parse a `{slot:key [mode] [conj]}` head into a `Slot` combinator (ADR-195 §5).
240
+ * The first bare token is the contribution channel key; optional trailing hints
241
+ * set `mode` (`sentence` | `clause`) and the `clause` conjunction (`and` | `or`).
242
+ *
243
+ * The key is a channel name, NOT a param binding — an unfilled slot is valid and
244
+ * renders to nothing (AC-7), so there is no `in params` check. A keyless `{slot:}`
245
+ * is an authoring error and fails here at parse time (AC-9).
246
+ */
247
+ function parseSlot(inner, template) {
248
+ const rest = inner.slice(inner.indexOf(':') + 1).trim();
249
+ const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
250
+ if (tokens.length === 0) {
251
+ throw new PhraseParseError(inner, template, 'a slot needs a key, e.g. {slot:here}');
252
+ }
253
+ if (tokens.length > 3) {
254
+ throw new PhraseParseError(inner, template, 'a slot takes a key and optional mode/conj, e.g. {slot:detail clause or}');
255
+ }
256
+ const slot = { kind: 'slot', slotKey: tokens[0] };
257
+ for (const hint of tokens.slice(1)) {
258
+ if (hint === 'sentence' || hint === 'clause') {
259
+ slot.mode = hint;
260
+ }
261
+ else if (hint === 'and' || hint === 'or') {
262
+ slot.conj = hint;
263
+ }
264
+ else {
265
+ throw new PhraseParseError(hint, template, `'${hint}' is not a slot hint (sentence | clause | and | or)`);
266
+ }
267
+ }
268
+ return slot;
269
+ }
270
+ /** Parse one placeholder's inner text into a phrase, binding against params. */
271
+ function parsePlaceholder(inner, template, params) {
272
+ // A ':' marks a kind head. Its prefix must be a known kind — anything else
273
+ // (a legacy chain like `cap:the:item`, or an unknown kind) fails here.
274
+ if (inner.includes(':')) {
275
+ // A leading `capitalize` modifier on a kind head — only `pronoun` accepts it
276
+ // (ADR-201 §2). NounPhrase `{capitalize the item}` is handled in the no-`:`
277
+ // branch below; `{capitalize number:…}` / `verb` / `quote` etc. are authoring
278
+ // errors that throw at parse time (AC-10).
279
+ let capitalize = false;
280
+ let body = inner;
281
+ const trimmedStart = inner.trimStart();
282
+ if (trimmedStart.startsWith('capitalize ')) {
283
+ capitalize = true;
284
+ body = trimmedStart.slice('capitalize '.length).trimStart();
285
+ }
286
+ const prefix = body.slice(0, body.indexOf(':')).trim();
287
+ if (capitalize && prefix !== 'pronoun') {
288
+ throw new PhraseParseError(inner, template, `capitalize is not a valid modifier for '${prefix}'`);
289
+ }
290
+ // Verb atom (ADR-199): parses its own lemma + subject and binds the subject.
291
+ if (prefix === 'verb') {
292
+ return parseVerb(body, template, params);
293
+ }
294
+ // Verbatim atom (ADR-200): binds a single param, rendered as opaque text.
295
+ if (prefix === 'verbatim') {
296
+ return parseVerbatim(body, template, params);
297
+ }
298
+ // Numeral atom (ADR-198): binds a numeric param + optional format.
299
+ if (prefix === 'number') {
300
+ return parseNumber(body, template, params);
301
+ }
302
+ // Pronoun atom (ADR-197): a grammatical case; referent is last-mentioned.
303
+ if (prefix === 'pronoun') {
304
+ return parsePronoun(body, template, capitalize);
305
+ }
306
+ // Quote atom (ADR-201): a bound utterance wrapped in locale quote glyphs.
307
+ if (prefix === 'quote') {
308
+ return parseQuote(body, template, params);
309
+ }
310
+ // Contents atom (ADR-194): binds a container; contents read at realize time.
311
+ if (prefix === 'contents') {
312
+ return parseContents(body, template, params);
313
+ }
314
+ // Slot combinator (ADR-195): a contribution channel key + optional mode/conj.
315
+ if (prefix === 'slot') {
316
+ return parseSlot(body, template);
317
+ }
318
+ // Sentence (ADR-201) is emitted by message structure / Quote, not authored.
319
+ if (prefix === 'sentence') {
320
+ throw new PhraseParseError(inner, template, 'sentence is not an author-facing kind prefix — it is emitted by message structure / quote');
321
+ }
322
+ const kind = KIND_PREFIXES[prefix];
323
+ if (kind === undefined) {
324
+ throw new PhraseParseError(inner, template, `'${prefix}' is not a known kind prefix — legacy ':' chains are not supported`);
325
+ }
326
+ // Stub kinds reserve only their discriminant in ADR-192; their binding and
327
+ // fields are parsed by the follow-on ADR. Route to the bare kind for now.
328
+ return { kind };
329
+ }
330
+ const tokens = inner.trim().split(/\s+/).filter((t) => t.length > 0);
331
+ if (tokens.length === 0) {
332
+ throw new PhraseParseError(inner, template, 'empty placeholder');
333
+ }
334
+ const name = tokens.pop();
335
+ let articleType;
336
+ let capitalize = false;
337
+ for (const hint of tokens) {
338
+ if (hint in ARTICLE_HINTS) {
339
+ articleType = ARTICLE_HINTS[hint];
340
+ }
341
+ else if (hint === 'capitalize') {
342
+ capitalize = true;
343
+ }
344
+ else {
345
+ throw new PhraseParseError(hint, template, `'${hint}' is not a recognized hint`);
346
+ }
347
+ }
348
+ if (!(name in params)) {
349
+ throw new PhraseParseError(name, template, `param '${name}' is not bound`);
350
+ }
351
+ return bindNounPhrase(params[name], articleType, capitalize);
352
+ }
353
+ /**
354
+ * Parse a template into a phrase tree.
355
+ *
356
+ * @param template author template, e.g. "You take {the item}."
357
+ * @param params param/producer bindings keyed by placeholder name
358
+ * @returns the parsed phrase (a `Sequence` when the template mixes literal text
359
+ * and placeholders; the bare phrase when it is a single placeholder)
360
+ * @throws PhraseParseError on a legacy `:`-chain, unknown kind-prefix, unknown
361
+ * hint, or unbound param — synchronously, at parse time (AC-8, AC-11)
362
+ */
363
+ function parsePhraseTemplate(template, params = {}) {
364
+ const parts = [];
365
+ const placeholder = /\{([^}]*)\}/g;
366
+ let lastIndex = 0;
367
+ let match;
368
+ while ((match = placeholder.exec(template)) !== null) {
369
+ if (match.index > lastIndex) {
370
+ parts.push({ kind: 'literal', text: template.slice(lastIndex, match.index) });
371
+ }
372
+ parts.push(parsePlaceholder(match[1], template, params));
373
+ lastIndex = match.index + match[0].length;
374
+ }
375
+ if (lastIndex < template.length) {
376
+ parts.push({ kind: 'literal', text: template.slice(lastIndex) });
377
+ }
378
+ if (parts.length === 0)
379
+ return { kind: 'literal', text: '' };
380
+ if (parts.length === 1)
381
+ return parts[0];
382
+ return { kind: 'seq', parts };
383
+ }
384
+ //# sourceMappingURL=parse-phrase-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-phrase-template.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/parser/parse-phrase-template.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/perspective/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,yBAAyB,EACzB,aAAa,EACb,8BAA8B,GAC/B,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/perspective/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,yBAAyB,EACzB,aAAa,EACb,8BAA8B,GAC/B,MAAM,wBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/perspective/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+DAQgC;AAN9B,gHAAA,QAAQ,OAAA;AAGR,iIAAA,yBAAyB,OAAA;AACzB,qHAAA,aAAa,OAAA;AACb,sIAAA,8BAA8B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/perspective/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+DAQgC;AAN9B,gHAAA,QAAQ,OAAA;AAGR,iIAAA,yBAAyB,OAAA;AACzB,qHAAA,aAAa,OAAA;AACb,sIAAA,8BAA8B,OAAA"}
@@ -98,5 +98,5 @@ export declare function conjugateVerb(verb: string, context: NarrativeContext):
98
98
  * @param context Narrative context
99
99
  * @returns Message with resolved placeholders
100
100
  */
101
- export declare function resolvePerspectivePlaceholders(message: string, context?: NarrativeContext): string;
101
+ export declare function resolvePerspectivePlaceholders(message: string, context?: NarrativeContext, params?: Record<string, unknown>): string;
102
102
  //# sourceMappingURL=placeholder-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"placeholder-resolver.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/perspective/placeholder-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,QAAQ,EAAE,UAAU,GAAG,QAAQ,CAAC;CACjC;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;CAaX,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,gBAEvC,CAAC;AA0GF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA4B7E;AA0BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAA4C,GACpD,MAAM,CAwER"}
1
+ {"version":3,"file":"placeholder-resolver.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/perspective/placeholder-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,QAAQ,EAAE,UAAU,GAAG,QAAQ,CAAC;CACjC;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;CAaX,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,gBAEvC,CAAC;AA0GF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA4B7E;AA0BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAA4C,EACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAoFR"}
@@ -203,7 +203,7 @@ function addThirdPersonS(verb) {
203
203
  * @param context Narrative context
204
204
  * @returns Message with resolved placeholders
205
205
  */
206
- function resolvePerspectivePlaceholders(message, context = exports.DEFAULT_NARRATIVE_CONTEXT) {
206
+ function resolvePerspectivePlaceholders(message, context = exports.DEFAULT_NARRATIVE_CONTEXT, params) {
207
207
  // Subject pronoun
208
208
  message = message.replace(/\{You\}/g, getSubjectPronoun(context));
209
209
  message = message.replace(/\{you\}/g, getSubjectPronoun(context).toLowerCase());
@@ -233,6 +233,17 @@ function resolvePerspectivePlaceholders(message, context = exports.DEFAULT_NARRA
233
233
  if (nonVerbPlaceholders.has(lowerVerb)) {
234
234
  return match; // Leave unchanged for regular param substitution
235
235
  }
236
+ // Params-aware discrimination (ADR-192 phrase path): a bare {word} that is a
237
+ // bound param is left for the parser; anything else bare is a perspective
238
+ // verb to conjugate. This replaces the fragile verb allowlist when params
239
+ // are known, so story/action verbs need no central registration.
240
+ if (params) {
241
+ if (verb in params || lowerVerb in params) {
242
+ return match; // a bound param — the parser realizes it
243
+ }
244
+ const conjugated = conjugateVerb(verb, context);
245
+ return verb[0] === verb[0].toUpperCase() ? capitalize(conjugated) : conjugated;
246
+ }
236
247
  // Check if it looks like a verb (common patterns)
237
248
  // Verbs we want to conjugate: take, open, close, lift, see, hear, etc.
238
249
  const verbPatterns = [
@@ -1 +1 @@
1
- {"version":3,"file":"placeholder-resolver.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/perspective/placeholder-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"placeholder-resolver.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/lang-en-us/src/perspective/placeholder-resolver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pluralize.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v1/packages/lang-en-us/src/pluralize.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B9C"}
1
+ {"version":3,"file":"pluralize.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/lang-en-us/src/pluralize.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B9C"}
package/pluralize.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pluralize.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v1/packages/lang-en-us/src/pluralize.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,wEAAwE;;AAWxE,8BA4BC;AArCD,wCAAgD;AAEhD;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,4EAA4E;IAC5E,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,wBAAgB,EAAE,CAAC;QAClD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;gBAAE,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxF,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACjE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACnC,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAE1D,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"pluralize.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/lang-en-us/src/pluralize.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,wEAAwE;;AAWxE,8BA4BC;AArCD,wCAAgD;AAEhD;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,4EAA4E;IAC5E,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,wBAAgB,EAAE,CAAC;QAClD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;gBAAE,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxF,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACjE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACnC,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAE1D,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC"}
@@ -31,17 +31,17 @@
31
31
  * @see ADR-172 — Spatial Sound Propagation §Audibility tier, §Channel routing
32
32
  */
33
33
  export declare const soundMessages: {
34
- readonly 'sound.heard.default.full': "{You} {hear} {kind}.";
35
- readonly 'sound.heard.default.muffled': "{You} {hear} a muffled {kind}.";
36
- readonly 'sound.heard.default.fragments': "{You} {catch} broken {kind}.";
34
+ readonly 'sound.heard.default.full': "{You} {hear} {verbatim:kind}.";
35
+ readonly 'sound.heard.default.muffled': "{You} {hear} a muffled {verbatim:kind}.";
36
+ readonly 'sound.heard.default.fragments': "{You} {catch} broken {verbatim:kind}.";
37
37
  readonly 'sound.heard.default.presence-only': "{You} {hear} something distant.";
38
- readonly 'sound.heard.speech.full': "{You} {hear}: \"{content}\"";
39
- readonly 'sound.heard.speech.muffled': "{You} {catch} a muffled voice: \"{content}\"";
38
+ readonly 'sound.heard.speech.full': "{You} {hear}: \"{verbatim:content}\"";
39
+ readonly 'sound.heard.speech.muffled': "{You} {catch} a muffled voice: \"{verbatim:content}\"";
40
40
  readonly 'sound.heard.speech.fragments': "{You} {catch} fragments of speech.";
41
41
  readonly 'sound.heard.speech.presence-only': "{You} {hear} voices nearby.";
42
- readonly 'sound.heard.ambient.full': "{You} {hear} {kind}.";
43
- readonly 'sound.heard.ambient.muffled': "{You} {hear} a muffled {kind}.";
44
- readonly 'sound.heard.ambient.fragments': "{You} {catch} the faint sound of {kind}.";
42
+ readonly 'sound.heard.ambient.full': "{You} {hear} {verbatim:kind}.";
43
+ readonly 'sound.heard.ambient.muffled': "{You} {hear} a muffled {verbatim:kind}.";
44
+ readonly 'sound.heard.ambient.fragments': "{You} {catch} the faint sound of {verbatim:kind}.";
45
45
  readonly 'sound.heard.ambient.presence-only': "{You} {hear} something at the edge of hearing.";
46
46
  };
47
47
  export type SoundMessageId = keyof typeof soundMessages;
@@ -1 +1 @@
1
- {"version":3,"file":"sound-messages.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v1/packages/lang-en-us/src/sound-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;CA2BhB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,aAAa,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,eAAe,CAAC;AAE1F;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAE7E"}
1
+ {"version":3,"file":"sound-messages.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/lang-en-us/src/sound-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;CA2BhB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,aAAa,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,eAAe,CAAC;AAE1F;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAE7E"}
package/sound-messages.js CHANGED
@@ -39,23 +39,23 @@ exports.soundMessages = {
39
39
  // ────────────────────────────────────────────────────────────────────
40
40
  // Default fallbacks — used when no kind-specific entry exists
41
41
  // ────────────────────────────────────────────────────────────────────
42
- 'sound.heard.default.full': '{You} {hear} {kind}.',
43
- 'sound.heard.default.muffled': '{You} {hear} a muffled {kind}.',
44
- 'sound.heard.default.fragments': '{You} {catch} broken {kind}.',
42
+ 'sound.heard.default.full': '{You} {hear} {verbatim:kind}.',
43
+ 'sound.heard.default.muffled': '{You} {hear} a muffled {verbatim:kind}.',
44
+ 'sound.heard.default.fragments': '{You} {catch} broken {verbatim:kind}.',
45
45
  'sound.heard.default.presence-only': '{You} {hear} something distant.',
46
46
  // ────────────────────────────────────────────────────────────────────
47
47
  // Speech — content-bearing dialogue (NPCs, conversations)
48
48
  // ────────────────────────────────────────────────────────────────────
49
- 'sound.heard.speech.full': '{You} {hear}: "{content}"',
50
- 'sound.heard.speech.muffled': '{You} {catch} a muffled voice: "{content}"',
49
+ 'sound.heard.speech.full': '{You} {hear}: "{verbatim:content}"',
50
+ 'sound.heard.speech.muffled': '{You} {catch} a muffled voice: "{verbatim:content}"',
51
51
  'sound.heard.speech.fragments': '{You} {catch} fragments of speech.',
52
52
  'sound.heard.speech.presence-only': '{You} {hear} voices nearby.',
53
53
  // ────────────────────────────────────────────────────────────────────
54
54
  // Ambient — environmental sounds (footsteps, doors, mechanical)
55
55
  // ────────────────────────────────────────────────────────────────────
56
- 'sound.heard.ambient.full': '{You} {hear} {kind}.',
57
- 'sound.heard.ambient.muffled': '{You} {hear} a muffled {kind}.',
58
- 'sound.heard.ambient.fragments': '{You} {catch} the faint sound of {kind}.',
56
+ 'sound.heard.ambient.full': '{You} {hear} {verbatim:kind}.',
57
+ 'sound.heard.ambient.muffled': '{You} {hear} a muffled {verbatim:kind}.',
58
+ 'sound.heard.ambient.fragments': '{You} {catch} the faint sound of {verbatim:kind}.',
59
59
  'sound.heard.ambient.presence-only': '{You} {hear} something at the edge of hearing.',
60
60
  };
61
61
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sound-messages.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v1/packages/lang-en-us/src/sound-messages.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;AAgDH,wCAEC;AAOD,wDAEC;AAzDY,QAAA,aAAa,GAAG;IAC3B,uEAAuE;IACvE,+DAA+D;IAC/D,uEAAuE;IAEvE,0BAA0B,EAAE,sBAAsB;IAClD,6BAA6B,EAAE,gCAAgC;IAC/D,+BAA+B,EAAE,8BAA8B;IAC/D,mCAAmC,EAAE,iCAAiC;IAEtE,uEAAuE;IACvE,2DAA2D;IAC3D,uEAAuE;IAEvE,yBAAyB,EAAE,2BAA2B;IACtD,4BAA4B,EAAE,4CAA4C;IAC1E,8BAA8B,EAAE,oCAAoC;IACpE,kCAAkC,EAAE,6BAA6B;IAEjE,uEAAuE;IACvE,iEAAiE;IACjE,uEAAuE;IAEvE,0BAA0B,EAAE,sBAAsB;IAClD,6BAA6B,EAAE,gCAAgC;IAC/D,+BAA+B,EAAE,0CAA0C;IAC3E,mCAAmC,EAAE,gDAAgD;CAC7E,CAAC;AAUX;;;;;;;;GAQG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,IAA8B;IACzE,OAAO,eAAe,IAAI,IAAI,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CAAC,IAA8B;IACnE,OAAO,uBAAuB,IAAI,EAAE,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"sound-messages.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/lang-en-us/src/sound-messages.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;AAgDH,wCAEC;AAOD,wDAEC;AAzDY,QAAA,aAAa,GAAG;IAC3B,uEAAuE;IACvE,+DAA+D;IAC/D,uEAAuE;IAEvE,0BAA0B,EAAE,+BAA+B;IAC3D,6BAA6B,EAAE,yCAAyC;IACxE,+BAA+B,EAAE,uCAAuC;IACxE,mCAAmC,EAAE,iCAAiC;IAEtE,uEAAuE;IACvE,2DAA2D;IAC3D,uEAAuE;IAEvE,yBAAyB,EAAE,oCAAoC;IAC/D,4BAA4B,EAAE,qDAAqD;IACnF,8BAA8B,EAAE,oCAAoC;IACpE,kCAAkC,EAAE,6BAA6B;IAEjE,uEAAuE;IACvE,iEAAiE;IACjE,uEAAuE;IAEvE,0BAA0B,EAAE,+BAA+B;IAC3D,6BAA6B,EAAE,yCAAyC;IACxE,+BAA+B,EAAE,mDAAmD;IACpF,mCAAmC,EAAE,gDAAgD;CAC7E,CAAC;AAUX;;;;;;;;GAQG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,IAA8B;IACzE,OAAO,eAAe,IAAI,IAAI,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CAAC,IAA8B;IACnE,OAAO,uBAAuB,IAAI,EAAE,CAAC;AACvC,CAAC"}