mastracode 0.22.2 → 0.22.3-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/dist/HarnessCompat.d.ts +21 -2
- package/dist/HarnessCompat.d.ts.map +1 -1
- package/dist/agents/tools.d.ts +4 -3
- package/dist/agents/tools.d.ts.map +1 -1
- package/dist/agents/workspace.d.ts.map +1 -1
- package/dist/{chunk-NFF7IH5X.cjs → chunk-A4W5D25I.cjs} +2 -1096
- package/dist/chunk-A4W5D25I.cjs.map +1 -0
- package/dist/{chunk-DPPFZEZI.cjs → chunk-AGLPYB76.cjs} +193 -325
- package/dist/chunk-AGLPYB76.cjs.map +1 -0
- package/dist/{chunk-BOZ3JCCI.cjs → chunk-AXKWCXEW.cjs} +961 -937
- package/dist/chunk-AXKWCXEW.cjs.map +1 -0
- package/dist/{chunk-7ARENXCP.js → chunk-CD6DZEX6.js} +38 -14
- package/dist/chunk-CD6DZEX6.js.map +1 -0
- package/dist/{chunk-EXBGEHMR.js → chunk-TWAOLBVC.js} +3 -1094
- package/dist/chunk-TWAOLBVC.js.map +1 -0
- package/dist/{chunk-AB4G5527.js → chunk-VCIVJV7J.js} +163 -295
- package/dist/chunk-VCIVJV7J.js.map +1 -0
- package/dist/cli.cjs +18 -18
- package/dist/cli.js +3 -3
- package/dist/harness-tui-v1.d.ts +2 -0
- package/dist/harness-tui-v1.d.ts.map +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/schema.d.ts +11 -4
- package/dist/schema.d.ts.map +1 -1
- package/dist/tui/event-dispatch.d.ts.map +1 -1
- package/dist/tui/handlers/message.d.ts.map +1 -1
- package/dist/tui/mastra-tui.d.ts.map +1 -1
- package/dist/tui/state.d.ts +3 -1
- package/dist/tui/state.d.ts.map +1 -1
- package/dist/tui/status-line.d.ts.map +1 -1
- package/dist/tui.cjs +19 -19
- package/dist/tui.js +2 -2
- package/package.json +13 -11
- package/dist/chunk-7ARENXCP.js.map +0 -1
- package/dist/chunk-AB4G5527.js.map +0 -1
- package/dist/chunk-BOZ3JCCI.cjs.map +0 -1
- package/dist/chunk-DPPFZEZI.cjs.map +0 -1
- package/dist/chunk-EXBGEHMR.js.map +0 -1
- package/dist/chunk-NFF7IH5X.cjs.map +0 -1
- package/dist/github-signals/index.d.ts +0 -217
- package/dist/github-signals/index.d.ts.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
# mastracode
|
|
2
2
|
|
|
3
|
+
## 0.22.3-alpha.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Increased TUI chat scroll buffer from 200/100 to 5000/3000 components, so you can scroll back much further in conversation history ([#17633](https://github.com/mastra-ai/mastra/pull/17633))
|
|
8
|
+
|
|
9
|
+
- Fixed state signal placement in streamed MastraCode output. ([#17631](https://github.com/mastra-ai/mastra/pull/17631))
|
|
10
|
+
|
|
11
|
+
- Fixed the GitHub PR badge in MastraCode so it animates only while GitHub polling is actively running, instead of restarting whenever the agent processes a user message. ([#17590](https://github.com/mastra-ai/mastra/pull/17590))
|
|
12
|
+
|
|
13
|
+
- Added agent and workspace tool hooks for applications that need to run logic before and after tool calls execute. Mastra Code now uses agent hooks so hook handlers run for built-in workspace tools as well as dynamic tools. ([#17637](https://github.com/mastra-ai/mastra/pull/17637))
|
|
14
|
+
|
|
15
|
+
**Example**
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
const agent = new Agent({
|
|
19
|
+
name: 'Support Agent',
|
|
20
|
+
instructions: 'Help users.',
|
|
21
|
+
model,
|
|
22
|
+
hooks: {
|
|
23
|
+
beforeToolCall: ({ toolName, input }) => {
|
|
24
|
+
console.log(`Running ${toolName}`, input);
|
|
25
|
+
},
|
|
26
|
+
afterToolCall: ({ toolName, output, error }) => {
|
|
27
|
+
console.log(`Finished ${toolName}`, { output, error });
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const workspace = new Workspace({
|
|
33
|
+
tools: {
|
|
34
|
+
hooks: {
|
|
35
|
+
beforeToolCall: ({ toolName, workspaceToolName, input }) => {
|
|
36
|
+
console.log(`Running ${toolName} from ${workspaceToolName}`, input);
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- Updated dependencies [[`2bccba4`](https://github.com/mastra-ai/mastra/commit/2bccba4c03cadc815c2d54cbf4dd43a922140a8d), [`2bccba4`](https://github.com/mastra-ai/mastra/commit/2bccba4c03cadc815c2d54cbf4dd43a922140a8d), [`2bccba4`](https://github.com/mastra-ai/mastra/commit/2bccba4c03cadc815c2d54cbf4dd43a922140a8d), [`f2ab060`](https://github.com/mastra-ai/mastra/commit/f2ab060162bea81505fda553e2cee29c1979fd04), [`5d302c8`](https://github.com/mastra-ai/mastra/commit/5d302c8eda1a6ac74eab5e442c4f64db6cc97a06), [`f2ab060`](https://github.com/mastra-ai/mastra/commit/f2ab060162bea81505fda553e2cee29c1979fd04)]:
|
|
44
|
+
- @mastra/core@1.42.0-alpha.1
|
|
45
|
+
- @mastra/github-signals@0.1.1-alpha.0
|
|
46
|
+
- @mastra/agent-browser@0.3.1-alpha.0
|
|
47
|
+
|
|
48
|
+
## 0.22.3-alpha.0
|
|
49
|
+
|
|
50
|
+
### Patch Changes
|
|
51
|
+
|
|
52
|
+
- Revert to harness v0 ([#17589](https://github.com/mastra-ai/mastra/pull/17589))
|
|
53
|
+
|
|
54
|
+
- Updated dependencies [[`d468acb`](https://github.com/mastra-ai/mastra/commit/d468acb07aec1bb19a2cb0ada8042b05b46746b2), [`f86b997`](https://github.com/mastra-ai/mastra/commit/f86b997e63a6ffc3503473835f2cfe0ed2ac8337), [`e9be4e7`](https://github.com/mastra-ai/mastra/commit/e9be4e747ec3d8b65548bff92f9377db06105376), [`d53cfc2`](https://github.com/mastra-ai/mastra/commit/d53cfc2c7f8d78343a4aa84ec4e129ba25f3325e), [`65799d4`](https://github.com/mastra-ai/mastra/commit/65799d4d549e5ebb9c848fbe3f51ac090f64becf), [`c268c89`](https://github.com/mastra-ai/mastra/commit/c268c89f4c63a93ee474d3cffdf3ea60bf00d4f2), [`d468acb`](https://github.com/mastra-ai/mastra/commit/d468acb07aec1bb19a2cb0ada8042b05b46746b2), [`7ef9ebf`](https://github.com/mastra-ai/mastra/commit/7ef9ebf79ec3c90536643ef169c7a306f105fb9d), [`0c72f03`](https://github.com/mastra-ai/mastra/commit/0c72f032abb13254df5a7856d64be2f207b8006d), [`75adfb8`](https://github.com/mastra-ai/mastra/commit/75adfb81e3fca1fe8dc9ab382bed7b714854ba4f), [`4c2158d`](https://github.com/mastra-ai/mastra/commit/4c2158d4c2a86e82105179d4a757cd625dfec9fa), [`3b45ea9`](https://github.com/mastra-ai/mastra/commit/3b45ea95015557a6cb9d70dc5252af54ab1b78ac), [`f084be1`](https://github.com/mastra-ai/mastra/commit/f084be1fcbe33ad7480913e44d6130c421c0976f)]:
|
|
55
|
+
- @mastra/core@1.42.0-alpha.0
|
|
56
|
+
- @mastra/pg@1.13.0-alpha.0
|
|
57
|
+
- @mastra/mcp@1.9.2-alpha.0
|
|
58
|
+
|
|
3
59
|
## 0.22.2
|
|
4
60
|
|
|
5
61
|
### Patch Changes
|
package/dist/HarnessCompat.d.ts
CHANGED
|
@@ -14,7 +14,16 @@ type CloneSessionOptions = {
|
|
|
14
14
|
export declare function v1ModeToLegacy<TState = {}>(mode: HarnessMode, agent: Agent): HarnessModeLegacy<TState>;
|
|
15
15
|
export declare class HarnessCompat<TState = {}> extends HarnessLegacy<TState> {
|
|
16
16
|
#private;
|
|
17
|
-
constructor(args: HarnessConfig<TState>, harnessV1: Harness<HarnessMode[]>);
|
|
17
|
+
constructor(args: HarnessConfig<TState>, harnessV1: Harness<HarnessMode[], TState>);
|
|
18
|
+
getState(): Readonly<TState>;
|
|
19
|
+
setState(updates: Partial<TState>): Promise<void>;
|
|
20
|
+
getSubagentModelId({ agentType }?: {
|
|
21
|
+
agentType?: string;
|
|
22
|
+
}): string | null;
|
|
23
|
+
setSubagentModelId({ modelId, agentType }: {
|
|
24
|
+
modelId: string;
|
|
25
|
+
agentType?: string;
|
|
26
|
+
}): Promise<void>;
|
|
18
27
|
switchThread({ threadId }: {
|
|
19
28
|
threadId: string;
|
|
20
29
|
}): Promise<void>;
|
|
@@ -22,7 +31,7 @@ export declare class HarnessCompat<TState = {}> extends HarnessLegacy<TState> {
|
|
|
22
31
|
allResources?: boolean;
|
|
23
32
|
includeForkedSubagents?: boolean;
|
|
24
33
|
}): Promise<HarnessThread[]>;
|
|
25
|
-
cloneSession(opts?: CloneSessionOptions): Promise<Session
|
|
34
|
+
cloneSession(opts?: CloneSessionOptions): Promise<Session<TState>>;
|
|
26
35
|
cloneThread({ sourceThreadId, title, resourceId, }?: {
|
|
27
36
|
sourceThreadId?: string;
|
|
28
37
|
title?: string;
|
|
@@ -36,6 +45,16 @@ export declare class HarnessCompat<TState = {}> extends HarnessLegacy<TState> {
|
|
|
36
45
|
switchMode({ modeId }: {
|
|
37
46
|
modeId: string;
|
|
38
47
|
}): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Activate a skill on the current v1 session.
|
|
50
|
+
*
|
|
51
|
+
* Pass-through to `Session.useSkill` — returns the resolved instructions
|
|
52
|
+
* string, or throws `HarnessSkillNotFoundError` if the skill is missing.
|
|
53
|
+
* Throws if there is no active session.
|
|
54
|
+
*/
|
|
55
|
+
useSkill(name: string, opts?: {
|
|
56
|
+
args?: Record<string, unknown>;
|
|
57
|
+
}): Promise<string>;
|
|
39
58
|
}
|
|
40
59
|
export {};
|
|
41
60
|
//# sourceMappingURL=HarnessCompat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HarnessCompat.d.ts","sourceRoot":"","sources":["../src/HarnessCompat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,IAAI,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE7E,KAAK,mBAAmB,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"HarnessCompat.d.ts","sourceRoot":"","sources":["../src/HarnessCompat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,IAAI,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE7E,KAAK,mBAAmB,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,GAAG,eAAe,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAQF,wBAAgB,cAAc,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAUtG;AAED,qBAAa,aAAa,CAAC,MAAM,GAAG,EAAE,CAAE,SAAQ,aAAa,CAAC,MAAM,CAAC;;gBAIvD,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC;IAMlF,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;IAqBtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCvD,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,MAAM,GAAG,IAAI;IAIvE,kBAAkB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlG,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/D,WAAW,CAAC,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA4C7G,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAStE,WAAW,CAAC,EAChB,cAAc,EACd,KAAK,EACL,UAAU,GACX,GAAE;QACD,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,aAAa,CAAC;IAiC/B,cAAc,IAAI,iBAAiB,CAAC,MAAM,CAAC;IAc3C;;;OAGG;IACG,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D;;;;;;OAMG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAMzF"}
|
package/dist/agents/tools.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import type { RequestContext } from '@mastra/core/request-context';
|
|
2
2
|
import type { MastraCompositeStore } from '@mastra/core/storage';
|
|
3
|
+
import type { ToolHooks } from '@mastra/core/tools';
|
|
3
4
|
import type { HookManager } from '../hooks/index.js';
|
|
4
5
|
import type { McpManager } from '../mcp/index.js';
|
|
5
6
|
/** Minimal shape for tools passed to createDynamicTools. */
|
|
6
|
-
type ToolLike = {
|
|
7
|
+
export type ToolLike = {
|
|
7
8
|
execute?: (...args: any[]) => Promise<unknown> | unknown;
|
|
8
9
|
} & Record<string, any>;
|
|
10
|
+
export declare function createToolHooks(hookManager?: HookManager): ToolHooks | undefined;
|
|
9
11
|
export declare function createDynamicTools(mcpManager?: McpManager, extraTools?: Record<string, ToolLike> | ((ctx: {
|
|
10
12
|
requestContext: RequestContext;
|
|
11
|
-
}) => Record<string, ToolLike>),
|
|
13
|
+
}) => Record<string, ToolLike>), disabledTools?: string[], storage?: MastraCompositeStore): ({ requestContext }: {
|
|
12
14
|
requestContext: RequestContext;
|
|
13
15
|
}) => Record<string, ToolLike>;
|
|
14
|
-
export {};
|
|
15
16
|
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/agents/tools.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAKzC,4DAA4D;AAC5D,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/agents/tools.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAKzC,4DAA4D;AAC5D,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC1D,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAwCxB,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CA0BhF;AAED,wBAAgB,kBAAkB,CAChC,UAAU,CAAC,EAAE,UAAU,EACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;IAAE,cAAc,EAAE,cAAc,CAAA;CAAE,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAC/G,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,oBAAoB,IAEE,oBAAoB;IAAE,cAAc,EAAE,cAAc,CAAA;CAAE,8BAiEvF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/agents/workspace.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAiFlF,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAchF;AA2BD,wBAAgB,mBAAmB,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE;IAAE,cAAc,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/agents/workspace.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAiFlF,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAchF;AA2BD,wBAAgB,mBAAmB,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE;IAAE,cAAc,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,uDAkElH"}
|