@provos/ironcurtain 0.3.1 → 0.4.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/README.md +20 -1
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/index.js +12 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-servers.json +3 -0
- package/dist/config/types.d.ts +2 -0
- package/dist/config/user-config.d.ts +11 -0
- package/dist/config/user-config.js +56 -2
- package/dist/config/user-config.js.map +1 -1
- package/dist/docker/adapters/claude-code.d.ts +4 -0
- package/dist/docker/adapters/claude-code.js +35 -21
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +6 -12
- package/dist/docker/audit-log-tailer.d.ts +4 -3
- package/dist/docker/audit-log-tailer.js +9 -7
- package/dist/docker/audit-log-tailer.js.map +1 -1
- package/dist/docker/code-mode-proxy.d.ts +34 -0
- package/dist/docker/code-mode-proxy.js +137 -0
- package/dist/docker/code-mode-proxy.js.map +1 -0
- package/dist/docker/docker-agent-session.d.ts +17 -5
- package/dist/docker/docker-agent-session.js +171 -36
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-manager.js +106 -15
- package/dist/docker/docker-manager.js.map +1 -1
- package/dist/docker/mitm-proxy.d.ts +7 -4
- package/dist/docker/mitm-proxy.js +43 -13
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/orientation.d.ts +3 -2
- package/dist/docker/orientation.js +6 -3
- package/dist/docker/orientation.js.map +1 -1
- package/dist/docker/platform.d.ts +20 -0
- package/dist/docker/platform.js +24 -0
- package/dist/docker/platform.js.map +1 -0
- package/dist/docker/types.d.ts +59 -7
- package/dist/sandbox/index.d.ts +25 -1
- package/dist/sandbox/index.js +78 -9
- package/dist/sandbox/index.js.map +1 -1
- package/dist/servers/fetch-server.d.ts +6 -1
- package/dist/servers/fetch-server.js +24 -12
- package/dist/servers/fetch-server.js.map +1 -1
- package/dist/session/agent-session.js +9 -5
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/index.js +18 -36
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.js +6 -0
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/prompts.d.ts +9 -3
- package/dist/session/prompts.js +28 -10
- package/dist/session/prompts.js.map +1 -1
- package/dist/signal/bot-command.d.ts +13 -0
- package/dist/signal/bot-command.js +54 -0
- package/dist/signal/bot-command.js.map +1 -0
- package/dist/signal/format.d.ts +31 -0
- package/dist/signal/format.js +101 -0
- package/dist/signal/format.js.map +1 -0
- package/dist/signal/index.d.ts +16 -0
- package/dist/signal/index.js +13 -0
- package/dist/signal/index.js.map +1 -0
- package/dist/signal/markdown-to-signal.d.ts +29 -0
- package/dist/signal/markdown-to-signal.js +154 -0
- package/dist/signal/markdown-to-signal.js.map +1 -0
- package/dist/signal/setup-signal.d.ts +48 -0
- package/dist/signal/setup-signal.js +443 -0
- package/dist/signal/setup-signal.js.map +1 -0
- package/dist/signal/signal-bot-daemon.d.ts +142 -0
- package/dist/signal/signal-bot-daemon.js +504 -0
- package/dist/signal/signal-bot-daemon.js.map +1 -0
- package/dist/signal/signal-config.d.ts +64 -0
- package/dist/signal/signal-config.js +53 -0
- package/dist/signal/signal-config.js.map +1 -0
- package/dist/signal/signal-container.d.ts +37 -0
- package/dist/signal/signal-container.js +112 -0
- package/dist/signal/signal-container.js.map +1 -0
- package/dist/signal/signal-transport.d.ts +34 -0
- package/dist/signal/signal-transport.js +70 -0
- package/dist/signal/signal-transport.js.map +1 -0
- package/dist/trusted-process/mcp-proxy-server.d.ts +111 -1
- package/dist/trusted-process/mcp-proxy-server.js +319 -247
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/path-utils.d.ts +5 -1
- package/dist/trusted-process/path-utils.js +47 -4
- package/dist/trusted-process/path-utils.js.map +1 -1
- package/dist/trusted-process/policy-engine.d.ts +3 -1
- package/dist/trusted-process/policy-engine.js +17 -6
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/sandbox-integration.d.ts +11 -4
- package/dist/trusted-process/sandbox-integration.js +13 -7
- package/dist/trusted-process/sandbox-integration.js.map +1 -1
- package/dist/trusted-process/tcp-server-transport.d.ts +43 -0
- package/dist/trusted-process/tcp-server-transport.js +119 -0
- package/dist/trusted-process/tcp-server-transport.js.map +1 -0
- package/dist/types/argument-roles.d.ts +7 -0
- package/dist/types/argument-roles.js +30 -5
- package/dist/types/argument-roles.js.map +1 -1
- package/docker/Dockerfile.base.arm64 +23 -0
- package/package.json +9 -4
- package/src/config/mcp-servers.json +3 -0
- package/dist/docker/managed-proxy.d.ts +0 -27
- package/dist/docker/managed-proxy.js +0 -175
- package/dist/docker/managed-proxy.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,12 @@ export async function resolveSessionMode(options) {
|
|
|
55
55
|
return resolveAutoDetect(config, isDockerAvailable);
|
|
56
56
|
}
|
|
57
57
|
async function resolveExplicit(agent, config, isDockerAvailable) {
|
|
58
|
+
if (agent === 'builtin') {
|
|
59
|
+
return {
|
|
60
|
+
mode: { kind: 'builtin' },
|
|
61
|
+
reason: 'Explicit --agent builtin',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
58
64
|
const dockerOk = await isDockerAvailable();
|
|
59
65
|
if (!dockerOk) {
|
|
60
66
|
throw new PreflightError(`--agent ${agent} requires Docker, but the Docker daemon is not available. ` + 'Is Docker installed and running?');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/session/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAKtC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAEvC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,oBAAoB,GAAG,aAAwB,CAAC;AAEtD;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAgBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,QAAiB,EAAE,MAAyB;IACrE,OAAO,MAAM,CAAC,UAAU,CAAC,eAAe,KAAK,EAAE,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAyB;IAChE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,oBAAoB,CAAC;IAE5E,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,KAAc,EACd,MAAyB,EACzB,iBAAyC;IAEzC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,cAAc,CACtB,WAAW,KAAK,4DAA4D,GAAG,kCAAkC,CAClH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,cAAc,CACtB,WAAW,KAAK,yCAAyC;YACvD,8DAA8D,CACjE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC/B,MAAM,EAAE,4BAA4B;KACrC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAyB,EACzB,iBAAyC;IAEzC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACzB,MAAM,EAAE,sBAAsB;SAC/B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO;YACL,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACzB,MAAM,EAAE,2BAA2B;SACpC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,EAAE;QACrD,MAAM,EAAE,yCAAyC;KAClD,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/session/preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
/** Compact server listing for the system prompt. */
|
|
2
|
+
export interface ServerListing {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
}
|
|
1
6
|
/**
|
|
2
|
-
* Builds the system prompt for the agent.
|
|
3
|
-
* the
|
|
7
|
+
* Builds the system prompt for the agent. Uses progressive tool disclosure:
|
|
8
|
+
* the prompt lists server names only; the agent calls help.help('serverName')
|
|
9
|
+
* to discover tools on demand.
|
|
4
10
|
*/
|
|
5
|
-
export declare function buildSystemPrompt(
|
|
11
|
+
export declare function buildSystemPrompt(serverListings: ServerListing[], allowedDirectory?: string): string;
|
package/dist/session/prompts.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Builds the system prompt for the agent.
|
|
3
|
-
* the
|
|
2
|
+
* Builds the system prompt for the agent. Uses progressive tool disclosure:
|
|
3
|
+
* the prompt lists server names only; the agent calls help.help('serverName')
|
|
4
|
+
* to discover tools on demand.
|
|
4
5
|
*/
|
|
5
|
-
export function buildSystemPrompt(
|
|
6
|
+
export function buildSystemPrompt(serverListings, allowedDirectory) {
|
|
6
7
|
const sandboxInfo = allowedDirectory
|
|
7
8
|
? `\nYour sandbox directory is: ${allowedDirectory}\nAll file operations within this directory are automatically allowed.\n`
|
|
8
9
|
: '';
|
|
10
|
+
const serverLines = serverListings.length > 0
|
|
11
|
+
? serverListings.map((s) => `- **${s.name}** — ${s.description}`).join('\n')
|
|
12
|
+
: 'No tool servers available';
|
|
9
13
|
return `You are a helpful assistant. You complete tasks by writing TypeScript code that executes in a secure sandbox.
|
|
10
14
|
|
|
11
15
|
Every tool call in your code goes through a security policy engine. If a call is denied, do NOT retry it -- explain the denial to the user.
|
|
@@ -14,7 +18,7 @@ ${sandboxInfo}
|
|
|
14
18
|
|
|
15
19
|
- Tools are synchronous — do NOT use \`await\`.
|
|
16
20
|
- Use \`return\` to send a value back to the conversation.
|
|
17
|
-
- Example: \`const result =
|
|
21
|
+
- Example: \`const result = tools.filesystem_list_directory({ path: "/tmp" });\`
|
|
18
22
|
|
|
19
23
|
## Efficient code execution
|
|
20
24
|
|
|
@@ -31,11 +35,11 @@ BAD — 81 separate execute_code calls:
|
|
|
31
35
|
...
|
|
32
36
|
|
|
33
37
|
GOOD — one execute_code call with a loop:
|
|
34
|
-
const dir =
|
|
38
|
+
const dir = tools.filesystem_list_directory({ path: "/data" });
|
|
35
39
|
let count = 0;
|
|
36
40
|
for (const entry of dir.entries) {
|
|
37
41
|
if (entry.name.endsWith('.txt')) {
|
|
38
|
-
|
|
42
|
+
tools.filesystem_move_file({ source: \`/data/\${entry.name}\`, destination: \`/archive/\${entry.name}\` });
|
|
39
43
|
count++;
|
|
40
44
|
}
|
|
41
45
|
}
|
|
@@ -48,15 +52,29 @@ Large tool results are automatically truncated. To avoid losing information:
|
|
|
48
52
|
- Before reading files, use list_directory to survey what exists. Assess which files are relevant to the task.
|
|
49
53
|
- Do NOT read all files in a directory at once. Read a few at a time, summarize findings, then continue if needed.
|
|
50
54
|
- For large files, use the head and tail parameters on read_text_file to read specific portions.
|
|
51
|
-
Example:
|
|
55
|
+
Example: tools.filesystem_read_text_file({ path: "large.log", tail: 50 })
|
|
52
56
|
- If a result contains [... truncated N bytes ...], use targeted reads to access the specific portion you need.
|
|
53
57
|
- When you need information from multiple files, read them in a single execute_code call using a loop, not in separate calls.
|
|
54
58
|
|
|
55
|
-
## Available
|
|
59
|
+
## Available tool servers
|
|
56
60
|
|
|
57
|
-
${
|
|
61
|
+
${serverLines}
|
|
58
62
|
|
|
59
|
-
|
|
63
|
+
### Tool discovery
|
|
64
|
+
|
|
65
|
+
Call \`help.help('serverName')\` to list the tools in a server with their required parameters.
|
|
66
|
+
Call \`__getToolInterface('namespace.tool_name')\` to inspect a tool's full TypeScript interface.
|
|
67
|
+
|
|
68
|
+
Example workflow:
|
|
69
|
+
\`\`\`typescript
|
|
70
|
+
// 1. Discover filesystem tools
|
|
71
|
+
const info = help.help('filesystem');
|
|
72
|
+
return info;
|
|
73
|
+
|
|
74
|
+
// 2. Then use them
|
|
75
|
+
const content = tools.filesystem_read_text_file({ path: '/data/config.json' });
|
|
76
|
+
return content;
|
|
77
|
+
\`\`\`
|
|
60
78
|
`;
|
|
61
79
|
}
|
|
62
80
|
//# sourceMappingURL=prompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/session/prompts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/session/prompts.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,cAA+B,EAAE,gBAAyB;IAC1F,MAAM,WAAW,GAAG,gBAAgB;QAClC,CAAC,CAAC,gCAAgC,gBAAgB,0EAA0E;QAC5H,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,WAAW,GACf,cAAc,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5E,CAAC,CAAC,2BAA2B,CAAC;IAElC,OAAO;;;EAGP,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CX,WAAW;;;;;;;;;;;;;;;;;CAiBZ,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry point for `ironcurtain bot` - runs the Signal transport daemon.
|
|
3
|
+
*
|
|
4
|
+
* Unlike `ironcurtain start "task"` which runs a single task and exits,
|
|
5
|
+
* `ironcurtain bot` starts the SignalBotDaemon and waits for messages
|
|
6
|
+
* indefinitely. Sessions are created on demand when the user sends a
|
|
7
|
+
* Signal message and destroyed when they end.
|
|
8
|
+
*/
|
|
9
|
+
export interface BotOptions {
|
|
10
|
+
/** Explicit agent selection (e.g., 'claude-code'). */
|
|
11
|
+
agent?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function runBot(options?: BotOptions): Promise<void>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry point for `ironcurtain bot` - runs the Signal transport daemon.
|
|
3
|
+
*
|
|
4
|
+
* Unlike `ironcurtain start "task"` which runs a single task and exits,
|
|
5
|
+
* `ironcurtain bot` starts the SignalBotDaemon and waits for messages
|
|
6
|
+
* indefinitely. Sessions are created on demand when the user sends a
|
|
7
|
+
* Signal message and destroyed when they end.
|
|
8
|
+
*/
|
|
9
|
+
import { loadConfig } from '../config/index.js';
|
|
10
|
+
import { loadUserConfig } from '../config/user-config.js';
|
|
11
|
+
import { createDockerManager } from '../docker/docker-manager.js';
|
|
12
|
+
import { resolveSessionMode } from '../session/preflight.js';
|
|
13
|
+
import { SignalBotDaemon } from './signal-bot-daemon.js';
|
|
14
|
+
import { createSignalContainerManager } from './signal-container.js';
|
|
15
|
+
import { resolveSignalConfig } from './signal-config.js';
|
|
16
|
+
import * as logger from '../logger.js';
|
|
17
|
+
export async function runBot(options = {}) {
|
|
18
|
+
const userConfig = loadUserConfig();
|
|
19
|
+
const signalConfig = resolveSignalConfig(userConfig);
|
|
20
|
+
if (!signalConfig) {
|
|
21
|
+
process.stderr.write('Signal is not configured. Run: ironcurtain setup-signal\n');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const config = loadConfig();
|
|
25
|
+
// Resolve session mode (same logic as `ironcurtain start`)
|
|
26
|
+
const preflight = await resolveSessionMode({
|
|
27
|
+
config,
|
|
28
|
+
requestedAgent: options.agent ? options.agent : undefined,
|
|
29
|
+
});
|
|
30
|
+
const mode = preflight.mode;
|
|
31
|
+
const docker = createDockerManager();
|
|
32
|
+
const containerManager = createSignalContainerManager(docker, signalConfig.container);
|
|
33
|
+
const daemon = new SignalBotDaemon({
|
|
34
|
+
config: signalConfig,
|
|
35
|
+
containerManager,
|
|
36
|
+
mode,
|
|
37
|
+
});
|
|
38
|
+
// Wire up signal handling for graceful shutdown
|
|
39
|
+
let shuttingDown = false;
|
|
40
|
+
const shutdown = async () => {
|
|
41
|
+
if (shuttingDown)
|
|
42
|
+
process.exit(1); // Second signal: force exit
|
|
43
|
+
shuttingDown = true;
|
|
44
|
+
await daemon.shutdown();
|
|
45
|
+
logger.teardown();
|
|
46
|
+
process.exit(0);
|
|
47
|
+
};
|
|
48
|
+
process.on('SIGINT', () => void shutdown());
|
|
49
|
+
process.on('SIGTERM', () => void shutdown());
|
|
50
|
+
process.stderr.write(`IronCurtain bot starting (mode: ${mode.kind})...\n`);
|
|
51
|
+
process.stderr.write('Press Ctrl+C to stop.\n');
|
|
52
|
+
await daemon.start();
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=bot-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot-command.js","sourceRoot":"","sources":["../../src/signal/bot-command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAQvC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAsB,EAAE;IACnD,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAErD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,2DAA2D;IAC3D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC;QACzC,MAAM;QACN,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,OAAO,CAAC,KAAiB,CAAC,CAAC,CAAC,SAAS;KACvE,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAE5B,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAEtF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,MAAM,EAAE,YAAY;QACpB,gBAAgB;QAChB,IAAI;KACL,CAAC,CAAC;IAEH,gDAAgD;IAChD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;QACzC,IAAI,YAAY;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;QAC/D,YAAY,GAAG,IAAI,CAAC;QACpB,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAE7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;IAC3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAEhD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting utilities for Signal messages.
|
|
3
|
+
*
|
|
4
|
+
* All functions produce plain text with Signal's styled markup
|
|
5
|
+
* (**bold**, *italic*, `mono`, ~strike~). Output is intended
|
|
6
|
+
* to be sent with `text_mode: "styled"`.
|
|
7
|
+
*/
|
|
8
|
+
import type { EscalationRequest, BudgetStatus } from '../session/types.js';
|
|
9
|
+
/** Maximum length for a single Signal message. */
|
|
10
|
+
export declare const SIGNAL_MAX_MESSAGE_LENGTH = 2000;
|
|
11
|
+
/**
|
|
12
|
+
* Formats an escalation request as a styled text banner.
|
|
13
|
+
* Includes tool name, arguments, reason, and instructions
|
|
14
|
+
* for the user to reply "approve" or "deny".
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatEscalationBanner(request: EscalationRequest): string;
|
|
17
|
+
/**
|
|
18
|
+
* Formats budget status for the /budget command.
|
|
19
|
+
* Shows current turn consumption and session totals.
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatBudgetMessage(status: BudgetStatus): string;
|
|
22
|
+
/**
|
|
23
|
+
* Formats a compact budget summary for session end messages.
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatBudgetSummary(status: BudgetStatus): string;
|
|
26
|
+
/**
|
|
27
|
+
* Splits a message into chunks respecting the max length.
|
|
28
|
+
* Prefers splitting at double-newlines (paragraph breaks),
|
|
29
|
+
* then single newlines, then at the hard limit.
|
|
30
|
+
*/
|
|
31
|
+
export declare function splitMessage(text: string, maxLength: number): string[];
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting utilities for Signal messages.
|
|
3
|
+
*
|
|
4
|
+
* All functions produce plain text with Signal's styled markup
|
|
5
|
+
* (**bold**, *italic*, `mono`, ~strike~). Output is intended
|
|
6
|
+
* to be sent with `text_mode: "styled"`.
|
|
7
|
+
*/
|
|
8
|
+
/** Maximum length for a single Signal message. */
|
|
9
|
+
export const SIGNAL_MAX_MESSAGE_LENGTH = 2000;
|
|
10
|
+
/**
|
|
11
|
+
* Formats an escalation request as a styled text banner.
|
|
12
|
+
* Includes tool name, arguments, reason, and instructions
|
|
13
|
+
* for the user to reply "approve" or "deny".
|
|
14
|
+
*/
|
|
15
|
+
export function formatEscalationBanner(request) {
|
|
16
|
+
const separator = '\u2501'.repeat(30); // box drawing heavy horizontal
|
|
17
|
+
const header = '**ESCALATION: Human approval required**';
|
|
18
|
+
const toolLine = `Tool: \`${request.serverName}/${request.toolName}\``;
|
|
19
|
+
const argsLine = `Arguments: \`${JSON.stringify(request.arguments)}\``;
|
|
20
|
+
const reasonLine = `Reason: *${request.reason}*`;
|
|
21
|
+
const instructions = '**Reply "approve" or "deny"**';
|
|
22
|
+
return [separator, header, separator, toolLine, argsLine, reasonLine, separator, instructions, separator].join('\n');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Formats budget status for the /budget command.
|
|
26
|
+
* Shows current turn consumption and session totals.
|
|
27
|
+
*/
|
|
28
|
+
export function formatBudgetMessage(status) {
|
|
29
|
+
const { limits, cumulative } = status;
|
|
30
|
+
const lines = ['**Current turn budget:**'];
|
|
31
|
+
if (status.tokenTrackingAvailable) {
|
|
32
|
+
lines.push(formatBudgetLine('Tokens', status.totalTokens, limits.maxTotalTokens, (v) => v.toLocaleString()));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
lines.push(' Tokens: N/A');
|
|
36
|
+
}
|
|
37
|
+
lines.push(formatBudgetLine('Steps', status.stepCount, limits.maxSteps, String));
|
|
38
|
+
lines.push(formatBudgetLine('Time', status.elapsedSeconds, limits.maxSessionSeconds, (v) => `${Math.round(v)}s`));
|
|
39
|
+
lines.push(formatBudgetLine('Est. cost', status.estimatedCostUsd, limits.maxEstimatedCostUsd, (v) => `$${v.toFixed(2)}`));
|
|
40
|
+
lines.push('');
|
|
41
|
+
lines.push('**Session totals:**');
|
|
42
|
+
if (status.tokenTrackingAvailable) {
|
|
43
|
+
lines.push(` Tokens: ${cumulative.totalTokens.toLocaleString()}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
lines.push(' Tokens: N/A');
|
|
47
|
+
}
|
|
48
|
+
lines.push(` Steps: ${cumulative.stepCount}`);
|
|
49
|
+
lines.push(` Active time: ${Math.round(cumulative.activeSeconds)}s`);
|
|
50
|
+
lines.push(` Est. cost: $${cumulative.estimatedCostUsd.toFixed(2)}`);
|
|
51
|
+
return lines.join('\n');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Formats a compact budget summary for session end messages.
|
|
55
|
+
*/
|
|
56
|
+
export function formatBudgetSummary(status) {
|
|
57
|
+
const { cumulative } = status;
|
|
58
|
+
const tokensPart = status.tokenTrackingAvailable ? `${cumulative.totalTokens.toLocaleString()} tokens, ` : '';
|
|
59
|
+
return (`Session: ${tokensPart}` +
|
|
60
|
+
`${cumulative.stepCount} steps` +
|
|
61
|
+
`, ${Math.round(cumulative.activeSeconds)}s` +
|
|
62
|
+
`, ~$${cumulative.estimatedCostUsd.toFixed(2)}`);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Splits a message into chunks respecting the max length.
|
|
66
|
+
* Prefers splitting at double-newlines (paragraph breaks),
|
|
67
|
+
* then single newlines, then at the hard limit.
|
|
68
|
+
*/
|
|
69
|
+
export function splitMessage(text, maxLength) {
|
|
70
|
+
if (text.length <= maxLength)
|
|
71
|
+
return [text];
|
|
72
|
+
const chunks = [];
|
|
73
|
+
let remaining = text;
|
|
74
|
+
while (remaining.length > maxLength) {
|
|
75
|
+
// Try to find a paragraph break within the limit
|
|
76
|
+
let splitIdx = remaining.lastIndexOf('\n\n', maxLength);
|
|
77
|
+
if (splitIdx <= 0) {
|
|
78
|
+
// Fall back to line break
|
|
79
|
+
splitIdx = remaining.lastIndexOf('\n', maxLength);
|
|
80
|
+
}
|
|
81
|
+
if (splitIdx <= 0) {
|
|
82
|
+
// Hard split at max length
|
|
83
|
+
splitIdx = maxLength;
|
|
84
|
+
}
|
|
85
|
+
chunks.push(remaining.substring(0, splitIdx).trimEnd());
|
|
86
|
+
remaining = remaining.substring(splitIdx).trimStart();
|
|
87
|
+
}
|
|
88
|
+
if (remaining.length > 0) {
|
|
89
|
+
chunks.push(remaining);
|
|
90
|
+
}
|
|
91
|
+
return chunks;
|
|
92
|
+
}
|
|
93
|
+
// --- Private helpers ---
|
|
94
|
+
function formatBudgetLine(label, current, limit, format) {
|
|
95
|
+
const currentStr = format(current);
|
|
96
|
+
if (limit === null)
|
|
97
|
+
return ` ${label}: ${currentStr} (no limit)`;
|
|
98
|
+
const pct = limit > 0 ? Math.round((current / limit) * 100) : 0;
|
|
99
|
+
return ` ${label}: ${currentStr} / ${format(limit)} (${pct}%)`;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/signal/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal transport module public API.
|
|
3
|
+
*/
|
|
4
|
+
export { SignalBotDaemon } from './signal-bot-daemon.js';
|
|
5
|
+
export type { SignalBotDaemonOptions, SignalEnvelope } from './signal-bot-daemon.js';
|
|
6
|
+
export { parseSignalEnvelope, isAuthorizedSender, normalizePhoneNumber } from './signal-bot-daemon.js';
|
|
7
|
+
export { SignalSessionTransport } from './signal-transport.js';
|
|
8
|
+
export { createSignalContainerManager } from './signal-container.js';
|
|
9
|
+
export type { SignalContainerConfig, SignalContainerManager } from './signal-container.js';
|
|
10
|
+
export { resolveSignalConfig, getSignalDataDir, SIGNAL_DEFAULTS } from './signal-config.js';
|
|
11
|
+
export type { SignalConfig, ResolvedSignalConfig } from './signal-config.js';
|
|
12
|
+
export { markdownToSignal } from './markdown-to-signal.js';
|
|
13
|
+
export { formatEscalationBanner, formatBudgetMessage, formatBudgetSummary, splitMessage, SIGNAL_MAX_MESSAGE_LENGTH, } from './format.js';
|
|
14
|
+
export { runBot } from './bot-command.js';
|
|
15
|
+
export type { BotOptions } from './bot-command.js';
|
|
16
|
+
export { runSignalSetup } from './setup-signal.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal transport module public API.
|
|
3
|
+
*/
|
|
4
|
+
export { SignalBotDaemon } from './signal-bot-daemon.js';
|
|
5
|
+
export { parseSignalEnvelope, isAuthorizedSender, normalizePhoneNumber } from './signal-bot-daemon.js';
|
|
6
|
+
export { SignalSessionTransport } from './signal-transport.js';
|
|
7
|
+
export { createSignalContainerManager } from './signal-container.js';
|
|
8
|
+
export { resolveSignalConfig, getSignalDataDir, SIGNAL_DEFAULTS } from './signal-config.js';
|
|
9
|
+
export { markdownToSignal } from './markdown-to-signal.js';
|
|
10
|
+
export { formatEscalationBanner, formatBudgetMessage, formatBudgetSummary, splitMessage, SIGNAL_MAX_MESSAGE_LENGTH, } from './format.js';
|
|
11
|
+
export { runBot } from './bot-command.js';
|
|
12
|
+
export { runSignalSetup } from './setup-signal.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signal/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEvG,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts Markdown to Signal-compatible styled text.
|
|
3
|
+
*
|
|
4
|
+
* Signal's styled text mode supports a subset of inline Markdown:
|
|
5
|
+
* **bold**, *italic*, `mono`, ~strike~ (single tilde).
|
|
6
|
+
*
|
|
7
|
+
* Block-level elements (headings, code blocks, blockquotes, lists)
|
|
8
|
+
* are mapped to plain text with structural whitespace since Signal
|
|
9
|
+
* has no native block formatting.
|
|
10
|
+
*
|
|
11
|
+
* Uses the `marked` lexer to produce an AST, then walks it to emit
|
|
12
|
+
* Signal-compatible markup. This avoids regex-based conversion which
|
|
13
|
+
* would be fragile with nested or overlapping markup.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Converts a Markdown string to Signal-compatible styled text.
|
|
17
|
+
*
|
|
18
|
+
* The returned string contains Signal's inline markup syntax
|
|
19
|
+
* (**bold**, *italic*, `mono`, ~strike~) and is intended to be
|
|
20
|
+
* sent with `text_mode: "styled"` via the signal-cli REST API.
|
|
21
|
+
*
|
|
22
|
+
* Limitations:
|
|
23
|
+
* - No syntax highlighting in code blocks
|
|
24
|
+
* - Headers are bold text, not visually distinct sizes
|
|
25
|
+
* - Tables are rendered as monospace text
|
|
26
|
+
* - Images are replaced with "[Image: alt]" placeholder
|
|
27
|
+
* - Nested blockquotes lose depth distinction
|
|
28
|
+
*/
|
|
29
|
+
export declare function markdownToSignal(markdown: string): string;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts Markdown to Signal-compatible styled text.
|
|
3
|
+
*
|
|
4
|
+
* Signal's styled text mode supports a subset of inline Markdown:
|
|
5
|
+
* **bold**, *italic*, `mono`, ~strike~ (single tilde).
|
|
6
|
+
*
|
|
7
|
+
* Block-level elements (headings, code blocks, blockquotes, lists)
|
|
8
|
+
* are mapped to plain text with structural whitespace since Signal
|
|
9
|
+
* has no native block formatting.
|
|
10
|
+
*
|
|
11
|
+
* Uses the `marked` lexer to produce an AST, then walks it to emit
|
|
12
|
+
* Signal-compatible markup. This avoids regex-based conversion which
|
|
13
|
+
* would be fragile with nested or overlapping markup.
|
|
14
|
+
*/
|
|
15
|
+
import { marked } from 'marked';
|
|
16
|
+
/**
|
|
17
|
+
* Converts a Markdown string to Signal-compatible styled text.
|
|
18
|
+
*
|
|
19
|
+
* The returned string contains Signal's inline markup syntax
|
|
20
|
+
* (**bold**, *italic*, `mono`, ~strike~) and is intended to be
|
|
21
|
+
* sent with `text_mode: "styled"` via the signal-cli REST API.
|
|
22
|
+
*
|
|
23
|
+
* Limitations:
|
|
24
|
+
* - No syntax highlighting in code blocks
|
|
25
|
+
* - Headers are bold text, not visually distinct sizes
|
|
26
|
+
* - Tables are rendered as monospace text
|
|
27
|
+
* - Images are replaced with "[Image: alt]" placeholder
|
|
28
|
+
* - Nested blockquotes lose depth distinction
|
|
29
|
+
*/
|
|
30
|
+
export function markdownToSignal(markdown) {
|
|
31
|
+
const tokens = marked.lexer(markdown);
|
|
32
|
+
const output = [];
|
|
33
|
+
function emit(text) {
|
|
34
|
+
output.push(text);
|
|
35
|
+
}
|
|
36
|
+
function walkTokens(tokens) {
|
|
37
|
+
for (const token of tokens) {
|
|
38
|
+
switch (token.type) {
|
|
39
|
+
case 'heading': {
|
|
40
|
+
const heading = token;
|
|
41
|
+
emit('**');
|
|
42
|
+
walkInline(heading.tokens);
|
|
43
|
+
emit('**\n\n');
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case 'paragraph': {
|
|
47
|
+
const paragraph = token;
|
|
48
|
+
walkInline(paragraph.tokens);
|
|
49
|
+
emit('\n\n');
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case 'code': {
|
|
53
|
+
const code = token;
|
|
54
|
+
emit('`');
|
|
55
|
+
emit(code.text);
|
|
56
|
+
emit('`');
|
|
57
|
+
emit('\n\n');
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
case 'blockquote': {
|
|
61
|
+
const blockquote = token;
|
|
62
|
+
emit('| ');
|
|
63
|
+
walkTokens(blockquote.tokens);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case 'list': {
|
|
67
|
+
const list = token;
|
|
68
|
+
let idx = list.start || 1;
|
|
69
|
+
for (const item of list.items) {
|
|
70
|
+
emit(list.ordered ? `${idx}. ` : '- ');
|
|
71
|
+
walkTokens(item.tokens);
|
|
72
|
+
idx++;
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case 'space':
|
|
77
|
+
emit('\n');
|
|
78
|
+
break;
|
|
79
|
+
case 'hr':
|
|
80
|
+
emit('---\n\n');
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
if ('text' in token && typeof token.text === 'string') {
|
|
84
|
+
emit(token.text);
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function walkInline(tokens) {
|
|
91
|
+
if (!tokens)
|
|
92
|
+
return;
|
|
93
|
+
for (const token of tokens) {
|
|
94
|
+
switch (token.type) {
|
|
95
|
+
case 'strong': {
|
|
96
|
+
const strong = token;
|
|
97
|
+
emit('**');
|
|
98
|
+
walkInline(strong.tokens);
|
|
99
|
+
emit('**');
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case 'em': {
|
|
103
|
+
const em = token;
|
|
104
|
+
emit('*');
|
|
105
|
+
walkInline(em.tokens);
|
|
106
|
+
emit('*');
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case 'codespan': {
|
|
110
|
+
const codespan = token;
|
|
111
|
+
emit('`');
|
|
112
|
+
emit(codespan.text);
|
|
113
|
+
emit('`');
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case 'del': {
|
|
117
|
+
// Markdown ~~ -> Signal single ~
|
|
118
|
+
const del = token;
|
|
119
|
+
emit('~');
|
|
120
|
+
walkInline(del.tokens);
|
|
121
|
+
emit('~');
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case 'link': {
|
|
125
|
+
const link = token;
|
|
126
|
+
walkInline(link.tokens);
|
|
127
|
+
emit(` (${link.href})`);
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
case 'image': {
|
|
131
|
+
const image = token;
|
|
132
|
+
emit(`[Image: ${image.text || 'no description'}]`);
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
case 'text': {
|
|
136
|
+
const textToken = token;
|
|
137
|
+
emit(textToken.text);
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
case 'br':
|
|
141
|
+
emit('\n');
|
|
142
|
+
break;
|
|
143
|
+
default:
|
|
144
|
+
if ('text' in token && typeof token.text === 'string') {
|
|
145
|
+
emit(token.text);
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
walkTokens(tokens);
|
|
152
|
+
return output.join('').trimEnd();
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=markdown-to-signal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-to-signal.js","sourceRoot":"","sources":["../../src/signal/markdown-to-signal.ts"],"names":[],"mappings":"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"}
|