@sharpee/text-service 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.
Files changed (62) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cli-renderer.d.ts +43 -0
  3. package/dist/cli-renderer.d.ts.map +1 -0
  4. package/dist/cli-renderer.js +208 -0
  5. package/dist/cli-renderer.js.map +1 -0
  6. package/dist/decoration-parser.d.ts +31 -0
  7. package/dist/decoration-parser.d.ts.map +1 -0
  8. package/dist/decoration-parser.js +176 -0
  9. package/dist/decoration-parser.js.map +1 -0
  10. package/dist/handlers/action.d.ts +19 -0
  11. package/dist/handlers/action.d.ts.map +1 -0
  12. package/dist/handlers/action.js +68 -0
  13. package/dist/handlers/action.js.map +1 -0
  14. package/dist/handlers/game.d.ts +29 -0
  15. package/dist/handlers/game.d.ts.map +1 -0
  16. package/dist/handlers/game.js +56 -0
  17. package/dist/handlers/game.js.map +1 -0
  18. package/dist/handlers/generic.d.ts +23 -0
  19. package/dist/handlers/generic.d.ts.map +1 -0
  20. package/dist/handlers/generic.js +70 -0
  21. package/dist/handlers/generic.js.map +1 -0
  22. package/dist/handlers/index.d.ts +12 -0
  23. package/dist/handlers/index.d.ts.map +1 -0
  24. package/dist/handlers/index.js +22 -0
  25. package/dist/handlers/index.js.map +1 -0
  26. package/dist/handlers/revealed.d.ts +16 -0
  27. package/dist/handlers/revealed.d.ts.map +1 -0
  28. package/dist/handlers/revealed.js +50 -0
  29. package/dist/handlers/revealed.js.map +1 -0
  30. package/dist/handlers/room.d.ts +22 -0
  31. package/dist/handlers/room.d.ts.map +1 -0
  32. package/dist/handlers/room.js +70 -0
  33. package/dist/handlers/room.js.map +1 -0
  34. package/dist/handlers/types.d.ts +40 -0
  35. package/dist/handlers/types.d.ts.map +1 -0
  36. package/dist/handlers/types.js +8 -0
  37. package/dist/handlers/types.js.map +1 -0
  38. package/dist/index.d.ts +31 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +58 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/stages/assemble.d.ts +18 -0
  43. package/dist/stages/assemble.d.ts.map +1 -0
  44. package/dist/stages/assemble.js +38 -0
  45. package/dist/stages/assemble.js.map +1 -0
  46. package/dist/stages/filter.d.ts +14 -0
  47. package/dist/stages/filter.d.ts.map +1 -0
  48. package/dist/stages/filter.js +28 -0
  49. package/dist/stages/filter.js.map +1 -0
  50. package/dist/stages/index.d.ts +9 -0
  51. package/dist/stages/index.d.ts.map +1 -0
  52. package/dist/stages/index.js +17 -0
  53. package/dist/stages/index.js.map +1 -0
  54. package/dist/stages/sort.d.ts +36 -0
  55. package/dist/stages/sort.d.ts.map +1 -0
  56. package/dist/stages/sort.js +84 -0
  57. package/dist/stages/sort.js.map +1 -0
  58. package/dist/text-service.d.ts +85 -0
  59. package/dist/text-service.d.ts.map +1 -0
  60. package/dist/text-service.js +233 -0
  61. package/dist/text-service.js.map +1 -0
  62. package/package.json +64 -0
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * Game Event Handler
4
+ *
5
+ * Handles game lifecycle events like game.started to produce
6
+ * text output (e.g., opening banner).
7
+ *
8
+ * @see ADR-096 Text Service Architecture
9
+ * @see ADR-097 IGameEvent Deprecation (now uses ISemanticEvent with typed data)
10
+ * @see ISSUE-028 Opening banner hardcoded in browser-entry.ts
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.handleGameStarted = handleGameStarted;
14
+ const assemble_js_1 = require("../stages/assemble.js");
15
+ /**
16
+ * Handle game.started event to produce the opening banner.
17
+ *
18
+ * The event data (GameStartedData) contains:
19
+ * - story.title: Game title
20
+ * - story.author: Author name(s)
21
+ * - story.version: Game version
22
+ * - story.id: Story identifier
23
+ * - gameState: 'running'
24
+ * - session: { startTime, turns, moves }
25
+ *
26
+ * The language provider supplies the banner template via 'game.started.banner'.
27
+ * Stories can customize by overriding this message in extendLanguage().
28
+ */
29
+ function handleGameStarted(event, context) {
30
+ // Event data is now directly in `data` field (ISemanticEvent standard)
31
+ const data = event.data;
32
+ const story = data?.story;
33
+ if (!story) {
34
+ return [];
35
+ }
36
+ // Build params for template substitution
37
+ // engineVersion and clientVersion come from event data (set by engine from world's versionInfo)
38
+ const engineVersion = data?.engineVersion || 'unknown';
39
+ const clientVersion = data?.clientVersion || 'N/A';
40
+ const params = {
41
+ title: story.title || 'Unknown',
42
+ author: story.author || 'Unknown',
43
+ version: story.version || '1.0.0',
44
+ id: story.id || 'unknown',
45
+ engineVersion: engineVersion,
46
+ clientVersion: clientVersion,
47
+ };
48
+ // Look up banner message via language provider
49
+ const message = context.languageProvider?.getMessage('game.started.banner', params);
50
+ // If no template registered or returned the ID (not found), skip output
51
+ if (!message || message === 'game.started.banner') {
52
+ return [];
53
+ }
54
+ return [(0, assemble_js_1.createBlock)('game.banner', message)];
55
+ }
56
+ //# sourceMappingURL=game.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.js","sourceRoot":"","sources":["../../src/handlers/game.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAqBH,8CAmCC;AApDD,uDAAoD;AAGpD;;;;;;;;;;;;;GAaG;AACH,SAAgB,iBAAiB,CAC/B,KAAqB,EACrB,OAAuB;IAEvB,uEAAuE;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAgC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC;IAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,yCAAyC;IACzC,gGAAgG;IAChG,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,SAAS,CAAC;IACvD,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,KAAK,CAAC;IAEnD,MAAM,MAAM,GAA2B;QACrC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS;QAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO;QACjC,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,SAAS;QACzB,aAAa,EAAE,aAAa;QAC5B,aAAa,EAAE,aAAa;KAC7B,CAAC;IAEF,+CAA+C;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAEpF,wEAAwE;IACxE,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,qBAAqB,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,IAAA,yBAAW,EAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Generic event handlers
3
+ *
4
+ * Handles: game.message, and fallback for unknown events
5
+ *
6
+ * @see ADR-096 Text Service Architecture
7
+ */
8
+ import type { ITextBlock } from '@sharpee/text-blocks';
9
+ import type { ISemanticEvent } from '@sharpee/core';
10
+ import type { HandlerContext } from './types.js';
11
+ /**
12
+ * Handle game.message events
13
+ */
14
+ export declare function handleGameMessage(event: ISemanticEvent, context: HandlerContext): ITextBlock[];
15
+ /**
16
+ * Handle generic/unknown events using event.type as template key
17
+ *
18
+ * Many events (especially story-defined ones) follow a simple pattern:
19
+ * - Event type is the template key
20
+ * - Event data is the template params
21
+ */
22
+ export declare function handleGenericEvent(event: ISemanticEvent, context: HandlerContext): ITextBlock[];
23
+ //# sourceMappingURL=generic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/handlers/generic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AAanE;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,cAAc,GACtB,UAAU,EAAE,CAiBd;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,cAAc,GACtB,UAAU,EAAE,CAoCd"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Generic event handlers
4
+ *
5
+ * Handles: game.message, and fallback for unknown events
6
+ *
7
+ * @see ADR-096 Text Service Architecture
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.handleGameMessage = handleGameMessage;
11
+ exports.handleGenericEvent = handleGenericEvent;
12
+ const text_blocks_1 = require("@sharpee/text-blocks");
13
+ const assemble_js_1 = require("../stages/assemble.js");
14
+ /**
15
+ * Handle game.message events
16
+ */
17
+ function handleGameMessage(event, context) {
18
+ const data = event.data;
19
+ // Try language provider
20
+ if (data.messageId && context.languageProvider) {
21
+ const message = context.languageProvider.getMessage(data.messageId, data.params);
22
+ if (message && message !== data.messageId) {
23
+ return [(0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.GAME_MESSAGE, message)];
24
+ }
25
+ }
26
+ const text = data.text ?? data.message;
27
+ if (text) {
28
+ return [(0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.GAME_MESSAGE, text)];
29
+ }
30
+ return [];
31
+ }
32
+ /**
33
+ * Handle generic/unknown events using event.type as template key
34
+ *
35
+ * Many events (especially story-defined ones) follow a simple pattern:
36
+ * - Event type is the template key
37
+ * - Event data is the template params
38
+ */
39
+ function handleGenericEvent(event, context) {
40
+ const data = event.data;
41
+ // Guard against undefined data
42
+ if (!data) {
43
+ return [];
44
+ }
45
+ // First check for explicit message/text in event data
46
+ if (data.message || data.text) {
47
+ const text = data.message ?? data.text ?? '';
48
+ if (text) {
49
+ return [(0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.ACTION_RESULT, text)];
50
+ }
51
+ }
52
+ // Try language provider with event type as template key
53
+ if (context.languageProvider) {
54
+ const message = context.languageProvider.getMessage(event.type, data);
55
+ // If we got a real message (not just the key echoed back)
56
+ if (message && message !== event.type) {
57
+ return [(0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.ACTION_RESULT, message)];
58
+ }
59
+ // Try with explicit messageId if present
60
+ if (data.messageId) {
61
+ const msgFromId = context.languageProvider.getMessage(data.messageId, data);
62
+ if (msgFromId && msgFromId !== data.messageId) {
63
+ return [(0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.ACTION_RESULT, msgFromId)];
64
+ }
65
+ }
66
+ }
67
+ // No template found - skip this event (it's probably a state change)
68
+ return [];
69
+ }
70
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../src/handlers/generic.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAqBH,8CAoBC;AASD,gDAuCC;AAtFD,sDAAkD;AAGlD,uDAAoD;AAYpD;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,KAAqB,EACrB,OAAuB;IAEvB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAuB,CAAC;IAE3C,wBAAwB;IACxB,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACjF,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;IACvC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,KAAqB,EACrB,OAAuB;IAEvB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAwB,CAAC;IAE5C,+BAA+B;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,sDAAsD;IACtD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7C,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEtE,0DAA0D;QAC1D,IAAI,OAAO,IAAI,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,OAAO,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5E,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC9C,OAAO,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Event handlers for TextService
3
+ *
4
+ * @see ADR-096 Text Service Architecture
5
+ */
6
+ export type { EventHandler, HandlerContext, ChainableEventData, GenericEventData } from './types.js';
7
+ export { handleRoomDescription } from './room.js';
8
+ export { handleActionSuccess, handleActionFailure } from './action.js';
9
+ export { handleRevealed } from './revealed.js';
10
+ export { handleGameMessage, handleGenericEvent } from './generic.js';
11
+ export { handleGameStarted } from './game.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGrG,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * Event handlers for TextService
4
+ *
5
+ * @see ADR-096 Text Service Architecture
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.handleGameStarted = exports.handleGenericEvent = exports.handleGameMessage = exports.handleRevealed = exports.handleActionFailure = exports.handleActionSuccess = exports.handleRoomDescription = void 0;
9
+ // Handlers
10
+ var room_js_1 = require("./room.js");
11
+ Object.defineProperty(exports, "handleRoomDescription", { enumerable: true, get: function () { return room_js_1.handleRoomDescription; } });
12
+ var action_js_1 = require("./action.js");
13
+ Object.defineProperty(exports, "handleActionSuccess", { enumerable: true, get: function () { return action_js_1.handleActionSuccess; } });
14
+ Object.defineProperty(exports, "handleActionFailure", { enumerable: true, get: function () { return action_js_1.handleActionFailure; } });
15
+ var revealed_js_1 = require("./revealed.js");
16
+ Object.defineProperty(exports, "handleRevealed", { enumerable: true, get: function () { return revealed_js_1.handleRevealed; } });
17
+ var generic_js_1 = require("./generic.js");
18
+ Object.defineProperty(exports, "handleGameMessage", { enumerable: true, get: function () { return generic_js_1.handleGameMessage; } });
19
+ Object.defineProperty(exports, "handleGenericEvent", { enumerable: true, get: function () { return generic_js_1.handleGenericEvent; } });
20
+ var game_js_1 = require("./game.js");
21
+ Object.defineProperty(exports, "handleGameStarted", { enumerable: true, get: function () { return game_js_1.handleGameStarted; } });
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAKH,WAAW;AACX,qCAAkD;AAAzC,gHAAA,qBAAqB,OAAA;AAC9B,yCAAuE;AAA9D,gHAAA,mBAAmB,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AACjD,6CAA+C;AAAtC,6GAAA,cAAc,OAAA;AACvB,2CAAqE;AAA5D,+GAAA,iBAAiB,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAC9C,qCAA8C;AAArC,4GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Revealed event handler
3
+ *
4
+ * Handles: if.event.revealed - when items become visible in a container
5
+ *
6
+ * @see ADR-094 Event Chaining
7
+ * @see ADR-096 Text Service Architecture
8
+ */
9
+ import type { ITextBlock } from '@sharpee/text-blocks';
10
+ import type { ISemanticEvent } from '@sharpee/core';
11
+ import type { HandlerContext } from './types.js';
12
+ /**
13
+ * Handle if.event.revealed events
14
+ */
15
+ export declare function handleRevealed(event: ISemanticEvent, context: HandlerContext): ITextBlock[];
16
+ //# sourceMappingURL=revealed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revealed.d.ts","sourceRoot":"","sources":["../../src/handlers/revealed.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,YAAY,CAAC;AAkBrE;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,cAAc,GACtB,UAAU,EAAE,CAsCd"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Revealed event handler
4
+ *
5
+ * Handles: if.event.revealed - when items become visible in a container
6
+ *
7
+ * @see ADR-094 Event Chaining
8
+ * @see ADR-096 Text Service Architecture
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.handleRevealed = handleRevealed;
12
+ const text_blocks_1 = require("@sharpee/text-blocks");
13
+ const assemble_js_1 = require("../stages/assemble.js");
14
+ /**
15
+ * Handle if.event.revealed events
16
+ */
17
+ function handleRevealed(event, context) {
18
+ const data = event.data;
19
+ // Check for direct message first (simple case)
20
+ if (data.message || data.text) {
21
+ const text = data.message ?? data.text ?? '';
22
+ if (text) {
23
+ return [(0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.ACTION_RESULT, text)];
24
+ }
25
+ }
26
+ // Try language provider with event type as template key
27
+ if (context.languageProvider) {
28
+ const message = context.languageProvider.getMessage(event.type, {
29
+ containerId: data.containerId,
30
+ containerName: data.containerName,
31
+ container: data.containerName,
32
+ items: data.items,
33
+ });
34
+ // If we got a real message (not just the key echoed back)
35
+ if (message && message !== event.type) {
36
+ return [(0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.ACTION_RESULT, message)];
37
+ }
38
+ }
39
+ // Fallback: Build a basic revealed message
40
+ if (data.items && data.items.length > 0) {
41
+ const itemNames = data.items
42
+ .map((item) => item.name ?? item.messageId ?? item.entityId)
43
+ .join(', ');
44
+ const container = data.containerName ?? 'it';
45
+ const text = `Inside the ${container} you see ${itemNames}.`;
46
+ return [(0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.ACTION_RESULT, text)];
47
+ }
48
+ return [];
49
+ }
50
+ //# sourceMappingURL=revealed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revealed.js","sourceRoot":"","sources":["../../src/handlers/revealed.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AA0BH,wCAyCC;AAhED,sDAAkD;AAGlD,uDAAoD;AAiBpD;;GAEG;AACH,SAAgB,cAAc,CAC5B,KAAqB,EACrB,OAAuB;IAEvB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAyB,CAAC;IAE7C,+CAA+C;IAC/C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7C,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE;YAC9D,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS,EAAE,IAAI,CAAC,aAAa;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,0DAA0D;QAC1D,IAAI,OAAO,IAAI,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,OAAO,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;aACzB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC;aAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;QAC7C,MAAM,IAAI,GAAG,cAAc,SAAS,YAAY,SAAS,GAAG,CAAC;QAC7D,OAAO,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Room description event handler
3
+ *
4
+ * Handles: if.event.room.description (standard format)
5
+ * Also handles: if.event.room_description (legacy/alternate)
6
+ *
7
+ * Note: room.description uses a deliberate dot separator, unlike most
8
+ * events which use underscores for compound words (e.g., actor_moved).
9
+ *
10
+ * @see ADR-096 Text Service Architecture
11
+ */
12
+ import type { ITextBlock } from '@sharpee/text-blocks';
13
+ import type { ISemanticEvent } from '@sharpee/core';
14
+ import type { HandlerContext } from './types.js';
15
+ /**
16
+ * Handle room description events
17
+ *
18
+ * Supports ADR-107 dual-mode: resolves message IDs through language provider
19
+ * when present, otherwise uses literal text directly.
20
+ */
21
+ export declare function handleRoomDescription(event: ISemanticEvent, context: HandlerContext): ITextBlock[];
22
+ //# sourceMappingURL=room.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room.d.ts","sourceRoot":"","sources":["../../src/handlers/room.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4BjD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,cAAc,GACtB,UAAU,EAAE,CAuDd"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Room description event handler
4
+ *
5
+ * Handles: if.event.room.description (standard format)
6
+ * Also handles: if.event.room_description (legacy/alternate)
7
+ *
8
+ * Note: room.description uses a deliberate dot separator, unlike most
9
+ * events which use underscores for compound words (e.g., actor_moved).
10
+ *
11
+ * @see ADR-096 Text Service Architecture
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.handleRoomDescription = handleRoomDescription;
15
+ const text_blocks_1 = require("@sharpee/text-blocks");
16
+ const assemble_js_1 = require("../stages/assemble.js");
17
+ /**
18
+ * Handle room description events
19
+ *
20
+ * Supports ADR-107 dual-mode: resolves message IDs through language provider
21
+ * when present, otherwise uses literal text directly.
22
+ */
23
+ function handleRoomDescription(event, context) {
24
+ const data = event.data;
25
+ const blocks = [];
26
+ // Room name (if verbose)
27
+ if (data.verbose) {
28
+ let name;
29
+ // ADR-107: Check for message ID first (takes precedence)
30
+ const nameId = data.roomNameId ?? data.room?.nameId;
31
+ if (nameId && context.languageProvider) {
32
+ const resolved = context.languageProvider.getMessage(nameId, {});
33
+ if (resolved && resolved !== nameId) {
34
+ name = resolved;
35
+ }
36
+ }
37
+ // Fall back to literal text
38
+ if (!name) {
39
+ name = data.room?.name ?? data.roomName;
40
+ }
41
+ if (name) {
42
+ const resolvedName = (0, assemble_js_1.extractValue)(name);
43
+ if (resolvedName) {
44
+ blocks.push((0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.ROOM_NAME, resolvedName));
45
+ }
46
+ }
47
+ }
48
+ // Room description
49
+ let description;
50
+ // ADR-107: Check for message ID first (takes precedence)
51
+ const descriptionId = data.roomDescriptionId ?? data.room?.descriptionId;
52
+ if (descriptionId && context.languageProvider) {
53
+ const resolved = context.languageProvider.getMessage(descriptionId, {});
54
+ if (resolved && resolved !== descriptionId) {
55
+ description = resolved;
56
+ }
57
+ }
58
+ // Fall back to literal text
59
+ if (!description) {
60
+ description = data.room?.description ?? data.roomDescription;
61
+ }
62
+ if (description) {
63
+ const resolvedDesc = (0, assemble_js_1.extractValue)(description);
64
+ if (resolvedDesc) {
65
+ blocks.push((0, assemble_js_1.createBlock)(text_blocks_1.BLOCK_KEYS.ROOM_DESCRIPTION, resolvedDesc));
66
+ }
67
+ }
68
+ return blocks;
69
+ }
70
+ //# sourceMappingURL=room.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room.js","sourceRoot":"","sources":["../../src/handlers/room.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAuCH,sDA0DC;AA9FD,sDAAkD;AAGlD,uDAAkE;AA2BlE;;;;;GAKG;AACH,SAAgB,qBAAqB,CACnC,KAAqB,EACrB,OAAuB;IAEvB,MAAM,IAAI,GAAG,KAAK,CAAC,IAA2B,CAAC;IAC/C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,yBAAyB;IACzB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,IAAwB,CAAC;QAE7B,yDAAyD;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACpD,IAAI,MAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjE,IAAI,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACpC,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC1C,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,YAAY,GAAG,IAAA,0BAAY,EAAC,IAAI,CAAC,CAAC;YACxC,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,WAA+B,CAAC;IAEpC,yDAAyD;IACzD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;IACzE,IAAI,aAAa,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,QAAQ,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC3C,WAAW,GAAG,QAAQ,CAAC;QACzB,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC;IAC/D,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,YAAY,GAAG,IAAA,0BAAY,EAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,IAAA,yBAAW,EAAC,wBAAU,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Handler types for TextService
3
+ *
4
+ * @see ADR-096 Text Service Architecture
5
+ */
6
+ import type { ITextBlock } from '@sharpee/text-blocks';
7
+ import type { LanguageProvider } from '@sharpee/if-domain';
8
+ import type { ISemanticEvent } from '@sharpee/core';
9
+ /**
10
+ * Context passed to event handlers
11
+ */
12
+ export interface HandlerContext {
13
+ /** Language provider for template resolution */
14
+ languageProvider?: LanguageProvider;
15
+ }
16
+ /**
17
+ * Event handler function signature
18
+ *
19
+ * Handlers receive an event and context, return zero or more TextBlocks.
20
+ */
21
+ export type EventHandler = (event: ISemanticEvent, context: HandlerContext) => ITextBlock[];
22
+ /**
23
+ * Common event data with chain metadata (ADR-094)
24
+ */
25
+ export interface ChainableEventData {
26
+ _transactionId?: string;
27
+ _chainDepth?: number;
28
+ _chainedFrom?: string;
29
+ _chainSourceId?: string;
30
+ }
31
+ /**
32
+ * Generic event data with message fields
33
+ */
34
+ export interface GenericEventData extends ChainableEventData {
35
+ message?: string;
36
+ messageId?: string;
37
+ text?: string;
38
+ [key: string]: unknown;
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/handlers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,cAAc,KACpB,UAAU,EAAE,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * Handler types for TextService
4
+ *
5
+ * @see ADR-096 Text Service Architecture
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/handlers/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @sharpee/text-service
3
+ *
4
+ * Single text service for Sharpee that:
5
+ * - Receives semantic events
6
+ * - Resolves templates via LanguageProvider
7
+ * - Parses decorations into structured IDecoration tree
8
+ * - Outputs ITextBlock[]
9
+ *
10
+ * Includes CLI renderer for testing and CLI clients.
11
+ *
12
+ * Inspired by FyreVM channel I/O (2009).
13
+ *
14
+ * @see ADR-096 Text Service Architecture
15
+ */
16
+ export type { ITextService } from './text-service.js';
17
+ export { TextService, createTextService } from './text-service.js';
18
+ export { filterEvents } from './stages/filter.js';
19
+ export { sortEventsForProse, getChainMetadata } from './stages/sort.js';
20
+ export { createBlock, extractValue } from './stages/assemble.js';
21
+ export type { EventHandler, HandlerContext, ChainableEventData, GenericEventData } from './handlers/types.js';
22
+ export { handleRoomDescription } from './handlers/room.js';
23
+ export { handleActionSuccess, handleActionFailure } from './handlers/action.js';
24
+ export { handleRevealed } from './handlers/revealed.js';
25
+ export { handleGameMessage, handleGenericEvent } from './handlers/generic.js';
26
+ export { parseDecorations, hasDecorations } from './decoration-parser.js';
27
+ export type { CLIRenderOptions } from './cli-renderer.js';
28
+ export { renderToString, renderStatusLine } from './cli-renderer.js';
29
+ export type { ITextBlock, IDecoration, TextContent } from '@sharpee/text-blocks';
30
+ export { isDecoration, isTextBlock, isStatusBlock, isRoomBlock, isActionBlock, extractPlainText, BLOCK_KEYS, BLOCK_KEY_PREFIXES, CORE_DECORATION_TYPES, } from '@sharpee/text-blocks';
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGjE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9G,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG9E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG1E,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * @sharpee/text-service
4
+ *
5
+ * Single text service for Sharpee that:
6
+ * - Receives semantic events
7
+ * - Resolves templates via LanguageProvider
8
+ * - Parses decorations into structured IDecoration tree
9
+ * - Outputs ITextBlock[]
10
+ *
11
+ * Includes CLI renderer for testing and CLI clients.
12
+ *
13
+ * Inspired by FyreVM channel I/O (2009).
14
+ *
15
+ * @see ADR-096 Text Service Architecture
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.CORE_DECORATION_TYPES = exports.BLOCK_KEY_PREFIXES = exports.BLOCK_KEYS = exports.extractPlainText = exports.isActionBlock = exports.isRoomBlock = exports.isStatusBlock = exports.isTextBlock = exports.isDecoration = exports.renderStatusLine = exports.renderToString = exports.hasDecorations = exports.parseDecorations = exports.handleGenericEvent = exports.handleGameMessage = exports.handleRevealed = exports.handleActionFailure = exports.handleActionSuccess = exports.handleRoomDescription = exports.extractValue = exports.createBlock = exports.getChainMetadata = exports.sortEventsForProse = exports.filterEvents = exports.createTextService = exports.TextService = void 0;
19
+ var text_service_js_1 = require("./text-service.js");
20
+ Object.defineProperty(exports, "TextService", { enumerable: true, get: function () { return text_service_js_1.TextService; } });
21
+ Object.defineProperty(exports, "createTextService", { enumerable: true, get: function () { return text_service_js_1.createTextService; } });
22
+ // Pipeline stages
23
+ var filter_js_1 = require("./stages/filter.js");
24
+ Object.defineProperty(exports, "filterEvents", { enumerable: true, get: function () { return filter_js_1.filterEvents; } });
25
+ var sort_js_1 = require("./stages/sort.js");
26
+ Object.defineProperty(exports, "sortEventsForProse", { enumerable: true, get: function () { return sort_js_1.sortEventsForProse; } });
27
+ Object.defineProperty(exports, "getChainMetadata", { enumerable: true, get: function () { return sort_js_1.getChainMetadata; } });
28
+ var assemble_js_1 = require("./stages/assemble.js");
29
+ Object.defineProperty(exports, "createBlock", { enumerable: true, get: function () { return assemble_js_1.createBlock; } });
30
+ Object.defineProperty(exports, "extractValue", { enumerable: true, get: function () { return assemble_js_1.extractValue; } });
31
+ var room_js_1 = require("./handlers/room.js");
32
+ Object.defineProperty(exports, "handleRoomDescription", { enumerable: true, get: function () { return room_js_1.handleRoomDescription; } });
33
+ var action_js_1 = require("./handlers/action.js");
34
+ Object.defineProperty(exports, "handleActionSuccess", { enumerable: true, get: function () { return action_js_1.handleActionSuccess; } });
35
+ Object.defineProperty(exports, "handleActionFailure", { enumerable: true, get: function () { return action_js_1.handleActionFailure; } });
36
+ var revealed_js_1 = require("./handlers/revealed.js");
37
+ Object.defineProperty(exports, "handleRevealed", { enumerable: true, get: function () { return revealed_js_1.handleRevealed; } });
38
+ var generic_js_1 = require("./handlers/generic.js");
39
+ Object.defineProperty(exports, "handleGameMessage", { enumerable: true, get: function () { return generic_js_1.handleGameMessage; } });
40
+ Object.defineProperty(exports, "handleGenericEvent", { enumerable: true, get: function () { return generic_js_1.handleGenericEvent; } });
41
+ // Decoration parser
42
+ var decoration_parser_js_1 = require("./decoration-parser.js");
43
+ Object.defineProperty(exports, "parseDecorations", { enumerable: true, get: function () { return decoration_parser_js_1.parseDecorations; } });
44
+ Object.defineProperty(exports, "hasDecorations", { enumerable: true, get: function () { return decoration_parser_js_1.hasDecorations; } });
45
+ var cli_renderer_js_1 = require("./cli-renderer.js");
46
+ Object.defineProperty(exports, "renderToString", { enumerable: true, get: function () { return cli_renderer_js_1.renderToString; } });
47
+ Object.defineProperty(exports, "renderStatusLine", { enumerable: true, get: function () { return cli_renderer_js_1.renderStatusLine; } });
48
+ var text_blocks_1 = require("@sharpee/text-blocks");
49
+ Object.defineProperty(exports, "isDecoration", { enumerable: true, get: function () { return text_blocks_1.isDecoration; } });
50
+ Object.defineProperty(exports, "isTextBlock", { enumerable: true, get: function () { return text_blocks_1.isTextBlock; } });
51
+ Object.defineProperty(exports, "isStatusBlock", { enumerable: true, get: function () { return text_blocks_1.isStatusBlock; } });
52
+ Object.defineProperty(exports, "isRoomBlock", { enumerable: true, get: function () { return text_blocks_1.isRoomBlock; } });
53
+ Object.defineProperty(exports, "isActionBlock", { enumerable: true, get: function () { return text_blocks_1.isActionBlock; } });
54
+ Object.defineProperty(exports, "extractPlainText", { enumerable: true, get: function () { return text_blocks_1.extractPlainText; } });
55
+ Object.defineProperty(exports, "BLOCK_KEYS", { enumerable: true, get: function () { return text_blocks_1.BLOCK_KEYS; } });
56
+ Object.defineProperty(exports, "BLOCK_KEY_PREFIXES", { enumerable: true, get: function () { return text_blocks_1.BLOCK_KEY_PREFIXES; } });
57
+ Object.defineProperty(exports, "CORE_DECORATION_TYPES", { enumerable: true, get: function () { return text_blocks_1.CORE_DECORATION_TYPES; } });
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAIH,qDAAmE;AAA1D,8GAAA,WAAW,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAEvC,kBAAkB;AAClB,gDAAkD;AAAzC,yGAAA,YAAY,OAAA;AACrB,4CAAwE;AAA/D,6GAAA,kBAAkB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAC7C,oDAAiE;AAAxD,0GAAA,WAAW,OAAA;AAAE,2GAAA,YAAY,OAAA;AAIlC,8CAA2D;AAAlD,gHAAA,qBAAqB,OAAA;AAC9B,kDAAgF;AAAvE,gHAAA,mBAAmB,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AACjD,sDAAwD;AAA/C,6GAAA,cAAc,OAAA;AACvB,oDAA8E;AAArE,+GAAA,iBAAiB,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAE9C,oBAAoB;AACpB,+DAA0E;AAAjE,wHAAA,gBAAgB,OAAA;AAAE,sHAAA,cAAc,OAAA;AAIzC,qDAAqE;AAA5D,iHAAA,cAAc,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAIzC,oDAU8B;AAT5B,2GAAA,YAAY,OAAA;AACZ,0GAAA,WAAW,OAAA;AACX,4GAAA,aAAa,OAAA;AACb,0GAAA,WAAW,OAAA;AACX,4GAAA,aAAa,OAAA;AACb,+GAAA,gBAAgB,OAAA;AAChB,yGAAA,UAAU,OAAA;AACV,iHAAA,kBAAkB,OAAA;AAClB,oHAAA,qBAAqB,OAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Block assembly stage
3
+ *
4
+ * Creates ITextBlock from resolved text, parsing decorations.
5
+ *
6
+ * @see ADR-091 Text Decorations
7
+ * @see ADR-096 Text Service Architecture
8
+ */
9
+ import type { ITextBlock } from '@sharpee/text-blocks';
10
+ /**
11
+ * Create a TextBlock, parsing decorations if present
12
+ */
13
+ export declare function createBlock(key: string, text: string): ITextBlock;
14
+ /**
15
+ * Extract value from provider function or direct value
16
+ */
17
+ export declare function extractValue(value: unknown): string | null;
18
+ //# sourceMappingURL=assemble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../src/stages/assemble.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,sBAAsB,CAAC;AAGpE;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAMjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAW1D"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * Block assembly stage
4
+ *
5
+ * Creates ITextBlock from resolved text, parsing decorations.
6
+ *
7
+ * @see ADR-091 Text Decorations
8
+ * @see ADR-096 Text Service Architecture
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.createBlock = createBlock;
12
+ exports.extractValue = extractValue;
13
+ const decoration_parser_js_1 = require("../decoration-parser.js");
14
+ /**
15
+ * Create a TextBlock, parsing decorations if present
16
+ */
17
+ function createBlock(key, text) {
18
+ const content = (0, decoration_parser_js_1.hasDecorations)(text)
19
+ ? (0, decoration_parser_js_1.parseDecorations)(text)
20
+ : [text];
21
+ return { key, content };
22
+ }
23
+ /**
24
+ * Extract value from provider function or direct value
25
+ */
26
+ function extractValue(value) {
27
+ if (typeof value === 'function') {
28
+ try {
29
+ const result = value();
30
+ return result ? String(result) : null;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ return value ? String(value) : null;
37
+ }
38
+ //# sourceMappingURL=assemble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../src/stages/assemble.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAQH,kCAMC;AAKD,oCAWC;AA3BD,kEAA2E;AAE3E;;GAEG;AACH,SAAgB,WAAW,CAAC,GAAW,EAAE,IAAY;IACnD,MAAM,OAAO,GAAkB,IAAA,qCAAc,EAAC,IAAI,CAAC;QACjD,CAAC,CAAC,IAAA,uCAAgB,EAAC,IAAI,CAAC;QACxB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEX,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Event filtering stage
3
+ *
4
+ * Filters out events that should not produce text output:
5
+ * - System events (system.*)
6
+ *
7
+ * @see ADR-096 Text Service Architecture
8
+ */
9
+ import type { ISemanticEvent } from '@sharpee/core';
10
+ /**
11
+ * Filter events that should produce text output
12
+ */
13
+ export declare function filterEvents(events: ISemanticEvent[]): ISemanticEvent[];
14
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/stages/filter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAcvE"}