Norma Agent Harness 현재 시스템 문서
전체 문서
이 페이지 목차

Noa context manager

Noa context manager · 관계

이 대상이 사용하는 구현·계약·의존 · 1개

전체 관계 1개 · 종류 선택·관계도

상위 경로: Norma 시스템 지도 → 모듈 지도 → Noa

noa는 model-written summary를 사용해 오래된 message range를 계층적으로 줄이는 pure core이고, noaadapter는 이를 agentcore.Options, filesystem archive와 Compress tool에 연결한다. enable 근거 core 근거

Enable/EnableWithSession은 다음을 함께 설치한다.

  1. custom Compactor와 ContextView
  2. state를 변경하고 archive를 쓰는 Compress tool
  3. compression 규칙과 archive 검색법을 담은 resident system segment

custom compactor가 built-in compaction을 대체한다. opts.Tools == nil인 상태에서 Enable이 Compress를 append하면 slice가 non-nil이 되어 뒤의 NewSession은 default tools를 넣지 않는다. default tools가 필요하면 host가 명시적으로 먼저 구성해야 한다. Enable은 DynamicBoundary도 append prompt 뒤로 재설정한다.

Compress는 mutating tool이다. plan mode는 permission stage에서 거부한다. 다른 일반 mode에서는 tool 자체 allow가 승인 callback 전에 적용될 수 있지만 explicit deny rule은 우선한다.

Model-visible projection

yes

no

Raw llm messages

Project to CoreMessage

Assign stable refs

Sync block liveness

Prune covered ranges

Hide consumed Compress calls

Measure projected tokens

truncate threshold?

Emergency truncate tool results

Nudge decision

Reassemble llm messages

Provider-visible view

그림 크게 보기
Mermaid 원문
flowchart TD
  R[Raw llm messages] --> P[Project to CoreMessage]
  P --> I[Assign stable refs]
  I --> S[Sync block liveness]
  S --> PR[Prune covered ranges]
  PR --> HC[Hide consumed Compress calls]
  HC --> M[Measure projected tokens]
  M --> ET{truncate threshold?}
  ET -->|yes| TR[Emergency truncate tool results]
  ET -->|no| ND[Nudge decision]
  TR --> ND
  ND --> RA[Reassemble llm messages]
  RA --> V[Provider-visible view]

refs는 한 번 할당하면 재사용하지 않고 token snapshot도 고정한다. 이미 compressed range는 active block summary와 archive pointer로 대체한다. request size는 raw history가 아니라 prune 이후 view를 대상으로 추정한다. estimator는 system prompt, tool schemas와 provider protocol overhead 전부를 포함하지 않는다. adapter 근거 projection 근거

emergency truncation은 threshold를 넘을 때 오래된 tool results를 mechanical head/tail form으로 줄인다. 이후 model이 해당 visible range를 Compress하면 archive의 “원문”도 이미 줄어든 view일 수 있다. Noa archive는 raw transcript evidence가 아니다.

Nudge와 tier 판정

기본 config는 context usage의 45% floor, 75% pressure band, 95% emergency threshold를 사용한다. growth cadence와 reclaimable benefit, recent protected messages/tokens, hard-protected tools, 이전 실패 횟수를 함께 평가한다. tier 2는 active tier-1 blocks, tier 3은 active tier-2 blocks의 수와 pending benefit 조건을 사용한다. 설정은 warning으로 검증되며 questionable value가 session construction을 중단시키지 않는다.

Noa 설정 근거

판정 핵심 조건 결과
per-message pressure usage band + growth cadence + compressible benefit tier-1 range nudge
tier consolidation active lower-tier count/benefit + cadence 선택 block 범위를 한 단계 위 tier로 요약
suppression 연속 ignored/failed attempts가 limit 도달 growth 또는 새 user turn까지 nudge 억제
emergency projected view가 truncate threshold 초과 mechanical truncation 후 urgent nudge

같은 range에 여러 tier가 있으면 가장 낮은 tier block만 흡수하고 높은 tier는 active로 남긴다. terminal tier를 다시 같은 tier로 압축하는 경로는 detail loss와 종료 규칙을 함께 봐야 한다. Noa core 근거

Compress transaction

model은 start/end refs, topic과 summary를 tool input으로 준다. core는 boundary resolution, ordering/overlap, protected range, minimum range/summary와 tier를 검증한다. compression 근거

one fails

all succeed

success

failure

Model ranges and summaries

Parse and validate batch

Build blocks and archive bytes

Write every archive

Best-effort remove written files

Error; state unchanged

Commit in-memory state

Persist state.json temp + rename

Tool success

Success with warning; memory advanced

그림 크게 보기
Mermaid 원문
flowchart TD
  I[Model ranges and summaries] --> V[Parse and validate batch]
  V --> B[Build blocks and archive bytes]
  B --> A[Write every archive]
  A -->|one fails| RB[Best-effort remove written files]
  RB --> E[Error; state unchanged]
  A -->|all succeed| C[Commit in-memory state]
  C --> S[Persist state.json temp + rename]
  S -->|success| OK[Tool success]
  S -->|failure| W[Success with warning; memory advanced]

archive batch는 state mutation 전에 기록되며 write 실패 시 best-effort rollback한다. 하지만 archive files와 sidecar state는 한 filesystem transaction이 아니다. state save 실패 뒤에도 Compress는 성공하고 in-memory state가 진행할 수 있다. reuse archiver는 기존 archive의 content hash를 검증하지 않고 채택할 수 있다.

State, rebuild와 materialize

StateStore는 state.json을 temp-write/chmod/rename으로 교체하지만 fsync하지 않는다. missing file은 initial state, parse/future-version 오류는 warning과 initial state로 돌아가는 경로가 있으며 archive/history 자동 rebuild는 아니다. state 근거

일반 Session.Resume은 Noa state를 자동 복원하지 않는다. 같은 SessionID와 archive root를 연결하고 필요하면 RebuildFromHistory로 transcript의 Compress calls를 replay하거나 Materialize로 summaries를 적용해야 한다. Enable을 NewSession보다 먼저 호출하면서 SessionID가 비어 있으면 빈-ID archive root 충돌 가능성이 있다. rebuild 근거

검증 결과와 한계

2026-10-07의 고정 snapshot 전체 test에서 Noa core 2건, adapter top-level 5건이 실패했다.

provider overflow text에서 window를 학습하는 값이 reactive path에 충분히 반영되지 않는 test가 실패하며, default GrowthFloor와 GrowthCap이 모두 50,000이라 기본값에서는 GrowthRatio가 실제 adaptive 범위를 만들지 않는다. tiering 실패 중 하나는 “tier 2가 불가능해야 한다”는 과거 기대가 현재 동작과 어긋난 경우다.

이 snapshot에 대해 다음은 보장되지 않는다.

장기 context 기능으로 채택할 때 raw evidence는 projection 밖에 보존하고, 사용하는 window/model 행동 corpus에서 boundedness와 reconstruction을 별도로 검증해야 한다.

이동한 문서 주소

등록된 주소만 자동 이동합니다. 아래에서 새 위치를 선택할 수 있습니다.

상위 영역: 모듈 지도

전체로 돌아가기 · Markdown 원본

검색을 열면 색인을 읽습니다.

등록한 문서 본문에서 검색합니다.