@asc-agent/runtime 0.6.0 → 0.6.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 CHANGED
@@ -7,7 +7,7 @@ proceed-by-default, escalation, audit, the external-write guard, host integratio
7
7
  here.
8
8
 
9
9
  ```bash
10
- npm install -g @asc-agent/runtime@0.6.0
10
+ npm install -g @asc-agent/runtime@0.6.1
11
11
  ```
12
12
 
13
13
  npm owns the executable link (on Windows, npm's own `asc.cmd`). This package never edits
package/dist/cli/asc.js CHANGED
@@ -2056,8 +2056,16 @@ async function checkBootstrap(root) {
2056
2056
  adapters: ADAPTER_VERSIONS,
2057
2057
  ascVersion: ASC_VERSION,
2058
2058
  });
2059
- if (outcome.ok)
2059
+ if (outcome.ok) {
2060
+ // 판번호만 낡은 lock 은 멈출 이유가 아니다. 다만 조용히 지나가지도 않는다 —
2061
+ // 다음 재고정 때 따라온다는 것을 여기서 한 번 말한다.
2062
+ if (outcome.staleLock) {
2063
+ const moved = outcome.staleLock.find((drift) => drift.field === 'ascCore.version');
2064
+ if (moved)
2065
+ console.error(`(profile.lock was written by ASC ${moved.locked}; this is ${moved.current}. \`asc profile resolve --write\` records it.)`);
2066
+ }
2060
2067
  return { code: 0, runtime: outcome.runtime };
2068
+ }
2061
2069
  // 아직 붙이지 않았으면 설정 없이 도는 경로만 쓰는 것이므로 막지 않는다
2062
2070
  if (outcome.reason === 'NOT_ATTACHED')
2063
2071
  return { code: 0 };
@@ -1,9 +1,9 @@
1
1
  export declare const RUNTIME_PACKAGE = "@asc-agent/runtime";
2
2
  export declare const BOOTSTRAP_PACKAGE = "@asc-agent/bootstrap";
3
3
  /** runtime과 bootstrap은 초기 release에서 lockstep이다. */
4
- export declare const RELEASE_VERSION = "0.6.0";
5
- export declare const RUNTIME_SPEC = "@asc-agent/runtime@0.6.0";
6
- export declare const BOOTSTRAP_SPEC = "@asc-agent/bootstrap@0.6.0";
4
+ export declare const RELEASE_VERSION = "0.6.1";
5
+ export declare const RUNTIME_SPEC = "@asc-agent/runtime@0.6.1";
6
+ export declare const BOOTSTRAP_SPEC = "@asc-agent/bootstrap@0.6.1";
7
7
  /**
8
8
  * 아직 설치되지 않은 machine에서 그대로 실행되는 형태 (C-14 §3.4).
9
9
  *
@@ -9,7 +9,7 @@
9
9
  export const RUNTIME_PACKAGE = '@asc-agent/runtime';
10
10
  export const BOOTSTRAP_PACKAGE = '@asc-agent/bootstrap';
11
11
  /** runtime과 bootstrap은 초기 release에서 lockstep이다. */
12
- export const RELEASE_VERSION = '0.6.0';
12
+ export const RELEASE_VERSION = '0.6.1';
13
13
  export const RUNTIME_SPEC = `${RUNTIME_PACKAGE}@${RELEASE_VERSION}`;
14
14
  export const BOOTSTRAP_SPEC = `${BOOTSTRAP_PACKAGE}@${RELEASE_VERSION}`;
15
15
  /**
@@ -85,6 +85,11 @@ export type BootstrapOutcome = {
85
85
  ok: true;
86
86
  runtime: ResolvedRuntime;
87
87
  lock: ProfileLock;
88
+ /**
89
+ * lock 이 이 build 가 아닌 판번호로 적혀 있다. 멈출 일은 아니고 (사람이 고친 설정이
90
+ * 아니다), 기록이 낡았다는 사실은 말한다.
91
+ */
92
+ staleLock?: LockDrift[];
88
93
  }
89
94
  /** attach 전이다. `.asc/` 자체가 없다 — 설정 없이 도는 경로만 허용된다. */
