opencode-flema-engram-sidebar 0.1.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 (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +472 -0
  3. package/dist/adapters/cloud.d.ts +18 -0
  4. package/dist/adapters/cloud.d.ts.map +1 -0
  5. package/dist/adapters/cloud.js +53 -0
  6. package/dist/adapters/cloud.js.map +1 -0
  7. package/dist/adapters/composite.d.ts +20 -0
  8. package/dist/adapters/composite.d.ts.map +1 -0
  9. package/dist/adapters/composite.js +83 -0
  10. package/dist/adapters/composite.js.map +1 -0
  11. package/dist/adapters/local.d.ts +15 -0
  12. package/dist/adapters/local.d.ts.map +1 -0
  13. package/dist/adapters/local.js +178 -0
  14. package/dist/adapters/local.js.map +1 -0
  15. package/dist/adapters/types.d.ts +68 -0
  16. package/dist/adapters/types.d.ts.map +1 -0
  17. package/dist/adapters/types.js +2 -0
  18. package/dist/adapters/types.js.map +1 -0
  19. package/dist/index.d.ts +45 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +42 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/mcp/errors.d.ts +5 -0
  24. package/dist/mcp/errors.d.ts.map +1 -0
  25. package/dist/mcp/errors.js +22 -0
  26. package/dist/mcp/errors.js.map +1 -0
  27. package/dist/mcp/resources/engram-change-artifacts.d.ts +11 -0
  28. package/dist/mcp/resources/engram-change-artifacts.d.ts.map +1 -0
  29. package/dist/mcp/resources/engram-change-artifacts.js +24 -0
  30. package/dist/mcp/resources/engram-change-artifacts.js.map +1 -0
  31. package/dist/mcp/resources/engram-change-state.d.ts +11 -0
  32. package/dist/mcp/resources/engram-change-state.d.ts.map +1 -0
  33. package/dist/mcp/resources/engram-change-state.js +27 -0
  34. package/dist/mcp/resources/engram-change-state.js.map +1 -0
  35. package/dist/mcp/resources/engram-changes.d.ts +9 -0
  36. package/dist/mcp/resources/engram-changes.d.ts.map +1 -0
  37. package/dist/mcp/resources/engram-changes.js +17 -0
  38. package/dist/mcp/resources/engram-changes.js.map +1 -0
  39. package/dist/mcp/resources/engram-health.d.ts +9 -0
  40. package/dist/mcp/resources/engram-health.d.ts.map +1 -0
  41. package/dist/mcp/resources/engram-health.js +13 -0
  42. package/dist/mcp/resources/engram-health.js.map +1 -0
  43. package/dist/mcp/resources/engram-observation.d.ts +11 -0
  44. package/dist/mcp/resources/engram-observation.d.ts.map +1 -0
  45. package/dist/mcp/resources/engram-observation.js +18 -0
  46. package/dist/mcp/resources/engram-observation.js.map +1 -0
  47. package/dist/mcp/resources/engram-project.d.ts +11 -0
  48. package/dist/mcp/resources/engram-project.d.ts.map +1 -0
  49. package/dist/mcp/resources/engram-project.js +47 -0
  50. package/dist/mcp/resources/engram-project.js.map +1 -0
  51. package/dist/mcp/resources/engram-projects.d.ts +9 -0
  52. package/dist/mcp/resources/engram-projects.d.ts.map +1 -0
  53. package/dist/mcp/resources/engram-projects.js +13 -0
  54. package/dist/mcp/resources/engram-projects.js.map +1 -0
  55. package/dist/mcp/resources/engram-session.d.ts +11 -0
  56. package/dist/mcp/resources/engram-session.d.ts.map +1 -0
  57. package/dist/mcp/resources/engram-session.js +18 -0
  58. package/dist/mcp/resources/engram-session.js.map +1 -0
  59. package/dist/mcp/server.d.ts +19 -0
  60. package/dist/mcp/server.d.ts.map +1 -0
  61. package/dist/mcp/server.js +104 -0
  62. package/dist/mcp/server.js.map +1 -0
  63. package/dist/mcp/tools/get-observation.d.ts +16 -0
  64. package/dist/mcp/tools/get-observation.d.ts.map +1 -0
  65. package/dist/mcp/tools/get-observation.js +21 -0
  66. package/dist/mcp/tools/get-observation.js.map +1 -0
  67. package/dist/mcp/tools/get-project-state.d.ts +16 -0
  68. package/dist/mcp/tools/get-project-state.d.ts.map +1 -0
  69. package/dist/mcp/tools/get-project-state.js +63 -0
  70. package/dist/mcp/tools/get-project-state.js.map +1 -0
  71. package/dist/mcp/tools/get-session.d.ts +16 -0
  72. package/dist/mcp/tools/get-session.d.ts.map +1 -0
  73. package/dist/mcp/tools/get-session.js +21 -0
  74. package/dist/mcp/tools/get-session.js.map +1 -0
  75. package/dist/mcp/tools/list-observations.d.ts +22 -0
  76. package/dist/mcp/tools/list-observations.d.ts.map +1 -0
  77. package/dist/mcp/tools/list-observations.js +23 -0
  78. package/dist/mcp/tools/list-observations.js.map +1 -0
  79. package/dist/mcp/tools/list-projects.d.ts +10 -0
  80. package/dist/mcp/tools/list-projects.d.ts.map +1 -0
  81. package/dist/mcp/tools/list-projects.js +14 -0
  82. package/dist/mcp/tools/list-projects.js.map +1 -0
  83. package/dist/mcp/tools/list-sessions.d.ts +19 -0
  84. package/dist/mcp/tools/list-sessions.d.ts.map +1 -0
  85. package/dist/mcp/tools/list-sessions.js +22 -0
  86. package/dist/mcp/tools/list-sessions.js.map +1 -0
  87. package/dist/mcp/tools/search-observations.d.ts +16 -0
  88. package/dist/mcp/tools/search-observations.d.ts.map +1 -0
  89. package/dist/mcp/tools/search-observations.js +16 -0
  90. package/dist/mcp/tools/search-observations.js.map +1 -0
  91. package/dist/schemas/health.d.ts +16 -0
  92. package/dist/schemas/health.d.ts.map +1 -0
  93. package/dist/schemas/health.js +7 -0
  94. package/dist/schemas/health.js.map +1 -0
  95. package/dist/schemas/observation.d.ts +34 -0
  96. package/dist/schemas/observation.d.ts.map +1 -0
  97. package/dist/schemas/observation.js +14 -0
  98. package/dist/schemas/observation.js.map +1 -0
  99. package/dist/schemas/project.d.ts +19 -0
  100. package/dist/schemas/project.d.ts.map +1 -0
  101. package/dist/schemas/project.js +8 -0
  102. package/dist/schemas/project.js.map +1 -0
  103. package/dist/schemas/session.d.ts +145 -0
  104. package/dist/schemas/session.d.ts.map +1 -0
  105. package/dist/schemas/session.js +24 -0
  106. package/dist/schemas/session.js.map +1 -0
  107. package/dist/schemas/timestamp.d.ts +3 -0
  108. package/dist/schemas/timestamp.d.ts.map +1 -0
  109. package/dist/schemas/timestamp.js +11 -0
  110. package/dist/schemas/timestamp.js.map +1 -0
  111. package/dist/sidebar/components/activity-feed.d.ts +13 -0
  112. package/dist/sidebar/components/activity-feed.d.ts.map +1 -0
  113. package/dist/sidebar/components/activity-feed.js +21 -0
  114. package/dist/sidebar/components/activity-feed.js.map +1 -0
  115. package/dist/sidebar/components/blockers.d.ts +17 -0
  116. package/dist/sidebar/components/blockers.d.ts.map +1 -0
  117. package/dist/sidebar/components/blockers.js +26 -0
  118. package/dist/sidebar/components/blockers.js.map +1 -0
  119. package/dist/sidebar/components/phase-progress.d.ts +13 -0
  120. package/dist/sidebar/components/phase-progress.d.ts.map +1 -0
  121. package/dist/sidebar/components/phase-progress.js +21 -0
  122. package/dist/sidebar/components/phase-progress.js.map +1 -0
  123. package/dist/sidebar/components/project-list.d.ts +16 -0
  124. package/dist/sidebar/components/project-list.d.ts.map +1 -0
  125. package/dist/sidebar/components/project-list.js +42 -0
  126. package/dist/sidebar/components/project-list.js.map +1 -0
  127. package/dist/sidebar/components/reactive-value.d.ts +4 -0
  128. package/dist/sidebar/components/reactive-value.d.ts.map +1 -0
  129. package/dist/sidebar/components/reactive-value.js +4 -0
  130. package/dist/sidebar/components/reactive-value.js.map +1 -0
  131. package/dist/sidebar/dashboard-launcher.d.ts +52 -0
  132. package/dist/sidebar/dashboard-launcher.d.ts.map +1 -0
  133. package/dist/sidebar/dashboard-launcher.js +125 -0
  134. package/dist/sidebar/dashboard-launcher.js.map +1 -0
  135. package/dist/sidebar/hooks/use-engram.d.ts +81 -0
  136. package/dist/sidebar/hooks/use-engram.d.ts.map +1 -0
  137. package/dist/sidebar/hooks/use-engram.js +423 -0
  138. package/dist/sidebar/hooks/use-engram.js.map +1 -0
  139. package/dist/sidebar/plugin.d.ts +85 -0
  140. package/dist/sidebar/plugin.d.ts.map +1 -0
  141. package/dist/sidebar/plugin.js +288 -0
  142. package/dist/sidebar/plugin.js.map +1 -0
  143. package/dist/stdio.d.ts +3 -0
  144. package/dist/stdio.d.ts.map +1 -0
  145. package/dist/stdio.js +20 -0
  146. package/dist/stdio.js.map +1 -0
  147. package/dist/utils/errors.d.ts +19 -0
  148. package/dist/utils/errors.d.ts.map +1 -0
  149. package/dist/utils/errors.js +27 -0
  150. package/dist/utils/errors.js.map +1 -0
  151. package/dist/utils/format.d.ts +11 -0
  152. package/dist/utils/format.d.ts.map +1 -0
  153. package/dist/utils/format.js +30 -0
  154. package/dist/utils/format.js.map +1 -0
  155. package/dist/utils/project-resolver.d.ts +21 -0
  156. package/dist/utils/project-resolver.d.ts.map +1 -0
  157. package/dist/utils/project-resolver.js +122 -0
  158. package/dist/utils/project-resolver.js.map +1 -0
  159. package/dist/utils/sdd-detector.d.ts +35 -0
  160. package/dist/utils/sdd-detector.d.ts.map +1 -0
  161. package/dist/utils/sdd-detector.js +115 -0
  162. package/dist/utils/sdd-detector.js.map +1 -0
  163. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive-value.d.ts","sourceRoot":"","sources":["../../../src/sidebar/components/reactive-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE/C,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAE1D"}
@@ -0,0 +1,4 @@
1
+ export function readReactive(value) {
2
+ return typeof value === "function" ? value() : value;
3
+ }
4
+ //# sourceMappingURL=reactive-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive-value.js","sourceRoot":"","sources":["../../../src/sidebar/components/reactive-value.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,YAAY,CAAI,KAAuB;IACrD,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAE,KAAqB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACxE,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * DashboardLauncher
3
+ *
4
+ * Opens Task-Manager-Portable.html in the default browser.
5
+ * Handles missing file gracefully.
6
+ */
7
+ export interface DashboardLauncherOptions {
8
+ /** Custom path to the HTML file */
9
+ htmlPath?: string;
10
+ /** Working directory (defaults to process.cwd()) */
11
+ cwd?: string;
12
+ }
13
+ export interface LaunchResult {
14
+ success: boolean;
15
+ error?: string;
16
+ path?: string;
17
+ }
18
+ /**
19
+ * Launches the dashboard in the default browser
20
+ *
21
+ * @param options - Configuration options
22
+ * @returns Launch result with success status and any error message
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // Basic usage
27
+ * const result = await launchDashboard();
28
+ * if (result.success) {
29
+ * console.log(`Opened at ${result.path}`);
30
+ * } else {
31
+ * console.error(result.error);
32
+ * }
33
+ *
34
+ * // Custom path
35
+ * const result = await launchDashboard({
36
+ * htmlPath: "/path/to/custom/dashboard.html"
37
+ * });
38
+ * ```
39
+ */
40
+ export declare function launchDashboard(options?: DashboardLauncherOptions): Promise<LaunchResult>;
41
+ /**
42
+ * Checks if the dashboard file exists without launching
43
+ *
44
+ * @param options - Configuration options
45
+ * @returns Object with exists flag and path if found
46
+ */
47
+ export declare function checkDashboardExists(options?: DashboardLauncherOptions): {
48
+ exists: boolean;
49
+ path: string | null;
50
+ };
51
+ export default launchDashboard;
52
+ //# sourceMappingURL=dashboard-launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-launcher.d.ts","sourceRoot":"","sources":["../../src/sidebar/dashboard-launcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,wBAAwB;IACvC,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA6CD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC,CA0CvB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,wBAA6B,GACrC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAM1C;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * DashboardLauncher
3
+ *
4
+ * Opens Task-Manager-Portable.html in the default browser.
5
+ * Handles missing file gracefully.
6
+ */
7
+ import { execFile } from "node:child_process";
8
+ import { existsSync } from "node:fs";
9
+ import path from "node:path";
10
+ import { platform } from "node:os";
11
+ /**
12
+ * Gets the command and args to open a file in the default browser
13
+ */
14
+ function getOpenCommand() {
15
+ switch (platform()) {
16
+ case "win32":
17
+ return { command: "cmd", args: ["/c", "start", ""] };
18
+ case "darwin":
19
+ return { command: "open", args: [] };
20
+ default:
21
+ return { command: "xdg-open", args: [] };
22
+ }
23
+ }
24
+ /**
25
+ * Finds the Task-Manager-Portable.html file
26
+ */
27
+ function findDashboardPath(options = {}) {
28
+ const cwd = options.cwd ?? process.cwd();
29
+ // A configured relative path belongs to this workspace, not the process globally.
30
+ if (options.htmlPath) {
31
+ const pathApi = /^[A-Za-z]:[\\/]/.test(cwd) || cwd.includes("\\")
32
+ ? path.win32
33
+ : path.posix;
34
+ const customPath = pathApi.isAbsolute(options.htmlPath)
35
+ ? options.htmlPath
36
+ : pathApi.resolve(cwd, options.htmlPath);
37
+ if (existsSync(customPath)) {
38
+ return customPath;
39
+ }
40
+ return null;
41
+ }
42
+ const pathApi = /^[A-Za-z]:[\\/]/.test(cwd) || cwd.includes("\\")
43
+ ? path.win32
44
+ : path.posix;
45
+ const conventionalPath = pathApi.join(cwd, "Task-Manager-Portable.html");
46
+ return existsSync(conventionalPath) ? conventionalPath : null;
47
+ }
48
+ /**
49
+ * Launches the dashboard in the default browser
50
+ *
51
+ * @param options - Configuration options
52
+ * @returns Launch result with success status and any error message
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * // Basic usage
57
+ * const result = await launchDashboard();
58
+ * if (result.success) {
59
+ * console.log(`Opened at ${result.path}`);
60
+ * } else {
61
+ * console.error(result.error);
62
+ * }
63
+ *
64
+ * // Custom path
65
+ * const result = await launchDashboard({
66
+ * htmlPath: "/path/to/custom/dashboard.html"
67
+ * });
68
+ * ```
69
+ */
70
+ export async function launchDashboard(options = {}) {
71
+ const dashboardPath = findDashboardPath(options);
72
+ if (!dashboardPath) {
73
+ return {
74
+ success: false,
75
+ error: options.htmlPath
76
+ ? `Dashboard file not found at configured path: ${options.htmlPath}. Set dashboardPath to an existing Task-Manager-Portable.html file; it is not created automatically.`
77
+ : "Task-Manager-Portable.html not found. Place the external file in the project root or configure dashboardPath; it is not created automatically.",
78
+ };
79
+ }
80
+ return new Promise((resolve) => {
81
+ const { command, args } = getOpenCommand();
82
+ const fullArgs = [...args, dashboardPath];
83
+ let child;
84
+ try {
85
+ child = execFile(command, fullArgs, {
86
+ cwd: options.cwd,
87
+ }, () => {
88
+ // Completion is intentionally ignored: the browser process is detached.
89
+ });
90
+ }
91
+ catch (error) {
92
+ resolve({
93
+ success: false,
94
+ error: `Failed to open dashboard: ${error instanceof Error ? error.message : String(error)}`,
95
+ path: dashboardPath,
96
+ });
97
+ return;
98
+ }
99
+ child.unref();
100
+ child.stdin?.destroy();
101
+ child.stdout?.destroy();
102
+ child.stderr?.destroy();
103
+ child.once("spawn", () => resolve({ success: true, path: dashboardPath }));
104
+ child.once("error", (error) => resolve({
105
+ success: false,
106
+ error: `Failed to open dashboard: ${error.message}`,
107
+ path: dashboardPath,
108
+ }));
109
+ });
110
+ }
111
+ /**
112
+ * Checks if the dashboard file exists without launching
113
+ *
114
+ * @param options - Configuration options
115
+ * @returns Object with exists flag and path if found
116
+ */
117
+ export function checkDashboardExists(options = {}) {
118
+ const path = findDashboardPath(options);
119
+ return {
120
+ exists: path !== null,
121
+ path,
122
+ };
123
+ }
124
+ export default launchDashboard;
125
+ //# sourceMappingURL=dashboard-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-launcher.js","sourceRoot":"","sources":["../../src/sidebar/dashboard-launcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { type Accessor } from "solid-js";
2
+ import type { EngramAdapter, HealthStatus, Observation, Project } from "../../adapters/types.js";
3
+ import { type SDDChange } from "../../utils/sdd-detector.js";
4
+ import type { ProjectResolution } from "../../utils/project-resolver.js";
5
+ export type SidebarHealth = "loading" | "ok" | "stale" | "error" | "offline";
6
+ export interface SidebarViewModel {
7
+ projectName?: string;
8
+ project?: Project;
9
+ resolution?: ProjectResolution;
10
+ changes: SDDChange[];
11
+ blockers: Observation[];
12
+ recentActivity: Observation[];
13
+ health: SidebarHealth;
14
+ loading: boolean;
15
+ lastRefreshAt?: Date;
16
+ error?: string;
17
+ terminal?: SidebarTerminalState;
18
+ }
19
+ export interface SidebarTerminalState {
20
+ status: "loading" | SidebarRefreshOutcomeStatus;
21
+ stage: SidebarOperationStage | "mounted" | "refresh";
22
+ health: SidebarHealth;
23
+ observationCount: number;
24
+ }
25
+ export interface UseEngramOptions {
26
+ projectName?: string;
27
+ resolution?: ProjectResolution;
28
+ initialError?: string;
29
+ pollInterval?: number;
30
+ enabled?: boolean;
31
+ autoRefresh?: boolean;
32
+ resolveProject?: () => Promise<ProjectResolution>;
33
+ now?: () => Date;
34
+ stageTimeoutMs?: number;
35
+ }
36
+ export interface UseEngramReturn {
37
+ state: Accessor<SidebarViewModel>;
38
+ refresh: () => Promise<SidebarRefreshOutcome>;
39
+ }
40
+ export interface SidebarRefreshInput {
41
+ health?: HealthStatus;
42
+ projects?: Project[];
43
+ observations?: Observation[];
44
+ projectName?: string;
45
+ resolution?: ProjectResolution;
46
+ errors?: unknown[];
47
+ failures?: SidebarRefreshFailure[];
48
+ warnings?: string[];
49
+ stages?: SidebarStageTransition[];
50
+ now: Date;
51
+ }
52
+ export type SidebarRefreshStage = "project-resolution" | "health" | "projects" | "observations" | "refresh";
53
+ export interface SidebarRefreshFailure {
54
+ stage: SidebarRefreshStage;
55
+ endpoint?: string;
56
+ reason: unknown;
57
+ }
58
+ export type SidebarRefreshOutcomeStatus = "success" | "partial" | "failed";
59
+ export type SidebarTransitionStatus = "started" | SidebarRefreshOutcomeStatus | "skipped";
60
+ export type SidebarOperationStage = "project-resolution" | "health" | "projects" | "filtered-observations" | "fallback-observations" | "reducing" | "terminal";
61
+ export interface SidebarStageTransition {
62
+ stage: SidebarOperationStage;
63
+ status: SidebarTransitionStatus;
64
+ endpoint?: string;
65
+ count?: number;
66
+ message?: string;
67
+ }
68
+ export interface SidebarRefreshOutcome {
69
+ status: SidebarRefreshOutcomeStatus;
70
+ summary: string;
71
+ failures: SidebarRefreshFailure[];
72
+ warnings: string[];
73
+ stages: SidebarStageTransition[];
74
+ }
75
+ export declare function reduceSidebarRefresh(current: SidebarViewModel, input: SidebarRefreshInput): SidebarViewModel;
76
+ export declare function fetchSidebarRefresh(adapter: EngramAdapter, options?: Pick<UseEngramOptions, "projectName" | "resolution" | "resolveProject" | "now" | "stageTimeoutMs"> & {
77
+ onTransition?: (transition: SidebarStageTransition) => void;
78
+ }): Promise<SidebarRefreshInput>;
79
+ export declare function useEngram(adapter: EngramAdapter, options?: UseEngramOptions): UseEngramReturn;
80
+ export declare function outcomeFor(input: SidebarRefreshInput): SidebarRefreshOutcome;
81
+ //# sourceMappingURL=use-engram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-engram.d.ts","sourceRoot":"","sources":["../../../src/sidebar/hooks/use-engram.ts"],"names":[],"mappings":"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"}