@nac3/forge-cli 0.2.0-alpha.59z.123 → 0.2.0-alpha.59z.158
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/dist/agents/bridge.d.ts +69 -0
- package/dist/agents/bridge.d.ts.map +1 -0
- package/dist/agents/bridge.js +295 -0
- package/dist/agents/bridge.js.map +1 -0
- package/dist/agents/cli_real.d.ts +38 -0
- package/dist/agents/cli_real.d.ts.map +1 -0
- package/dist/agents/cli_real.js +46 -0
- package/dist/agents/cli_real.js.map +1 -0
- package/dist/agents/config_schema.d.ts +1 -1
- package/dist/agents/config_schema.d.ts.map +1 -1
- package/dist/agents/config_schema.js +16 -0
- package/dist/agents/config_schema.js.map +1 -1
- package/dist/agents/defaults.d.ts.map +1 -1
- package/dist/agents/defaults.js.map +1 -1
- package/dist/agents/delegate.d.ts +36 -0
- package/dist/agents/delegate.d.ts.map +1 -0
- package/dist/agents/delegate.js +68 -0
- package/dist/agents/delegate.js.map +1 -0
- package/dist/agents/iterative_step.d.ts +95 -0
- package/dist/agents/iterative_step.d.ts.map +1 -0
- package/dist/agents/iterative_step.js +249 -0
- package/dist/agents/iterative_step.js.map +1 -0
- package/dist/agents/llm_step.d.ts +50 -0
- package/dist/agents/llm_step.d.ts.map +1 -0
- package/dist/agents/llm_step.js +28 -0
- package/dist/agents/llm_step.js.map +1 -0
- package/dist/agents/real_step_factory.d.ts +95 -0
- package/dist/agents/real_step_factory.d.ts.map +1 -0
- package/dist/agents/real_step_factory.js +51 -0
- package/dist/agents/real_step_factory.js.map +1 -0
- package/dist/agents/runner.d.ts +14 -0
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +10 -1
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/runtime.d.ts +115 -0
- package/dist/agents/runtime.d.ts.map +1 -0
- package/dist/agents/runtime.js +429 -0
- package/dist/agents/runtime.js.map +1 -0
- package/dist/agents/system_prompt.d.ts +36 -0
- package/dist/agents/system_prompt.d.ts.map +1 -0
- package/dist/agents/system_prompt.js +101 -0
- package/dist/agents/system_prompt.js.map +1 -0
- package/dist/agents/types.d.ts +12 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/types.js.map +1 -1
- package/dist/bin/yf.d.ts.map +1 -1
- package/dist/bin/yf.js +9 -0
- package/dist/bin/yf.js.map +1 -1
- package/dist/chat/claude_cli.d.ts +42 -0
- package/dist/chat/claude_cli.d.ts.map +1 -0
- package/dist/chat/claude_cli.js +299 -0
- package/dist/chat/claude_cli.js.map +1 -0
- package/dist/chat/graph_snapshot.d.ts +38 -0
- package/dist/chat/graph_snapshot.d.ts.map +1 -0
- package/dist/chat/graph_snapshot.js +159 -0
- package/dist/chat/graph_snapshot.js.map +1 -0
- package/dist/chat/ingest_session.d.ts +24 -4
- package/dist/chat/ingest_session.d.ts.map +1 -1
- package/dist/chat/ingest_session.js +139 -4
- package/dist/chat/ingest_session.js.map +1 -1
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +1358 -0
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/server.d.ts +21 -0
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +904 -4
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/nac3_invoke.d.ts +5 -0
- package/dist/chat/tools/nac3_invoke.d.ts.map +1 -1
- package/dist/chat/tools/nac3_invoke.js +1 -0
- package/dist/chat/tools/nac3_invoke.js.map +1 -1
- package/dist/chat/tools.d.ts.map +1 -1
- package/dist/chat/tools.js +12 -0
- package/dist/chat/tools.js.map +1 -1
- package/dist/commands/agent.d.ts +12 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +92 -1
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/chat.d.ts +10 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +12 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/director.d.ts +37 -0
- package/dist/commands/director.d.ts.map +1 -0
- package/dist/commands/director.js +290 -0
- package/dist/commands/director.js.map +1 -0
- package/dist/core/pilot_setup.d.ts +14 -1
- package/dist/core/pilot_setup.d.ts.map +1 -1
- package/dist/core/pilot_setup.js +62 -1
- package/dist/core/pilot_setup.js.map +1 -1
- package/dist/design/yujin_design_resolver.d.ts +77 -0
- package/dist/design/yujin_design_resolver.d.ts.map +1 -0
- package/dist/design/yujin_design_resolver.js +113 -0
- package/dist/design/yujin_design_resolver.js.map +1 -0
- package/dist/docs/doctrine/default-design-system.md +120 -0
- package/dist/docs/doctrine/language-sovereignty.md +143 -0
- package/dist/docs/doctrine/testing-policy.md +211 -0
- package/dist/nac3/approval_queue.d.ts +8 -0
- package/dist/nac3/approval_queue.d.ts.map +1 -1
- package/dist/nac3/approval_queue.js.map +1 -1
- package/dist/nac3/internal_manifest.d.ts.map +1 -1
- package/dist/nac3/internal_manifest.js +178 -0
- package/dist/nac3/internal_manifest.js.map +1 -1
- package/dist/office/excel.d.ts +22 -0
- package/dist/office/excel.d.ts.map +1 -1
- package/dist/office/excel.js +82 -0
- package/dist/office/excel.js.map +1 -1
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_open.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_unlabeled_button.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_agent_director_consults_workflow_before_dispatch.json +42 -0
- package/dist/qa/brain_matrix/fixtures/scenario_analyst_extracts_then_returns.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_coder_consults_nac_spec_before_writing.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_override_shadcn.json +45 -0
- package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_use_card_template.json +44 -0
- package/dist/qa/brain_matrix/fixtures/scenario_director_delegates_to_analyst.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_director_no_self_delegation.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_director_terminal_done_marker.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_default_design_system.json +50 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_language_sovereignty.json +53 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_testing_policy.json +55 -0
- package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_not_conducive_spa_python.json +61 -0
- package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_user_picks_python.json +48 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_destructive_pauses_for_r8.json +42 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_happy_path_writes_pizarron.json +76 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_network_timeout_graceful.json +41 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_hardcoded_color_use_token.json +47 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_excel_update_cell_picks_right_verb.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_scaffolder_destructive_pauses_for_approval.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_sumie_icon_pick_from_catalog.json +56 -0
- package/dist/qa/brain_matrix/fixtures/scenario_tester_uses_shell_exec_only.json +27 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workflow/graph.d.ts +59 -0
- package/dist/workflow/graph.d.ts.map +1 -0
- package/dist/workflow/graph.js +137 -0
- package/dist/workflow/graph.js.map +1 -0
- package/dist/workflow/state.d.ts +34 -0
- package/dist/workflow/state.d.ts.map +1 -1
- package/dist/workflow/state.js.map +1 -1
- package/docs/doctrine/default-design-system.md +120 -0
- package/docs/doctrine/language-sovereignty.md +143 -0
- package/docs/doctrine/testing-policy.md +211 -0
- package/package.json +102 -100
- package/src/i18n/catalogs/ar.json +20 -1
- package/src/i18n/catalogs/de.json +20 -1
- package/src/i18n/catalogs/en.json +20 -21
- package/src/i18n/catalogs/es.json +20 -21
- package/src/i18n/catalogs/fr.json +20 -1
- package/src/i18n/catalogs/hi.json +20 -1
- package/src/i18n/catalogs/it.json +20 -1
- package/src/i18n/catalogs/ja.json +20 -1
- package/src/i18n/catalogs/pt.json +20 -1
- package/src/i18n/catalogs/zh.json +20 -1
- package/templates/sumi-context.template.md +57 -0
package/dist/bin/yf.js
CHANGED
|
@@ -57,6 +57,15 @@ import { registerGraphCommand } from '../commands/graph.js';
|
|
|
57
57
|
import { registerMcpCommand } from '../commands/mcp.js';
|
|
58
58
|
import { registerNac3Command } from '../commands/nac3.js';
|
|
59
59
|
import { registerAgentCommand } from '../commands/agent.js';
|
|
60
|
+
/* `yf director` CLI removed (redesign/sumi-forge 2026-06-05): the
|
|
61
|
+
* build-side multi-agent orchestrator is gone. The Director +
|
|
62
|
+
* Analyst + Coder + Tester + Scaffolder agent roles were the wrong
|
|
63
|
+
* consumer of the agentic infrastructure. The infrastructure
|
|
64
|
+
* itself (bridge, runtime, store, runner, iterative_step,
|
|
65
|
+
* delegate, real_step_factory, cli_real) survives as a library
|
|
66
|
+
* for product-side agents -- agents the generated software
|
|
67
|
+
* dispatches on the user's machine. See
|
|
68
|
+
* docs/PAPER_SUMI_VS_AGENTIC.md for the rationale. */
|
|
60
69
|
import { VERSION } from '../version.js';
|
|
61
70
|
export function buildProgram() {
|
|
62
71
|
const program = new Command();
|
package/dist/bin/yf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yf.js","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yf.js","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type ClaudeChatRequest, type ClaudeChatResponse } from './claude.js';
|
|
2
|
+
export interface ClaudeCliClientOptions {
|
|
3
|
+
/** Override the `claude` binary path. Defaults to "claude" (PATH-resolved). */
|
|
4
|
+
binary?: string;
|
|
5
|
+
/** Additional directories to grant tool access to via --add-dir. */
|
|
6
|
+
addDirs?: string[];
|
|
7
|
+
/** Allow-list of tools (passed verbatim to --allowed-tools). When
|
|
8
|
+
* unset, all default tools are allowed (bypassPermissions is on). */
|
|
9
|
+
allowedTools?: string[];
|
|
10
|
+
/** Permission mode: 'bypassPermissions' (default, autopilot) |
|
|
11
|
+
* 'default' (interactive). */
|
|
12
|
+
permissionMode?: 'bypassPermissions' | 'default';
|
|
13
|
+
/** Default model: 'sonnet' | 'opus' | 'haiku' | model ID. */
|
|
14
|
+
model?: string;
|
|
15
|
+
/** Hard cap on total subprocess wall-clock. Default 30 min. */
|
|
16
|
+
timeoutMs?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class ClaudeCliClient {
|
|
19
|
+
private readonly opts;
|
|
20
|
+
constructor(opts?: ClaudeCliClientOptions);
|
|
21
|
+
/** Convenience for callers (and tests) that want to know what
|
|
22
|
+
* binary + flags will run before spawning. */
|
|
23
|
+
buildArgs(req: ClaudeChatRequest): string[];
|
|
24
|
+
chat(req: ClaudeChatRequest): Promise<ClaudeChatResponse>;
|
|
25
|
+
}
|
|
26
|
+
/** Probe `claude -p` once with a trivial prompt. Useful as a
|
|
27
|
+
* pre-flight before launching a long-running orchestration: a fresh
|
|
28
|
+
* failure here (binary missing, not logged in, rate limit window
|
|
29
|
+
* exhausted) is much cheaper to detect than to discover mid-sprint.
|
|
30
|
+
*
|
|
31
|
+
* Returns the rate-limit info from the system init event so the
|
|
32
|
+
* caller can decide whether the 5-hour window has room for the
|
|
33
|
+
* upcoming workload. */
|
|
34
|
+
export declare function probeClaudeCli(opts?: ClaudeCliClientOptions): Promise<{
|
|
35
|
+
ok: boolean;
|
|
36
|
+
apiKeySource?: string;
|
|
37
|
+
model?: string;
|
|
38
|
+
rateLimitStatus?: string;
|
|
39
|
+
resetsAt?: number;
|
|
40
|
+
error?: string;
|
|
41
|
+
}>;
|
|
42
|
+
//# sourceMappingURL=claude_cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude_cli.d.ts","sourceRoot":"","sources":["../../src/chat/claude_cli.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAoC,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEhH,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;0EACsE;IACtE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;mCAC+B;IAC/B,cAAc,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACjD,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4ED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAInB;gBAEU,IAAI,GAAE,sBAA2B;IAW7C;mDAC+C;IAC/C,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,EAAE;IAsBrC,IAAI,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA4IhE;AAED;;;;;;;yBAOyB;AACzB,wBAAsB,cAAc,CAAC,IAAI,GAAE,sBAA2B,GAAG,OAAO,CAAC;IAC/E,EAAE,EAAgB,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAK,MAAM,CAAC;IACzB,KAAK,CAAC,EAAY,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAS,MAAM,CAAC;IACzB,KAAK,CAAC,EAAY,MAAM,CAAC;CAC1B,CAAC,CAkDD"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yujin Forge -- Claude Code CLI subprocess client.
|
|
3
|
+
*
|
|
4
|
+
* Drop-in alternative to `ClaudeClient` that routes every chat turn
|
|
5
|
+
* through the `claude -p` binary instead of the Anthropic HTTP API.
|
|
6
|
+
* Billing flows against the user's Claude Code subscription
|
|
7
|
+
* (`apiKeySource: "none"`) instead of the Console balance.
|
|
8
|
+
*
|
|
9
|
+
* Trade-offs vs ClaudeClient (the HTTP path):
|
|
10
|
+
*
|
|
11
|
+
* * The `claude -p` subprocess owns the tool-use loop. The caller's
|
|
12
|
+
* `tools` + `runTool` are ignored; the subprocess uses Claude
|
|
13
|
+
* Code's native tool surface (Read, Edit, Write, Bash, Glob, Grep,
|
|
14
|
+
* Task, plus any MCP servers configured in the user's
|
|
15
|
+
* `~/.claude/config`). This is intentional: for build-side
|
|
16
|
+
* workflows (the redesign/sumi-forge target), the native tools are
|
|
17
|
+
* strictly more efficient than text-routed NAC3 invokes.
|
|
18
|
+
*
|
|
19
|
+
* * Each `chat()` call spawns one subprocess. Latency is dominated
|
|
20
|
+
* by the subprocess startup (~500 ms-1 s) on top of the LLM turn.
|
|
21
|
+
* The output is parsed from the JSONL stream the binary writes to
|
|
22
|
+
* stdout when invoked with `--output-format stream-json --verbose`.
|
|
23
|
+
*
|
|
24
|
+
* * Token + cost accounting comes from the `result` event the binary
|
|
25
|
+
* emits at the end of the run. Those values reflect what the user
|
|
26
|
+
* subscription consumed; they are reported back as `tokensIn` /
|
|
27
|
+
* `tokensOut` for parity with ClaudeClient, with the qualification
|
|
28
|
+
* that under subscription billing the marginal $ cost is zero.
|
|
29
|
+
*
|
|
30
|
+
* * Multi-turn conversation history is concatenated into a single
|
|
31
|
+
* prompt the subprocess sees on stdin. The subprocess does not
|
|
32
|
+
* receive a structured `messages[]` array; the convention is the
|
|
33
|
+
* same role-tagged format the Anthropic SDK uses internally
|
|
34
|
+
* (User: / Assistant:).
|
|
35
|
+
*
|
|
36
|
+
* * No truncation detection: the subprocess does not report stop
|
|
37
|
+
* reasons in a comparable way. The `truncation` field of the
|
|
38
|
+
* response is left undefined.
|
|
39
|
+
*
|
|
40
|
+
* ASCII-only.
|
|
41
|
+
*/
|
|
42
|
+
import { spawn } from 'node:child_process';
|
|
43
|
+
import { ClaudeApiError } from './claude.js';
|
|
44
|
+
/** Convert ChatMessage[] -> single prompt string for `claude -p`.
|
|
45
|
+
* Role-tagged, oldest first. The user's final message is the active
|
|
46
|
+
* turn the subprocess responds to. */
|
|
47
|
+
function flattenMessages(messages) {
|
|
48
|
+
if (messages.length === 0)
|
|
49
|
+
return '';
|
|
50
|
+
const lines = [];
|
|
51
|
+
for (const m of messages) {
|
|
52
|
+
if (m.hidden)
|
|
53
|
+
continue;
|
|
54
|
+
const role = m.role === 'assistant' ? 'Assistant' : 'User';
|
|
55
|
+
lines.push(role + ': ' + m.content);
|
|
56
|
+
}
|
|
57
|
+
return lines.join('\n\n');
|
|
58
|
+
}
|
|
59
|
+
export class ClaudeCliClient {
|
|
60
|
+
opts;
|
|
61
|
+
constructor(opts = {}) {
|
|
62
|
+
this.opts = {
|
|
63
|
+
binary: opts.binary ?? 'claude',
|
|
64
|
+
permissionMode: opts.permissionMode ?? 'bypassPermissions',
|
|
65
|
+
timeoutMs: opts.timeoutMs ?? 30 * 60 * 1000,
|
|
66
|
+
addDirs: opts.addDirs ?? [],
|
|
67
|
+
allowedTools: opts.allowedTools ?? [],
|
|
68
|
+
...(opts.model ? { model: opts.model } : {}),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** Convenience for callers (and tests) that want to know what
|
|
72
|
+
* binary + flags will run before spawning. */
|
|
73
|
+
buildArgs(req) {
|
|
74
|
+
const args = ['-p', '--output-format', 'stream-json', '--verbose'];
|
|
75
|
+
if (this.opts.permissionMode === 'bypassPermissions') {
|
|
76
|
+
args.push('--dangerously-skip-permissions');
|
|
77
|
+
}
|
|
78
|
+
if (this.opts.model) {
|
|
79
|
+
args.push('--model', this.opts.model);
|
|
80
|
+
}
|
|
81
|
+
else if (req.model) {
|
|
82
|
+
args.push('--model', req.model);
|
|
83
|
+
}
|
|
84
|
+
if (req.system && req.system.trim().length > 0) {
|
|
85
|
+
args.push('--append-system-prompt', req.system);
|
|
86
|
+
}
|
|
87
|
+
if (this.opts.allowedTools.length > 0) {
|
|
88
|
+
args.push('--allowed-tools', this.opts.allowedTools.join(' '));
|
|
89
|
+
}
|
|
90
|
+
for (const dir of this.opts.addDirs) {
|
|
91
|
+
args.push('--add-dir', dir);
|
|
92
|
+
}
|
|
93
|
+
return args;
|
|
94
|
+
}
|
|
95
|
+
async chat(req) {
|
|
96
|
+
const prompt = flattenMessages(req.messages);
|
|
97
|
+
const args = this.buildArgs(req);
|
|
98
|
+
/* Spawn the subprocess and feed the prompt on stdin so we are not
|
|
99
|
+
* bounded by the command-line length limit (~32 KB on Windows for
|
|
100
|
+
* a single argument). */
|
|
101
|
+
return await new Promise((resolve, reject) => {
|
|
102
|
+
const child = spawn(this.opts.binary, args, {
|
|
103
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
104
|
+
windowsHide: true,
|
|
105
|
+
});
|
|
106
|
+
const events = [];
|
|
107
|
+
let stdoutBuf = '';
|
|
108
|
+
let stderrBuf = '';
|
|
109
|
+
const finalize = (err) => {
|
|
110
|
+
clearTimeout(timer);
|
|
111
|
+
if (err) {
|
|
112
|
+
reject(err);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
/* Walk the events tail-first: the `result` event is the final
|
|
116
|
+
* authoritative summary. */
|
|
117
|
+
let resultEvent;
|
|
118
|
+
const assistantTexts = [];
|
|
119
|
+
let model = this.opts.model ?? req.model ?? 'claude-code-cli';
|
|
120
|
+
let apiKeySource = '';
|
|
121
|
+
for (const ev of events) {
|
|
122
|
+
if (ev.type === 'result' && resultEvent === undefined) {
|
|
123
|
+
resultEvent = ev;
|
|
124
|
+
}
|
|
125
|
+
else if (ev.type === 'assistant') {
|
|
126
|
+
const msg = ev.message;
|
|
127
|
+
const blocks = msg?.content ?? [];
|
|
128
|
+
for (const b of blocks) {
|
|
129
|
+
if (b.type === 'text' && typeof b.text === 'string') {
|
|
130
|
+
assistantTexts.push(b.text);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (msg?.model)
|
|
134
|
+
model = msg.model;
|
|
135
|
+
}
|
|
136
|
+
else if (ev.type === 'system') {
|
|
137
|
+
const sys = ev;
|
|
138
|
+
if (sys.subtype === 'init' && sys.apiKeySource) {
|
|
139
|
+
apiKeySource = sys.apiKeySource;
|
|
140
|
+
}
|
|
141
|
+
if (sys.subtype === 'init' && sys.model)
|
|
142
|
+
model = sys.model;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (!resultEvent) {
|
|
146
|
+
reject(new ClaudeApiError('claude -p produced no result event', 500));
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (resultEvent.is_error || resultEvent.subtype !== 'success') {
|
|
150
|
+
reject(new ClaudeApiError('claude -p reported error: ' + (resultEvent.api_error_status ?? resultEvent.subtype), 502));
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const text = resultEvent.result ?? assistantTexts.join('');
|
|
154
|
+
const u = resultEvent.usage ?? {};
|
|
155
|
+
const tokensIn = (u.input_tokens ?? 0)
|
|
156
|
+
+ (u.cache_creation_input_tokens ?? 0)
|
|
157
|
+
+ (u.cache_read_input_tokens ?? 0);
|
|
158
|
+
const tokensOut = u.output_tokens ?? 0;
|
|
159
|
+
resolve({
|
|
160
|
+
text,
|
|
161
|
+
tokensIn,
|
|
162
|
+
tokensOut,
|
|
163
|
+
model,
|
|
164
|
+
toolRounds: [],
|
|
165
|
+
});
|
|
166
|
+
/* apiKeySource carries a signal worth surfacing: if it is
|
|
167
|
+
* `"none"`, the call billed against the Claude Code
|
|
168
|
+
* subscription. If it is `"api_key"` or similar, the user
|
|
169
|
+
* environment overrode the auth and the call billed against
|
|
170
|
+
* Console. Callers can inspect this via the model field for
|
|
171
|
+
* now; a richer envelope can be added when needed. */
|
|
172
|
+
void apiKeySource;
|
|
173
|
+
};
|
|
174
|
+
const timer = setTimeout(() => {
|
|
175
|
+
try {
|
|
176
|
+
child.kill('SIGKILL');
|
|
177
|
+
}
|
|
178
|
+
catch { /* ignore */ }
|
|
179
|
+
finalize(new ClaudeApiError('claude -p timed out after ' + this.opts.timeoutMs + 'ms', 504));
|
|
180
|
+
}, this.opts.timeoutMs);
|
|
181
|
+
child.stdout.setEncoding('utf-8');
|
|
182
|
+
child.stdout.on('data', (chunk) => {
|
|
183
|
+
stdoutBuf += chunk;
|
|
184
|
+
let idx;
|
|
185
|
+
while ((idx = stdoutBuf.indexOf('\n')) >= 0) {
|
|
186
|
+
const line = stdoutBuf.slice(0, idx).trim();
|
|
187
|
+
stdoutBuf = stdoutBuf.slice(idx + 1);
|
|
188
|
+
if (line.length === 0)
|
|
189
|
+
continue;
|
|
190
|
+
try {
|
|
191
|
+
const ev = JSON.parse(line);
|
|
192
|
+
events.push(ev);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
/* Non-JSON line -- ignore. The subprocess sometimes
|
|
196
|
+
* writes occasional progress lines that are not part of
|
|
197
|
+
* the JSONL stream. */
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
child.stderr.setEncoding('utf-8');
|
|
202
|
+
child.stderr.on('data', (chunk) => {
|
|
203
|
+
stderrBuf += chunk;
|
|
204
|
+
});
|
|
205
|
+
child.on('error', (err) => {
|
|
206
|
+
finalize(new ClaudeApiError('claude -p spawn failed: ' + err.message + (stderrBuf ? ' (stderr: ' + stderrBuf.slice(0, 500) + ')' : ''), 500));
|
|
207
|
+
});
|
|
208
|
+
child.on('close', (code) => {
|
|
209
|
+
if (code !== 0 && events.length === 0) {
|
|
210
|
+
finalize(new ClaudeApiError('claude -p exited ' + code + ' with no output' + (stderrBuf ? ' (stderr: ' + stderrBuf.slice(0, 500) + ')' : ''), 500));
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
finalize(null);
|
|
214
|
+
});
|
|
215
|
+
try {
|
|
216
|
+
child.stdin.write(prompt);
|
|
217
|
+
child.stdin.end();
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
finalize(err instanceof Error ? err : new Error(String(err)));
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/** Probe `claude -p` once with a trivial prompt. Useful as a
|
|
226
|
+
* pre-flight before launching a long-running orchestration: a fresh
|
|
227
|
+
* failure here (binary missing, not logged in, rate limit window
|
|
228
|
+
* exhausted) is much cheaper to detect than to discover mid-sprint.
|
|
229
|
+
*
|
|
230
|
+
* Returns the rate-limit info from the system init event so the
|
|
231
|
+
* caller can decide whether the 5-hour window has room for the
|
|
232
|
+
* upcoming workload. */
|
|
233
|
+
export async function probeClaudeCli(opts = {}) {
|
|
234
|
+
return await new Promise((resolve) => {
|
|
235
|
+
const args = ['-p', '--output-format', 'stream-json', '--verbose', 'ok?'];
|
|
236
|
+
const child = spawn(opts.binary ?? 'claude', args, {
|
|
237
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
238
|
+
windowsHide: true,
|
|
239
|
+
});
|
|
240
|
+
let buf = '';
|
|
241
|
+
const out = {};
|
|
242
|
+
const timer = setTimeout(() => {
|
|
243
|
+
try {
|
|
244
|
+
child.kill('SIGKILL');
|
|
245
|
+
}
|
|
246
|
+
catch { /* ignore */ }
|
|
247
|
+
resolve({ ok: false, error: 'probe timed out after 60s' });
|
|
248
|
+
}, 60_000);
|
|
249
|
+
child.stdout.setEncoding('utf-8');
|
|
250
|
+
child.stdout.on('data', (chunk) => {
|
|
251
|
+
buf += chunk;
|
|
252
|
+
let idx;
|
|
253
|
+
while ((idx = buf.indexOf('\n')) >= 0) {
|
|
254
|
+
const line = buf.slice(0, idx).trim();
|
|
255
|
+
buf = buf.slice(idx + 1);
|
|
256
|
+
if (!line)
|
|
257
|
+
continue;
|
|
258
|
+
try {
|
|
259
|
+
const ev = JSON.parse(line);
|
|
260
|
+
if (ev.type === 'system' && ev.subtype === 'init') {
|
|
261
|
+
if (ev.apiKeySource)
|
|
262
|
+
out.apiKeySource = ev.apiKeySource;
|
|
263
|
+
if (ev.model)
|
|
264
|
+
out.model = ev.model;
|
|
265
|
+
}
|
|
266
|
+
else if (ev.type === 'rate_limit_event' && ev.rate_limit_info) {
|
|
267
|
+
if (ev.rate_limit_info.status)
|
|
268
|
+
out.rateLimitStatus = ev.rate_limit_info.status;
|
|
269
|
+
if (ev.rate_limit_info.resetsAt)
|
|
270
|
+
out.resetsAt = ev.rate_limit_info.resetsAt;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
catch { /* ignore */ }
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
child.on('error', (err) => {
|
|
277
|
+
clearTimeout(timer);
|
|
278
|
+
resolve({ ok: false, error: 'spawn failed: ' + err.message });
|
|
279
|
+
});
|
|
280
|
+
child.on('close', (code) => {
|
|
281
|
+
clearTimeout(timer);
|
|
282
|
+
const result = {
|
|
283
|
+
ok: code === 0,
|
|
284
|
+
};
|
|
285
|
+
if (out.apiKeySource)
|
|
286
|
+
result.apiKeySource = out.apiKeySource;
|
|
287
|
+
if (out.model)
|
|
288
|
+
result.model = out.model;
|
|
289
|
+
if (out.rateLimitStatus)
|
|
290
|
+
result.rateLimitStatus = out.rateLimitStatus;
|
|
291
|
+
if (out.resetsAt)
|
|
292
|
+
result.resetsAt = out.resetsAt;
|
|
293
|
+
if (code !== 0)
|
|
294
|
+
result.error = 'exit ' + code;
|
|
295
|
+
resolve(result);
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=claude_cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude_cli.js","sourceRoot":"","sources":["../../src/chat/claude_cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface GraphSnapshotNode {
|
|
2
|
+
id: string;
|
|
3
|
+
kind: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface FetcherResult {
|
|
7
|
+
ok: boolean;
|
|
8
|
+
nodes: GraphSnapshotNode[];
|
|
9
|
+
}
|
|
10
|
+
export type SnapshotFetcher = (project_slug: string) => Promise<FetcherResult>;
|
|
11
|
+
export interface BuildOpts {
|
|
12
|
+
project_slug: string;
|
|
13
|
+
fetcher: SnapshotFetcher;
|
|
14
|
+
/** Cap on the rendered text. When a kind's nodes would overflow
|
|
15
|
+
* the budget, the list is truncated with "... +N more". */
|
|
16
|
+
max_tokens?: number;
|
|
17
|
+
/** TTL for the per-slug cache. Default 300s (5 min). */
|
|
18
|
+
ttl_ms?: number;
|
|
19
|
+
/** Override Date.now for deterministic tests. */
|
|
20
|
+
clock?: () => number;
|
|
21
|
+
}
|
|
22
|
+
export interface GraphSnapshotResult {
|
|
23
|
+
/** Whether the fetcher succeeded. ok=true with text="" means
|
|
24
|
+
* "fetched, but no nodes yet" (empty project / fresh ingest). */
|
|
25
|
+
ok: boolean;
|
|
26
|
+
text: string;
|
|
27
|
+
hash: string;
|
|
28
|
+
nodes: GraphSnapshotNode[];
|
|
29
|
+
cached: boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare function _resetSnapshotCacheForTests(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Build the snapshot section for a project, with per-slug hash cache.
|
|
34
|
+
* Failure mode: graceful -- never throws.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildGraphSnapshotSection(opts: BuildOpts): Promise<GraphSnapshotResult>;
|
|
37
|
+
export declare function filterSnapshotForRole(snapshot: GraphSnapshotResult, role: string): string;
|
|
38
|
+
//# sourceMappingURL=graph_snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_snapshot.d.ts","sourceRoot":"","sources":["../../src/chat/graph_snapshot.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAM,MAAM,CAAC;IACf,IAAI,EAAI,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAK,OAAO,CAAC;IACf,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE/E,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAO,eAAe,CAAC;IAC9B;gEAC4D;IAC5D,UAAU,CAAC,EAAG,MAAM,CAAC;IACrB,wDAAwD;IACxD,MAAM,CAAC,EAAO,MAAM,CAAC;IACrB,iDAAiD;IACjD,KAAK,CAAC,EAAQ,MAAM,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC;sEACkE;IAClE,EAAE,EAAM,OAAO,CAAC;IAChB,IAAI,EAAI,MAAM,CAAC;IACf,IAAI,EAAI,MAAM,CAAC;IACf,KAAK,EAAG,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB;AA8BD,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AA6DD;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgC7F;AAcD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBzF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project graph snapshot (Director sprint phase II, slice 11).
|
|
3
|
+
*
|
|
4
|
+
* Compact panoramic view of the project graph that the chat
|
|
5
|
+
* system prompt + every agent run receive every turn. Refresh is
|
|
6
|
+
* hash-based: when the rendered text didn't change, the cached
|
|
7
|
+
* string is reused without any system-prompt drift cost.
|
|
8
|
+
*
|
|
9
|
+
* This is the structural complement to the existing per-intent
|
|
10
|
+
* relevance injection in semantic_graph_inject.ts. The chat
|
|
11
|
+
* gets BOTH: this snapshot above (panorama) + the relevance
|
|
12
|
+
* section below (zoom). Agents only get this snapshot, filtered
|
|
13
|
+
* by their role -- they have no "user message" to rank against.
|
|
14
|
+
*
|
|
15
|
+
* Failure mode: graceful. If the fetcher returns ok=false or
|
|
16
|
+
* throws, the section is "" and the chat / agent continues
|
|
17
|
+
* without it.
|
|
18
|
+
*
|
|
19
|
+
* ASCII-only.
|
|
20
|
+
*/
|
|
21
|
+
import crypto from 'node:crypto';
|
|
22
|
+
/* The kinds we render, in order. New worker-side kinds appear
|
|
23
|
+
* under "other" so the snapshot is forward-compatible. */
|
|
24
|
+
const KIND_ORDER = [
|
|
25
|
+
{ key: 'entity', label: 'entities' },
|
|
26
|
+
{ key: 'endpoint', label: 'endpoints' },
|
|
27
|
+
{ key: 'component', label: 'components' },
|
|
28
|
+
{ key: 'utility', label: 'utilities' },
|
|
29
|
+
{ key: 'agent', label: 'agents' },
|
|
30
|
+
{ key: 'doctrine', label: 'doctrines' },
|
|
31
|
+
{ key: 'template', label: 'templates' },
|
|
32
|
+
];
|
|
33
|
+
const FOOTER = [
|
|
34
|
+
'',
|
|
35
|
+
'When you reference a primitive from this snapshot, USE that ID.',
|
|
36
|
+
'Do NOT reinvent. For full schema of one primitive, call',
|
|
37
|
+
'yujin.semantic-graph.get({id}).',
|
|
38
|
+
].join('\n');
|
|
39
|
+
const CACHE = new Map();
|
|
40
|
+
export function _resetSnapshotCacheForTests() {
|
|
41
|
+
CACHE.clear();
|
|
42
|
+
}
|
|
43
|
+
/** Approximate token budget into char budget (4 chars/token). */
|
|
44
|
+
function tokenBudgetToChars(tokens) {
|
|
45
|
+
return tokens * 4;
|
|
46
|
+
}
|
|
47
|
+
function renderSnapshot(nodes, maxTokens, hash, fetchedAt) {
|
|
48
|
+
if (nodes.length === 0)
|
|
49
|
+
return '';
|
|
50
|
+
const lines = [];
|
|
51
|
+
/* Header carries the hash + a human time so the LLM (and a
|
|
52
|
+
* developer reading the prompt log) can tell at a glance when
|
|
53
|
+
* the snapshot was last refreshed. */
|
|
54
|
+
const ts = new Date(fetchedAt).toISOString().slice(11, 19);
|
|
55
|
+
lines.push('PROJECT GRAPH SNAPSHOT (fresh at ' + ts + ' UTC; hash ' + hash.slice(0, 8) + '):');
|
|
56
|
+
lines.push('');
|
|
57
|
+
const charBudget = Math.max(200, tokenBudgetToChars(maxTokens));
|
|
58
|
+
/* Reserve room for the footer + the header lines. */
|
|
59
|
+
let charsLeft = charBudget - FOOTER.length - lines.join('\n').length;
|
|
60
|
+
for (const { key, label } of KIND_ORDER) {
|
|
61
|
+
const kindNodes = nodes.filter((n) => n.kind === key);
|
|
62
|
+
if (kindNodes.length === 0)
|
|
63
|
+
continue;
|
|
64
|
+
const labels = kindNodes.map((n) => n.label || n.id);
|
|
65
|
+
/* Pad header label to a fixed width for alignment when read in
|
|
66
|
+
* raw text. */
|
|
67
|
+
const padded = (label + ' ').slice(0, 14);
|
|
68
|
+
let row = ' ' + padded + labels.join(', ');
|
|
69
|
+
if (row.length + 1 > charsLeft) {
|
|
70
|
+
/* Truncate the list, append "... +N more" so the LLM knows
|
|
71
|
+
* there are more nodes than rendered. */
|
|
72
|
+
const head = [];
|
|
73
|
+
let used = (' ' + padded).length;
|
|
74
|
+
let kept = 0;
|
|
75
|
+
for (const lab of labels) {
|
|
76
|
+
const grow = head.length === 0 ? lab.length : 2 + lab.length;
|
|
77
|
+
if (used + grow + 12 > charsLeft)
|
|
78
|
+
break;
|
|
79
|
+
head.push(lab);
|
|
80
|
+
used += grow;
|
|
81
|
+
kept += 1;
|
|
82
|
+
}
|
|
83
|
+
const remainder = labels.length - kept;
|
|
84
|
+
row = ' ' + padded + head.join(', ') + (remainder > 0 ? ', ... +' + remainder + ' more' : '');
|
|
85
|
+
}
|
|
86
|
+
lines.push(row);
|
|
87
|
+
charsLeft -= (row.length + 1);
|
|
88
|
+
if (charsLeft < 40)
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
lines.push(FOOTER);
|
|
92
|
+
return lines.join('\n');
|
|
93
|
+
}
|
|
94
|
+
function hashNodes(nodes) {
|
|
95
|
+
/* Stable hash: sort by id+kind so reordering does not produce
|
|
96
|
+
* a fake mutation. */
|
|
97
|
+
const sorted = nodes.map((n) => n.kind + ':' + n.id).sort();
|
|
98
|
+
return crypto.createHash('sha256').update(sorted.join('\n')).digest('hex');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Build the snapshot section for a project, with per-slug hash cache.
|
|
102
|
+
* Failure mode: graceful -- never throws.
|
|
103
|
+
*/
|
|
104
|
+
export async function buildGraphSnapshotSection(opts) {
|
|
105
|
+
const slug = opts.project_slug;
|
|
106
|
+
const maxTk = opts.max_tokens ?? 400;
|
|
107
|
+
const ttl = opts.ttl_ms ?? 300_000;
|
|
108
|
+
const now = (opts.clock ?? Date.now)();
|
|
109
|
+
const cached = CACHE.get(slug);
|
|
110
|
+
if (cached && (now - cached.fetched_at) < ttl) {
|
|
111
|
+
return {
|
|
112
|
+
ok: true,
|
|
113
|
+
text: cached.text,
|
|
114
|
+
hash: cached.hash,
|
|
115
|
+
nodes: cached.nodes,
|
|
116
|
+
cached: true,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
let fetched;
|
|
120
|
+
try {
|
|
121
|
+
fetched = await opts.fetcher(slug);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return { ok: false, text: '', hash: '', nodes: [], cached: false };
|
|
125
|
+
}
|
|
126
|
+
if (!fetched.ok) {
|
|
127
|
+
return { ok: false, text: '', hash: '', nodes: [], cached: false };
|
|
128
|
+
}
|
|
129
|
+
const hash = hashNodes(fetched.nodes);
|
|
130
|
+
const text = renderSnapshot(fetched.nodes, maxTk, hash, now);
|
|
131
|
+
CACHE.set(slug, { text, hash, nodes: fetched.nodes, fetched_at: now });
|
|
132
|
+
return { ok: true, text, hash, nodes: fetched.nodes, cached: false };
|
|
133
|
+
}
|
|
134
|
+
/* ============================================================
|
|
135
|
+
* Per-agent role filter.
|
|
136
|
+
* ============================================================ */
|
|
137
|
+
const ROLE_KINDS = {
|
|
138
|
+
director: ['entity', 'endpoint', 'component', 'utility', 'agent', 'doctrine', 'template'],
|
|
139
|
+
analyst: ['entity', 'endpoint', 'doctrine'],
|
|
140
|
+
coder: ['component', 'utility', 'doctrine', 'template'],
|
|
141
|
+
tester: ['endpoint', 'doctrine'],
|
|
142
|
+
scaffolder: ['doctrine'],
|
|
143
|
+
};
|
|
144
|
+
export function filterSnapshotForRole(snapshot, role) {
|
|
145
|
+
const allowed = ROLE_KINDS[role];
|
|
146
|
+
/* Unknown role -> render the full set of nodes so a freshly
|
|
147
|
+
* added agent role still receives panorama. The maintainer can
|
|
148
|
+
* tighten the subset later by adding a ROLE_KINDS row. */
|
|
149
|
+
const nodes = allowed
|
|
150
|
+
? snapshot.nodes.filter((n) => allowed.includes(n.kind))
|
|
151
|
+
: snapshot.nodes;
|
|
152
|
+
if (nodes.length === 0)
|
|
153
|
+
return '';
|
|
154
|
+
const hash = snapshot.hash || hashNodes(nodes);
|
|
155
|
+
const fakeNow = Date.now();
|
|
156
|
+
const body = renderSnapshot(nodes, 600, hash, fakeNow);
|
|
157
|
+
return body.replace(/PROJECT GRAPH SNAPSHOT \(fresh at[^)]+\):/, 'PROJECT GRAPH SNAPSHOT (filtered for ' + role + '):');
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=graph_snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_snapshot.js","sourceRoot":"","sources":["../../src/chat/graph_snapshot.ts"],"names":[],"mappings":"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"}
|