90
95
  | {
@@ -130,3 +135,16 @@ export declare function bootstrapGuard(input: {
130
135
  adapters: Record<string, string>;
131
136
  ascVersion: string;
132
137
  }): Promise<BootstrapOutcome>;
138
+ /**
139
+ * 사람이 정해야 하는 어긋남만 남긴다 (C-14 실측).
140
+ *
141
+ * lock 은 **사람이 바꾼 설정**을 잡으라고 있는 파일이다. runtime 을 갈아 끼우면
142
+ * `ascCore.version` 과 함께 딸려 오는 adapter 판번호가 바뀌고, 그 둘이 재료인
143
+ * `configurationDigest` 도 따라 바뀐다 — 사람이 아무것도 고치지 않았는데 셋이 어긋난다.
144
+ * 그 상태로 멈추면 업데이트가 그 machine 의 모든 프로젝트를 세운다.
145
+ *
146
+ * 실측이 그것이었다: 이 machine 의 workspace 세 개가 전부 `0.3.1 → 0.6.0` 한 가지 이유로
147
+ * 서 있었고, 그 중 둘은 그렇게 여러 릴리스 동안 회차를 돌지 못했다. Profile·Preset·
148
+ * Override·capability 가 어긋나면 지금처럼 멈춘다 — 그것이 사람의 결정이다.
149
+ */
150
+ export declare function configurationDrifts(drifts: readonly LockDrift[]): LockDrift[];
@@ -261,7 +261,28 @@ export async function bootstrapGuard(input) {
261
261
  generatedAt: locked.generatedAt,
262
262
  });
263
263
  const drifts = compareLock(locked, current);
264
- if (drifts.length > 0)
264
+ const configuration = configurationDrifts(drifts);
265
+ if (configuration.length > 0) {
265
266
  return { ok: false, reason: 'LOCK_DRIFT', drifts, runtime: resolved.runtime };
266
- return { ok: true, runtime: resolved.runtime, lock: locked };
267
+ }
268
+ // 남은 것이 있다면 그것은 **이 build 가 옮겨 온 것**이다. 멈출 일이 아니지만 없던 일도
269
+ // 아니므로 그대로 실어 보낸다 — 호출자가 한 줄 말하고, lock 은 다음 재고정 때 따라온다.
270
+ return { ok: true, runtime: resolved.runtime, lock: locked, ...(drifts.length > 0 ? { staleLock: drifts } : {}) };
271
+ }
272
+ /**
273
+ * 사람이 정해야 하는 어긋남만 남긴다 (C-14 실측).
274
+ *
275
+ * lock 은 **사람이 바꾼 설정**을 잡으라고 있는 파일이다. runtime 을 갈아 끼우면
276
+ * `ascCore.version` 과 함께 딸려 오는 adapter 판번호가 바뀌고, 그 둘이 재료인
277
+ * `configurationDigest` 도 따라 바뀐다 — 사람이 아무것도 고치지 않았는데 셋이 어긋난다.
278
+ * 그 상태로 멈추면 업데이트가 그 machine 의 모든 프로젝트를 세운다.
279
+ *
280
+ * 실측이 그것이었다: 이 machine 의 workspace 세 개가 전부 `0.3.1 → 0.6.0` 한 가지 이유로
281
+ * 서 있었고, 그 중 둘은 그렇게 여러 릴리스 동안 회차를 돌지 못했다. Profile·Preset·
282
+ * Override·capability 가 어긋나면 지금처럼 멈춘다 — 그것이 사람의 결정이다.
283
+ */
284
+ export function configurationDrifts(drifts) {
285
+ return drifts.filter((drift) => !VERSION_SHAPED.has(drift.field) && !drift.field.startsWith('adapters.'));
267
286
  }
287
+ /** runtime 을 갈아 끼우는 것만으로 바뀌는 자리들. */
288
+ const VERSION_SHAPED = new Set(['ascCore.version', 'configurationDigest']);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asc-agent/runtime",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "ASC (Agent Session Control) \u2014 local-first human-in-the-loop agent control plane: core, CLI, and adapters",
5
5
  "keywords": [
6
6
  "agent",