claude-token-saver 3.37.0 → 3.38.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.
- package/README.ko.md +3 -1
- package/README.md +3 -1
- package/bin/cli.js +8 -1
- package/package.json +1 -1
- package/presets/cohesion/cohesion-en.md +26 -0
- package/src/cohesion.js +70 -0
- package/src/commands/cohesion.js +59 -0
- package/src/commands/route-scan.js +10 -0
package/README.ko.md
CHANGED
|
@@ -214,6 +214,7 @@ Claude Code 안에서 `/claude-token-saver` Skill을 실행하거나, 칩에 적
|
|
|
214
214
|
| `claude-token-saver route-scan savings` | 라우팅 절감 원장입니다. 모델 이동별 합계와 실행별 내역을 함께 보여 주며, 표시되는 금액의 근거가 됩니다 |
|
|
215
215
|
| `claude-token-saver compact-window` | 1M 컨텍스트를 쓰면서 자동 압축 창이 설정되지 않았으면 경고하고, `set`으로 40만에 고정합니다 (아래 참고) |
|
|
216
216
|
| `claude-token-saver korean on\|off\|status` | 한국어 문체 지침을 세션 시작 시 주입하고, 쓰기 시점 검사를 함께 설치합니다 (아래 참고) |
|
|
217
|
+
| `claude-token-saver cohesion on\|off\|status\|show` | 영어 문장 연결(응집성) 지침을 세션 시작 시 주입합니다 |
|
|
217
218
|
| `claude-token-saver korean lint block\|warn\|off` | 쓰기 시점 검사가 위반을 어떻게 처리할지 정합니다 |
|
|
218
219
|
| `claude-token-saver korean lint scope all\|prose` | 검사 범위를 모든 텍스트 파일과 문서 전용 사이에서 고릅니다 |
|
|
219
220
|
| `claude-token-saver doc2md on\|off` | 첨부 문서를 모델이 읽기 전에 Markdown 으로 변환합니다 (아래 참고) |
|
|
@@ -416,7 +417,7 @@ Claude Code의 output style로도 같은 일을 할 수 있지만, output style
|
|
|
416
417
|
- **상투 패턴**: 자동으로 붙는 수식어("다양한", "핵심적인"), 표지판 문장, 수사적 질문 뒤 즉답, 근거 없는 긍정 마무리.
|
|
417
418
|
- **응집성**: 문장이 이어지는 방식이라 정규식으로는 검사하지 못합니다. 이 절의 방향을 정한 연구 결과가 있습니다. 접속어·지시어 같은 표층 연결 장치는 글의 품질과 상관이 없거나 오히려 부적 상관이고, 앞 문장이 내놓은 정보를 다음 문장이 받아 풀어 주는 상술형 연결만 정적 상관을 보였습니다. 그래서 지침은 연결이 어색할 때 접속어를 더하지 말고 정보의 배열(아는 것 먼저, 새 것 나중)을 고치라고 말합니다.
|
|
418
419
|
|
|
419
|
-
응집성 층의 원칙 대부분은 한국어에만 해당하지 않습니다. 구정보 우선 배열, 대명사의 단일 지시, 문단 안 주어 유지, 비약을 잇는 다리 문장, 짧은 반복 문장 병합은 영어 산문에도 그대로 적용됩니다. 논문이 한국어 학습자를 다뤘을 뿐, 검증된 원칙은 텍스트언어학의 표준 응집성 모형입니다.
|
|
420
|
+
응집성 층의 원칙 대부분은 한국어에만 해당하지 않습니다. 구정보 우선 배열, 대명사의 단일 지시, 문단 안 주어 유지, 비약을 잇는 다리 문장, 짧은 반복 문장 병합은 영어 산문에도 그대로 적용됩니다. 논문이 한국어 학습자를 다뤘을 뿐, 검증된 원칙은 텍스트언어학의 표준 응집성 모형입니다. 영어 산출물에는 `claude-token-saver cohesion on`이 같은 다섯 원칙을 영어 블록으로 주입합니다 (korean 지침이 켜져 있으면 중복이라 생략됩니다).
|
|
420
421
|
|
|
421
422
|
마지막 절은 고치면 안 되는 것을 명시합니다. 정착된 전문 용어, 문어체, 원문 인용이 그것이고, 검사가 내는 지적은 판정이 아니라 확인 요청입니다.
|
|
422
423
|
|
|
@@ -601,6 +602,7 @@ npm uninstall -g claude-cache-monitor && npm i -g claude-token-saver
|
|
|
601
602
|
|
|
602
603
|
전체 내역은 [CHANGELOG.md](./CHANGELOG.md)로 옮겼습니다. 최근 변경은 다음과 같습니다.
|
|
603
604
|
|
|
605
|
+
- **v3.38.0**: `cohesion on`이 응집성 다섯 원칙을 영어 블록으로 주입합니다. 옵트인이고, korean 지침이 켜져 있으면 중복 주입을 막습니다.
|
|
604
606
|
- **v3.37.0**: 한국어 지침에 보강 지침(supplement)이 붙습니다. 번역투·상투 패턴·응집성(문장 이어짐) 조항이며, 쓰기 시점 검사에도 번역투 5종이 추가됐습니다. 실파일 255개 실측에서 오탐 1건으로 검증했습니다.
|
|
605
607
|
- **v3.35.0**: 이번 달 1일 00시 이후 지출 추정치를 `💵 Sep $42` 세그먼트로 상시 표시합니다. LiteLLM 게이트웨이 사용자는 키의 max_budget/spend 를 `🔑 budget` 게이지로 봅니다 (5h/7d cap 이 없는 Bedrock·LiteLLM 환경 대응).
|
|
606
608
|
- **v3.34.0**: seed 프리셋 제안, 설치 시 출력 언어 선택, 컨텍스트 경고 500k 상향. 상세는 CHANGELOG 참고.
|
package/README.md
CHANGED
|
@@ -217,6 +217,7 @@ Run these in your shell (inside Claude Code, the `/claude-token-saver` Skill is
|
|
|
217
217
|
| `claude-token-saver route-scan savings` | The routing-savings ledger — per-model-change rollup + per-run log (the evidence behind the figure) |
|
|
218
218
|
| `claude-token-saver compact-window` | Warn when a 1M-context session has no auto-compact cap → pin 400k with `set` (below) |
|
|
219
219
|
| `claude-token-saver korean on\|off\|status` | Inject Korean writing guidance at session start and install the write-time check (below) |
|
|
220
|
+
| `claude-token-saver cohesion on\|off\|status\|show` | Inject English cohesion guidance (sentence-connection rules) at session start |
|
|
220
221
|
| `claude-token-saver korean lint block\|warn\|off` | How the write-time check handles findings |
|
|
221
222
|
| `claude-token-saver korean lint scope all\|prose` | Check every text file, or documents only |
|
|
222
223
|
| `claude-token-saver doc2md on\|off` | Convert attached documents to Markdown before the model reads them (below) |
|
|
@@ -428,7 +429,7 @@ It adds three layers:
|
|
|
428
429
|
- **AI-writing tics**: automatic intensifiers ("다양한", "핵심적인"), signpost sentences, rhetorical question-then-answer, unconditionally upbeat endings.
|
|
429
430
|
- **Cohesion** — how sentences connect, which no regex can check. The research finding that shapes this section: surface connectives (conjunctions, demonstratives) correlate *negatively or not at all* with judged text quality, while elaboration — the next sentence picking up and unpacking what the previous one introduced — is the only connection type with a positive correlation. So the guidance says: when a transition feels rough, fix the information order (given before new), don't add a connective.
|
|
430
431
|
|
|
431
|
-
**Most of the cohesion layer is not Korean-specific.** Given-before-new ordering (the "given-new contract"), one clear referent per pronoun, keeping one subject per paragraph, bridging sentences instead of leaping, and merging choppy repetitive sentences into a modifier-plus-core structure apply to English prose the same way — the studies happen to be about Korean learners, but the principles they validate are the standard cohesion model from text linguistics. If you write English deliverables with Claude, those five rules
|
|
432
|
+
**Most of the cohesion layer is not Korean-specific.** Given-before-new ordering (the "given-new contract"), one clear referent per pronoun, keeping one subject per paragraph, bridging sentences instead of leaping, and merging choppy repetitive sentences into a modifier-plus-core structure apply to English prose the same way — the studies happen to be about Korean learners, but the principles they validate are the standard cohesion model from text linguistics. If you write English deliverables with Claude, run `claude-token-saver cohesion on` — it injects exactly those five rules as a standalone English block (~0.5k tokens per session), no Korean feature required. While `korean on` is active the block is suppressed, because the Korean supplement already carries the same rules.
|
|
432
433
|
|
|
433
434
|
A final subsection lists what must **not** be "corrected": settled domain terms, formal register, and verbatim quotations — every lint finding is a request to confirm, not a verdict.
|
|
434
435
|
|
|
@@ -722,6 +723,7 @@ Also update `statusLine.command` in `~/.claude/settings.json` to `claude-token-s
|
|
|
722
723
|
|
|
723
724
|
The full history moved to [CHANGELOG.md](./CHANGELOG.md) (Korean; version headings and command names are language-neutral). Recent changes:
|
|
724
725
|
|
|
726
|
+
- **v3.38.0**: `cohesion on` — the language-neutral cohesion rules from the Korean supplement become a standalone English injection (given-before-new, one referent per pronoun, subject consistency, bridging, merging choppy sentences). Opt-in, ~0.5k tokens per session, suppressed while `korean on` already carries them.
|
|
725
727
|
- **v3.37.0**: Korean guidance grows a conservative supplement (translationese, AI-writing tics, a research-backed cohesion section whose principles apply to English prose too) and the write-time lint gains 5 translationese patterns, validated at 1 false positive across 255 real files.
|
|
726
728
|
- **v3.35.0**: A `💵 Sep $42` segment now shows estimated spend since 00:00 on the 1st of the current month, always on — including gateway setups with no 5h/7d caps. LiteLLM gateway users get a `🔑 budget ▰▱ 34% $34/$100` gauge built from the key's budget (`GET /key/info` + `GET /user/info`, team-membership budget first, then key, then internal user — verified against a Dockerized LiteLLM).
|
|
727
729
|
- **v3.34.0**: seed presets offered one at a time, output-language choice at install, context warning raised to 500k.
|
package/bin/cli.js
CHANGED
|
@@ -85,7 +85,7 @@ function readUpdateChip() {
|
|
|
85
85
|
|
|
86
86
|
// Subcommands this build knows how to run. Used only by the guard below.
|
|
87
87
|
const KNOWN_SUBCOMMANDS = new Set([
|
|
88
|
-
'last', 'brief', 'history', 'handoff', 'install', 'uninstall', 'mode', 'korean',
|
|
88
|
+
'last', 'brief', 'history', 'handoff', 'install', 'uninstall', 'mode', 'korean', 'cohesion',
|
|
89
89
|
'doc2md', 'harness', 'route-scan', 'compact-window', 'update-check', 'upgrade',
|
|
90
90
|
'seed', 'litellm-budget',
|
|
91
91
|
]);
|
|
@@ -218,6 +218,13 @@ async function main() {
|
|
|
218
218
|
return (await import('../src/commands/korean.js')).run({ args, hasFlag });
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
+
// Subcommand: cohesion — English sentence-connection guidance injected at
|
|
222
|
+
// session start; the language-neutral half of the Korean supplement.
|
|
223
|
+
// claude-token-saver cohesion on | off | status | show
|
|
224
|
+
if (args[0] === 'cohesion') {
|
|
225
|
+
return (await import('../src/commands/cohesion.js')).run({ args, hasFlag });
|
|
226
|
+
}
|
|
227
|
+
|
|
221
228
|
// Subcommand: doc2md — convert pptx/xlsx/pdf/docx to Markdown before the
|
|
222
229
|
// model reads them, so an unreadable binary never enters the context window.
|
|
223
230
|
// claude-token-saver doc2md on | off | <file> | --clean
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-token-saver",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.38.0",
|
|
4
4
|
"description": "Route the easy work your expensive Claude model keeps repeating down to haiku/sonnet — post-hoc session analysis, no realtime router, no extra LLM calls.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
English cohesion guidance — claude-token-saver's own text, distilled from the
|
|
3
|
+
same sources as the Korean supplement's cohesion section: the given-new
|
|
4
|
+
contract from text linguistics, and three studies on Korean learner writing
|
|
5
|
+
whose validated principles are language-neutral (surface connectives
|
|
6
|
+
correlate negatively or not at all with judged text quality; elaboration is
|
|
7
|
+
the only connection type with a positive correlation).
|
|
8
|
+
|
|
9
|
+
Injected at session start when `claude-token-saver cohesion on` is set and
|
|
10
|
+
the Korean guidance is off (the Korean supplement already carries these
|
|
11
|
+
rules, so injecting both would bill the same principles twice).
|
|
12
|
+
-->
|
|
13
|
+
|
|
14
|
+
Follow these rules whenever you write English prose the user will read — answers, documents, reports, comments, UI copy. They govern how sentences connect, which is where generated text most often reads as stilted even when every sentence is individually fine.
|
|
15
|
+
|
|
16
|
+
1. **Move from known to new.** Start each sentence with information the reader already has; put the new information at the end. Let the next sentence pick up that new information and unpack it. When a transition feels rough, fix this ordering first — do not reach for a connective. Research on text quality found that surface connectives (however, moreover, additionally) correlate negatively or not at all with judged quality; elaboration — the next sentence developing what the previous one introduced — is the only connection type that correlates positively.
|
|
17
|
+
|
|
18
|
+
2. **One clear referent per pronoun.** If "it", "this", or "they" could point at more than one thing in the previous sentence, repeat the noun instead. Introduce people and organizations with a role tag on first mention ("the maintainer, Alice Park") rather than dropping a bare name.
|
|
19
|
+
|
|
20
|
+
3. **Keep one subject per paragraph.** Changing the grammatical subject every sentence forces the reader to reorient each time. Stay with one subject unless the topic actually shifts.
|
|
21
|
+
|
|
22
|
+
4. **No leaps.** If a sentence presupposes a condition or a cause the text has not established, add the bridging sentence rather than trusting the reader to reconstruct it. The most common failure is a new entity appearing with a definite article ("the report", "the agent") before anything has introduced it.
|
|
23
|
+
|
|
24
|
+
5. **Merge choppy repetition.** Three short sentences circling the same subject read worse than one sentence with the minor facts folded into modifiers. Demote the less important sentence to a clause; keep the core claim as the main clause.
|
|
25
|
+
|
|
26
|
+
Do not overcorrect: settled domain terms, formal register, and verbatim quotations stay as they are.
|
package/src/cohesion.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cohesion — English sentence-connection guidance injected at session start.
|
|
3
|
+
*
|
|
4
|
+
* The Korean supplement's cohesion section turned out to be language-neutral:
|
|
5
|
+
* given-before-new ordering, one referent per pronoun, subject consistency,
|
|
6
|
+
* bridging instead of leaping, merging choppy sentences. English-only users
|
|
7
|
+
* never run `korean on`, so those rules never reached them. This module ships
|
|
8
|
+
* the same principles as a standalone English block.
|
|
9
|
+
*
|
|
10
|
+
* Off by default for the same reason the Korean guidance is opt-in: a
|
|
11
|
+
* token-saving tool has no business silently billing ~0.5k tokens a session.
|
|
12
|
+
* Enable with `claude-token-saver cohesion on`.
|
|
13
|
+
*
|
|
14
|
+
* When the Korean guidance is enabled, this block is NOT injected even if
|
|
15
|
+
* enabled: the Korean supplement already carries the cohesion rules, and
|
|
16
|
+
* injecting the same principles twice bills them twice.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
20
|
+
import { join, dirname } from 'node:path';
|
|
21
|
+
import { fileURLToPath } from 'node:url';
|
|
22
|
+
import { loadConfig, saveConfig } from './config.js';
|
|
23
|
+
|
|
24
|
+
const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..');
|
|
25
|
+
|
|
26
|
+
export const COHESION_PATH = join(packageRoot, 'presets', 'cohesion', 'cohesion-en.md');
|
|
27
|
+
|
|
28
|
+
/** Whether session-start injection is enabled. Off unless the user asked. */
|
|
29
|
+
export function cohesionEnabled(cfg = loadConfig()) {
|
|
30
|
+
return cfg?.cohesion?.enabled === true;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function setCohesionEnabled(enabled) {
|
|
34
|
+
const cfg = loadConfig();
|
|
35
|
+
cfg.cohesion = { ...(cfg.cohesion || {}), enabled: !!enabled };
|
|
36
|
+
saveConfig(cfg);
|
|
37
|
+
return cfg.cohesion;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** The guidance text with the provenance comment stripped, or null. */
|
|
41
|
+
export function cohesionText() {
|
|
42
|
+
try {
|
|
43
|
+
if (!existsSync(COHESION_PATH)) return null;
|
|
44
|
+
const raw = readFileSync(COHESION_PATH, 'utf8');
|
|
45
|
+
const body = raw.replace(/^<!--[\s\S]*?-->\s*/, '').trim();
|
|
46
|
+
return body || null;
|
|
47
|
+
} catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Block to inject at session start, or null when disabled, unavailable, or
|
|
54
|
+
* redundant (Korean guidance on — its supplement already carries these rules).
|
|
55
|
+
*/
|
|
56
|
+
export async function cohesionInjection({ cfg = loadConfig() } = {}) {
|
|
57
|
+
if (!cohesionEnabled(cfg)) return null;
|
|
58
|
+
try {
|
|
59
|
+
const { koreanStyleEnabled } = await import('./korean-style.js');
|
|
60
|
+
if (koreanStyleEnabled(cfg)) return null;
|
|
61
|
+
} catch { /* korean module unavailable: inject normally */ }
|
|
62
|
+
const text = cohesionText();
|
|
63
|
+
if (!text) return null;
|
|
64
|
+
return [
|
|
65
|
+
'[claude-token-saver cohesion] Follow this guidance for English prose in this session.',
|
|
66
|
+
'The user enabled it in claude-token-saver.',
|
|
67
|
+
'',
|
|
68
|
+
text,
|
|
69
|
+
].join('\n');
|
|
70
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subcommand: cohesion — English sentence-connection guidance for every session.
|
|
3
|
+
* claude-token-saver cohesion on # inject at session start, all projects
|
|
4
|
+
* claude-token-saver cohesion off # stop injecting
|
|
5
|
+
* claude-token-saver cohesion status # current state and cost
|
|
6
|
+
* claude-token-saver cohesion show # print the guidance itself
|
|
7
|
+
*
|
|
8
|
+
* The English sibling of `korean on`, carrying only the language-neutral
|
|
9
|
+
* cohesion rules (given-before-new, one referent per pronoun, subject
|
|
10
|
+
* consistency, bridging, merging choppy sentences). No lint: every clause
|
|
11
|
+
* needs judgement, so nothing here is machine-checkable.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export async function run({ args }) {
|
|
15
|
+
const sub = args[1] || 'status';
|
|
16
|
+
const co = await import('../cohesion.js');
|
|
17
|
+
const { userLanguage } = await import('../config.js');
|
|
18
|
+
const lang = userLanguage();
|
|
19
|
+
|
|
20
|
+
if (sub === 'on' || sub === 'off') {
|
|
21
|
+
co.setCohesionEnabled(sub === 'on');
|
|
22
|
+
if (sub === 'on') {
|
|
23
|
+
console.log(lang === 'ko'
|
|
24
|
+
? '✍️ cohesion on: 다음 세션부터 영어 문장 연결 지침이 주입됩니다 (약 0.5k 토큰/세션, 세션 시작 1회).'
|
|
25
|
+
: '✍️ cohesion on — English cohesion guidance will be injected from the next session (~0.5k tokens per session, once at session start).');
|
|
26
|
+
const { koreanStyleEnabled } = await import('../korean-style.js');
|
|
27
|
+
if (koreanStyleEnabled()) {
|
|
28
|
+
console.log(lang === 'ko'
|
|
29
|
+
? '참고: korean 지침이 켜져 있는 동안에는 같은 원칙이 이미 들어가므로 이 블록은 주입되지 않습니다.'
|
|
30
|
+
: 'Note: while the Korean guidance is on, its supplement already carries these rules, so this block is not injected.');
|
|
31
|
+
}
|
|
32
|
+
} else {
|
|
33
|
+
console.log(lang === 'ko' ? 'cohesion off: 더 이상 주입하지 않습니다.' : 'cohesion off — no longer injected.');
|
|
34
|
+
}
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (sub === 'show') {
|
|
39
|
+
const text = co.cohesionText();
|
|
40
|
+
if (!text) {
|
|
41
|
+
console.error('cohesion guidance file missing: ' + co.COHESION_PATH);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
console.log(text);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// status (default)
|
|
49
|
+
const enabled = co.cohesionEnabled();
|
|
50
|
+
const { koreanStyleEnabled } = await import('../korean-style.js');
|
|
51
|
+
const suppressed = enabled && koreanStyleEnabled();
|
|
52
|
+
if (lang === 'ko') {
|
|
53
|
+
console.log(`cohesion: ${enabled ? 'on' : 'off'}${suppressed ? ' (korean 지침이 켜져 있어 주입은 생략됨)' : ''}`);
|
|
54
|
+
console.log('영어 산문의 문장 연결 지침을 세션 시작에 주입합니다. 켜기: claude-token-saver cohesion on');
|
|
55
|
+
} else {
|
|
56
|
+
console.log(`cohesion: ${enabled ? 'on' : 'off'}${suppressed ? ' (suppressed while the Korean guidance is on — it already carries these rules)' : ''}`);
|
|
57
|
+
console.log('Injects English cohesion guidance at session start. Enable with: claude-token-saver cohesion on');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -251,6 +251,14 @@ export async function run({ args, hasFlag, numArg }) {
|
|
|
251
251
|
koreanBlock = koreanStyleInjection();
|
|
252
252
|
} catch (e) { debug('route-scan:korean-style', e); /* style is optional */ }
|
|
253
253
|
|
|
254
|
+
// English cohesion guidance, when enabled. Same round-trip; skipped
|
|
255
|
+
// internally when the Korean guidance already carries the same rules.
|
|
256
|
+
let cohesionBlock = null;
|
|
257
|
+
try {
|
|
258
|
+
const { cohesionInjection } = await import('../cohesion.js');
|
|
259
|
+
cohesionBlock = await cohesionInjection();
|
|
260
|
+
} catch (e) { debug('route-scan:cohesion', e); /* the guidance is optional */ }
|
|
261
|
+
|
|
254
262
|
// doc2md's standing note, only when the user turned the feature on.
|
|
255
263
|
// Rides the same SessionStart round-trip as the style block for the same
|
|
256
264
|
// reason: one injection, one cached prefix. It carries the two things the
|
|
@@ -312,6 +320,7 @@ export async function run({ args, hasFlag, numArg }) {
|
|
|
312
320
|
if (seedBlock) console.log(seedBlock);
|
|
313
321
|
if (doc2mdBlock) console.log(doc2mdBlock);
|
|
314
322
|
if (koreanBlock) console.log(koreanBlock);
|
|
323
|
+
if (cohesionBlock) console.log(cohesionBlock);
|
|
315
324
|
return; // nothing else to inject
|
|
316
325
|
}
|
|
317
326
|
if (updateBlock) console.log(updateBlock);
|
|
@@ -383,6 +392,7 @@ export async function run({ args, hasFlag, numArg }) {
|
|
|
383
392
|
// Style first, briefing second: the briefing is Korean prose too, so the
|
|
384
393
|
// guidance has to be in context before the model reads it.
|
|
385
394
|
if (koreanBlock) console.log(koreanBlock + '\n');
|
|
395
|
+
if (cohesionBlock) console.log(cohesionBlock + '\n');
|
|
386
396
|
console.log(lines.join('\n'));
|
|
387
397
|
// Record what was actually briefed so the UserPromptSubmit brief hook
|
|
388
398
|
// suppresses exactly these — a candidate landing after this read (e.g.
|