@adhdev/mesh-shared 1.0.82-rc.36 → 1.0.82-rc.38

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.
@@ -14,7 +14,7 @@
14
14
  * Assistant-specific tools remain separate from mesh tools. Driver discovery
15
15
  * (list/describe) is shared across all three modes; invoke remains Worker-only.
16
16
  */
17
- export declare const ASSISTANT_TOOLS: readonly ["projects", "environment", "assistant_action", "project_watch", "project_status", "project_send", "project_read", "project_add", "project_attach_remote", "discover_repos", "memory", "skill_view", "skill_manage", "project_note", "launch_defaults", "launch_defaults_set", "driver_list", "driver_describe", "artifact_list", "artifact_read", "decision_answer", "decision_request"];
17
+ export declare const ASSISTANT_TOOLS: readonly ["projects", "environment", "assistant_action", "project_watch", "project_status", "project_send", "project_read", "project_add", "project_attach_remote", "discover_repos", "memory", "memory_search", "skill_view", "skill_manage", "project_note", "launch_defaults", "launch_defaults_set", "driver_list", "driver_describe", "artifact_list", "artifact_read", "decision_answer", "decision_request", "session_control"];
18
18
  export type AssistantTool = typeof ASSISTANT_TOOLS[number];
19
19
  export declare function isAssistantTool(value: unknown): value is AssistantTool;
20
20
  /** Daemon verb names (§4.4 table + the five verbs below it). */
@@ -34,6 +34,8 @@ export declare const ASSISTANT_VERB: {
34
34
  readonly projectAttachRemote: "assistant_project_attach_remote";
35
35
  readonly discoverRepos: "assistant_discover_repos";
36
36
  readonly memory: "assistant_memory";
37
+ /** Pull-only FTS search over the archive tier (memory design 2026-11-01 §3.4). */
38
+ readonly memorySearch: "assistant_memory_search";
37
39
  readonly skillView: "assistant_skill_view";
38
40
  readonly skillManage: "assistant_skill_manage";
39
41
  readonly projectNote: "assistant_project_note";
@@ -45,11 +47,19 @@ export declare const ASSISTANT_VERB: {
45
47
  readonly decisionAnswer: "assistant_decision_answer";
46
48
  /** Register a plain-text question a coordinator put to the owner as a decision item (§5.2). */
47
49
  readonly decisionRequest: "assistant_decision_request";
50
+ /** Stop / restart / switch the provider of a coordinator, worker or the assistant session (handoff design 2026-11-01 §4). */
51
+ readonly sessionControl: "assistant_session_control";
48
52
  readonly launch: "launch_assistant";
49
53
  readonly pendingRelays: "assistant_pending_relays";
50
54
  readonly stagedResolve: "assistant_staged_resolve";
51
55
  readonly storeAdmin: "assistant_store_admin";
52
56
  readonly importSkills: "assistant_import_skills";
57
+ /** Owner skill list (attach/view counts, save proposals, recent skill metrics); reads move no counter. */
58
+ readonly skillsList: "assistant_skills_list";
59
+ /** Owner: what the assistant remembered recently, with undo handles (memory design §3.2). */
60
+ readonly memoryDigest: "assistant_memory_digest";
61
+ /** Owner: reverse one remembered write or one batch (memory design §3.2). Never an assistant tool. */
62
+ readonly memoryUndo: "assistant_memory_undo";
53
63
  /** Projects the assistant is following (open relay threads) — list / stop following. */
54
64
  readonly threads: "assistant_threads";
55
65
  readonly threadClose: "assistant_thread_close";
package/dist/index.d.ts CHANGED
@@ -41,6 +41,8 @@ export * from './turn-ipc';
41
41
  export * from './path-ownership';
42
42
  export * from './mission-brief';
43
43
  export * from './mission-items';
44
+ export * from './mission-git-state';
45
+ export * from './release';
44
46
  export * from './decision-push-relay';
45
47
  export * from './keyed-doc-delta';
46
48
  export * from './provider-approval';
package/dist/index.js CHANGED
@@ -40,6 +40,7 @@ __export(index_exports, {
40
40
  CANONICAL_MESH_TOOL_NAMES: () => CANONICAL_MESH_TOOL_NAMES,
41
41
  CARRY_OVER_MISSION_GOAL: () => CARRY_OVER_MISSION_GOAL,
42
42
  CARRY_OVER_MISSION_TITLE: () => CARRY_OVER_MISSION_TITLE,
43
+ CHANGELOG_SECTIONS: () => CHANGELOG_SECTIONS,
43
44
  CLAUDE_TUI_REVIEW_PAGE_NOT_FOCUSED_PREFIX: () => CLAUDE_TUI_REVIEW_PAGE_NOT_FOCUSED_PREFIX,
44
45
  CLAUDE_TUI_REVIEW_UNCONFIRMED_PREFIX: () => CLAUDE_TUI_REVIEW_UNCONFIRMED_PREFIX,
45
46
  CLI_SLOT_RECIPES: () => CLI_SLOT_RECIPES,
@@ -90,6 +91,8 @@ __export(index_exports, {
90
91
  MESH_MISSION_STATUSES: () => MESH_MISSION_STATUSES,
91
92
  MESH_P2P_SIGNAL_TYPES: () => MESH_P2P_SIGNAL_TYPES,
92
93
  MESH_RECORD_PAYLOAD_KEYS: () => MESH_RECORD_PAYLOAD_KEYS,
94
+ MESH_RELEASE_CHANNELS: () => MESH_RELEASE_CHANNELS,
95
+ MESH_RELEASE_STATUSES: () => MESH_RELEASE_STATUSES,
93
96
  MESH_SESSION_CLEANUP_MODES: () => MESH_SESSION_CLEANUP_MODES,
94
97
  MESH_STATUS_DOC_SPEC: () => MESH_STATUS_DOC_SPEC,
95
98
  MESH_TASK_DIFFICULTIES: () => MESH_TASK_DIFFICULTIES,
@@ -104,15 +107,20 @@ __export(index_exports, {
104
107
  MISSION_DECISION_ON_DUE: () => MISSION_DECISION_ON_DUE,
105
108
  MISSION_DECISION_OPTION_IDS: () => MISSION_DECISION_OPTION_IDS,
106
109
  MISSION_DECISION_URGENCIES: () => MISSION_DECISION_URGENCIES,
110
+ MISSION_GIT_STATES: () => MISSION_GIT_STATES,
107
111
  MISSION_ITEM_KINDS: () => MISSION_ITEM_KINDS,
108
112
  MISSION_ITEM_STATES: () => MISSION_ITEM_STATES,
109
113
  MISSION_LIMITS: () => MISSION_LIMITS,
110
114
  MISSION_OUTCOMES: () => MISSION_OUTCOMES,
115
+ MISSION_REF_GIT_METHODS: () => MISSION_REF_GIT_METHODS,
116
+ MISSION_REF_GIT_STATUSES: () => MISSION_REF_GIT_STATUSES,
111
117
  MISSION_REF_KINDS: () => MISSION_REF_KINDS,
118
+ MISSION_RELEASE_EVENT_TYPES: () => MISSION_RELEASE_EVENT_TYPES,
112
119
  MODEL_AXIS_SOURCES: () => MODEL_AXIS_SOURCES,
113
120
  MODEL_SELECTION_HISTORY_LIMIT: () => MODEL_SELECTION_HISTORY_LIMIT,
114
121
  MeshChunkAssembler: () => MeshChunkAssembler,
115
122
  NATIVE_TURN_OUTCOMES: () => NATIVE_TURN_OUTCOMES,
123
+ NEEDS_WORDING_MARKER: () => NEEDS_WORDING_MARKER,
116
124
  NOTIFY_KINDS: () => NOTIFY_KINDS,
117
125
  NO_PROGRESS_OBSERVED_STATUSES: () => NO_PROGRESS_OBSERVED_STATUSES,
118
126
  NPM_UPDATE_TAGS: () => NPM_UPDATE_TAGS,
@@ -135,7 +143,11 @@ __export(index_exports, {
135
143
  RELAY_REPROBE_BASE_DELAY_MS: () => RELAY_REPROBE_BASE_DELAY_MS,
136
144
  RELAY_REPROBE_JITTER_RATIO: () => RELAY_REPROBE_JITTER_RATIO,
137
145
  RELAY_REPROBE_MAX_DELAY_MS: () => RELAY_REPROBE_MAX_DELAY_MS,
146
+ RELEASE_ACTORS: () => RELEASE_ACTORS,
138
147
  RELEASE_CHANNELS: () => RELEASE_CHANNELS,
148
+ RELEASE_EVENT_TYPES: () => RELEASE_EVENT_TYPES,
149
+ RELEASE_LIMITS: () => RELEASE_LIMITS,
150
+ RELEASE_MEMBER_STATES: () => RELEASE_MEMBER_STATES,
139
151
  REMOVED_MESH_TOOLS: () => REMOVED_MESH_TOOLS,
140
152
  RETIRED_MESH_TOOLS: () => RETIRED_MESH_TOOLS,
141
153
  RelayReprobeScheduler: () => RelayReprobeScheduler,
@@ -182,12 +194,15 @@ __export(index_exports, {
182
194
  WORKER_REPORT_OUTCOMES: () => WORKER_REPORT_OUTCOMES,
183
195
  WORKER_REPORT_SUMMARY_MAX_CHARS: () => WORKER_REPORT_SUMMARY_MAX_CHARS,
184
196
  WORKER_TOOLS: () => WORKER_TOOLS,
197
+ aggregateMissionGitState: () => aggregateMissionGitState,
185
198
  appendWorkerProtocolFooter: () => appendWorkerProtocolFooter,
186
199
  argsCarryStatusProbeMarker: () => argsCarryStatusProbeMarker,
187
200
  assessQuotaFreshness: () => assessQuotaFreshness,
188
201
  boundEventPayload: () => boundEventPayload,
189
202
  buildSlotProposal: () => buildSlotProposal,
190
203
  canonicalDaemonId: () => canonicalDaemonId,
204
+ changelogMissionMarker: () => changelogMissionMarker,
205
+ classifyChangelogSection: () => classifyChangelogSection,
191
206
  classifySessionStatus: () => classifySessionStatus,
192
207
  compareDashboardWireVersion: () => compareDashboardWireVersion,
193
208
  compareSemver: () => compareSemver,
@@ -304,6 +319,7 @@ __export(index_exports, {
304
319
  isMeshMissionStatusValue: () => isMeshMissionStatusValue,
305
320
  isMeshP2PSignalType: () => isMeshP2PSignalType,
306
321
  isMeshRecordPayload: () => isMeshRecordPayload,
322
+ isMeshReleaseChannel: () => isMeshReleaseChannel,
307
323
  isMeshTaskDifficulty: () => isMeshTaskDifficulty,
308
324
  isMeshTaskMode: () => isMeshTaskMode,
309
325
  isMeshTaskPriority: () => isMeshTaskPriority,
@@ -312,6 +328,7 @@ __export(index_exports, {
312
328
  isMeshTopicEntry: () => isMeshTopicEntry,
313
329
  isMessageId: () => isMessageId,
314
330
  isMissionOutcome: () => isMissionOutcome,
331
+ isMissionRefContained: () => isMissionRefContained,
315
332
  isMissionUpsertResponse: () => isMissionUpsertResponse,
316
333
  isModelAxisSource: () => isModelAxisSource,
317
334
  isNativeMarkerRef: () => isNativeMarkerRef,
@@ -325,6 +342,7 @@ __export(index_exports, {
325
342
  isRawDaemonDoId: () => isRawDaemonDoId,
326
343
  isReadyStatus: () => isReadyStatus,
327
344
  isRecord: () => isRecord,
345
+ isReleaseStatus: () => isReleaseStatus,
328
346
  isSendPolicy: () => isSendPolicy,
329
347
  isSendPolicyMode: () => isSendPolicyMode,
330
348
  isSendRefusal: () => isSendRefusal,
@@ -351,6 +369,7 @@ __export(index_exports, {
351
369
  isWorkingStatus: () => isWorkingStatus,
352
370
  joinRepoPath: () => joinRepoPath,
353
371
  launchModelSelectionValue: () => launchModelSelectionValue,
372
+ lintChangelogText: () => lintChangelogText,
354
373
  machineCoreFromDaemonId: () => machineCoreFromDaemonId,
355
374
  makeTypeGuard: () => makeTypeGuard,
356
375
  measureWorstCaseChunkEnvelopeBytes: () => measureWorstCaseChunkEnvelopeBytes,
@@ -1182,6 +1201,7 @@ var CANONICAL_MESH_TOOL_NAMES = [
1182
1201
  "mesh_enqueue_task",
1183
1202
  "mesh_view_queue",
1184
1203
  "mesh_queue_cancel",
1204
+ "mesh_direct_cancel",
1185
1205
  "mesh_queue_requeue",
1186
1206
  "mesh_queue_revise",
1187
1207
  "mesh_send_task",
@@ -1204,6 +1224,7 @@ var CANONICAL_MESH_TOOL_NAMES = [
1204
1224
  "mesh_attach_remote",
1205
1225
  "mesh_clone_node",
1206
1226
  "mesh_remove_node",
1227
+ "mesh_retry_node_bootstrap",
1207
1228
  "mesh_cleanup_worktree_nodes",
1208
1229
  "mesh_refine_node",
1209
1230
  "mesh_refine_batch",
@@ -1220,6 +1241,12 @@ var CANONICAL_MESH_TOOL_NAMES = [
1220
1241
  "mesh_reconcile_ledger",
1221
1242
  "mesh_mission_upsert",
1222
1243
  "mesh_mission_list",
1244
+ "mesh_mission_git_eval",
1245
+ "mesh_release_upsert",
1246
+ "mesh_release_scope",
1247
+ "mesh_release_list",
1248
+ "mesh_release_record_deploy",
1249
+ "mesh_release_changelog_draft",
1223
1250
  "mesh_review_inbox",
1224
1251
  "mesh_node_slots",
1225
1252
  "driver_list",
@@ -2224,6 +2251,7 @@ var ASSISTANT_TOOLS = [
2224
2251
  "project_attach_remote",
2225
2252
  "discover_repos",
2226
2253
  "memory",
2254
+ "memory_search",
2227
2255
  "skill_view",
2228
2256
  "skill_manage",
2229
2257
  "project_note",
@@ -2234,7 +2262,8 @@ var ASSISTANT_TOOLS = [
2234
2262
  "artifact_list",
2235
2263
  "artifact_read",
2236
2264
  "decision_answer",
2237
- "decision_request"
2265
+ "decision_request",
2266
+ "session_control"
2238
2267
  ];
2239
2268
  var ASSISTANT_TOOL_SET = new Set(ASSISTANT_TOOLS);
2240
2269
  function isAssistantTool(value) {
@@ -2257,6 +2286,8 @@ var ASSISTANT_VERB = {
2257
2286
  projectAttachRemote: "assistant_project_attach_remote",
2258
2287
  discoverRepos: "assistant_discover_repos",
2259
2288
  memory: "assistant_memory",
2289
+ /** Pull-only FTS search over the archive tier (memory design 2026-11-01 §3.4). */
2290
+ memorySearch: "assistant_memory_search",
2260
2291
  skillView: "assistant_skill_view",
2261
2292
  skillManage: "assistant_skill_manage",
2262
2293
  projectNote: "assistant_project_note",
@@ -2268,6 +2299,8 @@ var ASSISTANT_VERB = {
2268
2299
  decisionAnswer: "assistant_decision_answer",
2269
2300
  /** Register a plain-text question a coordinator put to the owner as a decision item (§5.2). */
2270
2301
  decisionRequest: "assistant_decision_request",
2302
+ /** Stop / restart / switch the provider of a coordinator, worker or the assistant session (handoff design 2026-11-01 §4). */
2303
+ sessionControl: "assistant_session_control",
2271
2304
  // assistant-side daemon verbs without a tool of the same name
2272
2305
  launch: "launch_assistant",
2273
2306
  pendingRelays: "assistant_pending_relays",
@@ -2275,6 +2308,12 @@ var ASSISTANT_VERB = {
2275
2308
  stagedResolve: "assistant_staged_resolve",
2276
2309
  storeAdmin: "assistant_store_admin",
2277
2310
  importSkills: "assistant_import_skills",
2311
+ /** Owner skill list (attach/view counts, save proposals, recent skill metrics); reads move no counter. */
2312
+ skillsList: "assistant_skills_list",
2313
+ /** Owner: what the assistant remembered recently, with undo handles (memory design §3.2). */
2314
+ memoryDigest: "assistant_memory_digest",
2315
+ /** Owner: reverse one remembered write or one batch (memory design §3.2). Never an assistant tool. */
2316
+ memoryUndo: "assistant_memory_undo",
2278
2317
  /** Projects the assistant is following (open relay threads) — list / stop following. */
2279
2318
  threads: "assistant_threads",
2280
2319
  threadClose: "assistant_thread_close"
@@ -2293,6 +2332,7 @@ var ASSISTANT_TOOL_VERBS = {
2293
2332
  project_attach_remote: ASSISTANT_VERB.projectAttachRemote,
2294
2333
  discover_repos: ASSISTANT_VERB.discoverRepos,
2295
2334
  memory: ASSISTANT_VERB.memory,
2335
+ memory_search: ASSISTANT_VERB.memorySearch,
2296
2336
  skill_view: ASSISTANT_VERB.skillView,
2297
2337
  skill_manage: ASSISTANT_VERB.skillManage,
2298
2338
  project_note: ASSISTANT_VERB.projectNote,
@@ -2301,18 +2341,23 @@ var ASSISTANT_TOOL_VERBS = {
2301
2341
  artifact_list: ASSISTANT_VERB.artifactList,
2302
2342
  artifact_read: ASSISTANT_VERB.artifactRead,
2303
2343
  decision_answer: ASSISTANT_VERB.decisionAnswer,
2304
- decision_request: ASSISTANT_VERB.decisionRequest
2344
+ decision_request: ASSISTANT_VERB.decisionRequest,
2345
+ session_control: ASSISTANT_VERB.sessionControl
2305
2346
  };
2306
- var ASSISTANT_WRITE_TOOLS = ["project_watch", "assistant_action", "memory", "skill_manage", "project_note", "project_send", "project_add", "project_attach_remote", "launch_defaults_set", "decision_answer", "decision_request"];
2347
+ var ASSISTANT_WRITE_TOOLS = ["project_watch", "assistant_action", "memory", "skill_manage", "project_note", "project_send", "project_add", "project_attach_remote", "launch_defaults_set", "decision_answer", "decision_request", "session_control"];
2307
2348
  var ASSISTANT_OWNER_VERBS = [
2308
2349
  ASSISTANT_VERB.executionSettings,
2309
2350
  ASSISTANT_VERB.stagedResolve,
2310
2351
  ASSISTANT_VERB.storeAdmin,
2311
2352
  ASSISTANT_VERB.importSkills,
2353
+ ASSISTANT_VERB.skillsList,
2354
+ ASSISTANT_VERB.memoryDigest,
2355
+ ASSISTANT_VERB.memoryUndo,
2312
2356
  ASSISTANT_VERB.threadClose
2313
2357
  ];
2314
2358
  var ASSISTANT_REVIEW_TURN_VERBS = [
2315
2359
  ASSISTANT_VERB.memory,
2360
+ ASSISTANT_VERB.memorySearch,
2316
2361
  ASSISTANT_VERB.skillView,
2317
2362
  ASSISTANT_VERB.skillManage,
2318
2363
  ASSISTANT_VERB.projectNote
@@ -3240,13 +3285,13 @@ function isMissionBriefWire(value) {
3240
3285
  }
3241
3286
  return true;
3242
3287
  }
3243
- var STRUCTURED_MISSION_KEYS = ["summary", "outcome", "outcomeReason", "version", "carryOver", "openItems"];
3288
+ var STRUCTURED_MISSION_KEYS = ["summary", "releaseNote", "outcome", "outcomeReason", "version", "carryOver", "openItems"];
3244
3289
  function isOpenItemCountsWire(value) {
3245
3290
  if (!isRecord(value) || !hasOnlyKeys2(value, ["remaining", "live_check", "decision", "evidence"])) return false;
3246
3291
  return ["remaining", "live_check", "decision", "evidence"].every((k) => isNonNegativeInt(value[k]));
3247
3292
  }
3248
3293
  function isStructuredMissionFields(value) {
3249
- for (const k of ["summary", "outcome", "outcomeReason"]) {
3294
+ for (const k of ["summary", "releaseNote", "outcome", "outcomeReason"]) {
3250
3295
  if (value[k] !== void 0 && typeof value[k] !== "string") return false;
3251
3296
  }
3252
3297
  if (value.version !== void 0 && !isNonNegativeInt(value.version)) return false;
@@ -3264,7 +3309,7 @@ function isMeshMissionRecordWire(value) {
3264
3309
  return true;
3265
3310
  }
3266
3311
  function isMissionUpsertRequest(value) {
3267
- if (!isRecord(value) || !hasOnlyKeys2(value, ["v", "meshId", "id", "title", "goal", "status", "brief", "structured", "summary", "outcome", "outcomeReason", "carryOverTo", "toCarryOver", "itemsAdd", "itemsUpdate"])) return false;
3312
+ if (!isRecord(value) || !hasOnlyKeys2(value, ["v", "meshId", "id", "title", "goal", "status", "brief", "structured", "summary", "releaseNote", "outcome", "outcomeReason", "carryOverTo", "toCarryOver", "itemsAdd", "itemsUpdate"])) return false;
3268
3313
  if (value.v !== TURN_IPC_PROTOCOL_VERSION) return false;
3269
3314
  if (!isEvidenceIdentifier(value.meshId)) return false;
3270
3315
  if (value.id !== void 0 && !isEvidenceIdentifier(value.id)) return false;
@@ -3272,7 +3317,7 @@ function isMissionUpsertRequest(value) {
3272
3317
  if (value.title.trim().length === 0 && value.toCarryOver !== true && value.id === void 0) return false;
3273
3318
  if (value.structured !== void 0 && typeof value.structured !== "boolean") return false;
3274
3319
  if (value.toCarryOver !== void 0 && typeof value.toCarryOver !== "boolean") return false;
3275
- for (const k of ["summary", "outcome", "outcomeReason"]) {
3320
+ for (const k of ["summary", "releaseNote", "outcome", "outcomeReason"]) {
3276
3321
  if (value[k] !== void 0 && typeof value[k] !== "string") return false;
3277
3322
  }
3278
3323
  if (value.carryOverTo !== void 0 && !isEvidenceIdentifier(value.carryOverTo)) return false;
@@ -3902,7 +3947,7 @@ function touchedFilesOutsideOwnership(touched, owned) {
3902
3947
 
3903
3948
  // src/mission-items.ts
3904
3949
  var MISSION_ITEM_KINDS = ["remaining", "live_check", "decision", "evidence"];
3905
- var MISSION_ITEM_STATES = ["open", "done", "dropped", "moved", "answered", "expired", "withdrawn", "superseded"];
3950
+ var MISSION_ITEM_STATES = ["open", "done", "failed", "dropped", "moved", "answered", "expired", "withdrawn", "superseded"];
3906
3951
  var COORDINATOR_SETTABLE_ITEM_STATES = {
3907
3952
  remaining: ["open", "done", "dropped"],
3908
3953
  live_check: ["open", "done", "dropped"],
@@ -4172,6 +4217,81 @@ function normalizeReportCommits(value) {
4172
4217
  return out;
4173
4218
  }
4174
4219
 
4220
+ // src/mission-git-state.ts
4221
+ var MISSION_REF_GIT_STATUSES = ["contained_ancestor", "contained_patch_equivalent", "not_contained", "unknown"];
4222
+ var MISSION_REF_GIT_METHODS = ["ancestry", "cherry", "residual_patch"];
4223
+ var MISSION_GIT_STATES = ["no_refs", "landed", "partial", "not_landed", "unknown"];
4224
+ function isMissionRefContained(status) {
4225
+ return status === "contained_ancestor" || status === "contained_patch_equivalent";
4226
+ }
4227
+ function aggregateMissionGitState(statuses) {
4228
+ const total = statuses.length;
4229
+ const contained = statuses.filter(isMissionRefContained).length;
4230
+ const notContained = statuses.filter((s) => s === "not_contained").length;
4231
+ const unknown = statuses.filter((s) => s === "unknown").length;
4232
+ const counts = { total, contained, notContained, unknown };
4233
+ if (total === 0) return { state: "no_refs", partialUnknown: false, counts };
4234
+ if (contained === total) return { state: "landed", partialUnknown: false, counts };
4235
+ if (contained > 0) return { state: "partial", partialUnknown: unknown > 0, counts };
4236
+ if (notContained === total) return { state: "not_landed", partialUnknown: false, counts };
4237
+ return { state: "unknown", partialUnknown: false, counts };
4238
+ }
4239
+
4240
+ // src/release.ts
4241
+ var MESH_RELEASE_CHANNELS = ["preview", "stable"];
4242
+ function isMeshReleaseChannel(value) {
4243
+ return typeof value === "string" && MESH_RELEASE_CHANNELS.includes(value);
4244
+ }
4245
+ var MESH_RELEASE_STATUSES = ["planned", "frozen", "deployed", "verified", "superseded", "cancelled"];
4246
+ function isReleaseStatus(value) {
4247
+ return typeof value === "string" && MESH_RELEASE_STATUSES.includes(value);
4248
+ }
4249
+ var RELEASE_MEMBER_STATES = ["member", "moved_out", "removed"];
4250
+ var RELEASE_ACTORS = ["coordinator", "owner", "assistant", "script"];
4251
+ var RELEASE_EVENT_TYPES = [
4252
+ "created",
4253
+ "status_changed",
4254
+ "scope_added",
4255
+ "scope_moved",
4256
+ "scope_removed",
4257
+ "deploy_recorded",
4258
+ "changelog_drafted",
4259
+ "changelog_applied"
4260
+ ];
4261
+ var MISSION_RELEASE_EVENT_TYPES = ["release_attached", "release_moved", "release_detached"];
4262
+ var RELEASE_LIMITS = {
4263
+ name: 80,
4264
+ note: 500,
4265
+ /** `mesh_missions.release_note`: one user/operator-visible sentence. */
4266
+ releaseNote: 400,
4267
+ missionsPerCall: 100,
4268
+ changelogEntries: 300
4269
+ };
4270
+ var CHANGELOG_SECTIONS = ["Added", "Fixed", "Changed"];
4271
+ var NEEDS_WORDING_MARKER = "[needs user-facing wording]";
4272
+ function changelogMissionMarker(missionId) {
4273
+ return `<!-- m:${missionId.slice(0, 8)} -->`;
4274
+ }
4275
+ function classifyChangelogSection(text, hint) {
4276
+ const m = /^\s*\[(added|fixed|changed)\]\s*/i.exec(text);
4277
+ if (m) {
4278
+ const key = m[1].toLowerCase();
4279
+ return { section: key === "added" ? "Added" : key === "fixed" ? "Fixed" : "Changed", text: text.slice(m[0].length).trim() };
4280
+ }
4281
+ const probe = `${hint ?? ""} ${text}`.toLowerCase();
4282
+ if (/\b(fix|fixes|fixed|bug|regression|crash|error)\b|오류|결함|버그|수정/.test(probe)) return { section: "Fixed", text };
4283
+ if (/\b(add|adds|added|new|introduc\w*|support\w*)\b|신규|추가/.test(probe)) return { section: "Added", text };
4284
+ return { section: "Changed", text };
4285
+ }
4286
+ function lintChangelogText(text) {
4287
+ const out = [];
4288
+ if (/\bwave[\s-]*\d+/i.test(text) || /웨이브\s*\d+/.test(text)) out.push("mentions an internal wave number");
4289
+ if (/\brc[.\s-]?\d+\b/i.test(text)) out.push("mentions an internal rc number");
4290
+ if (/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/i.test(text) || /\bmi_[0-9a-f]{12}\b/.test(text) || /\brel_[0-9a-f]{12}\b/.test(text)) out.push("contains an internal id");
4291
+ if (/\bmission\b/i.test(text)) out.push('mentions "mission" (internal vocabulary)');
4292
+ return out;
4293
+ }
4294
+
4175
4295
  // src/decision-push-relay.ts
4176
4296
  var DECISION_PUSH_RELAY_COMMAND = "mission_decision_push_relay_answer";
4177
4297
  var DECISION_PUSH_RELAY_SOURCE = "push_relay";
@@ -4640,6 +4760,7 @@ var RelayReprobeScheduler = class {
4640
4760
  CANONICAL_MESH_TOOL_NAMES,
4641
4761
  CARRY_OVER_MISSION_GOAL,
4642
4762
  CARRY_OVER_MISSION_TITLE,
4763
+ CHANGELOG_SECTIONS,
4643
4764
  CLAUDE_TUI_REVIEW_PAGE_NOT_FOCUSED_PREFIX,
4644
4765
  CLAUDE_TUI_REVIEW_UNCONFIRMED_PREFIX,
4645
4766
  CLI_SLOT_RECIPES,
@@ -4690,6 +4811,8 @@ var RelayReprobeScheduler = class {
4690
4811
  MESH_MISSION_STATUSES,
4691
4812
  MESH_P2P_SIGNAL_TYPES,
4692
4813
  MESH_RECORD_PAYLOAD_KEYS,
4814
+ MESH_RELEASE_CHANNELS,
4815
+ MESH_RELEASE_STATUSES,
4693
4816
  MESH_SESSION_CLEANUP_MODES,
4694
4817
  MESH_STATUS_DOC_SPEC,
4695
4818
  MESH_TASK_DIFFICULTIES,
@@ -4704,15 +4827,20 @@ var RelayReprobeScheduler = class {
4704
4827
  MISSION_DECISION_ON_DUE,
4705
4828
  MISSION_DECISION_OPTION_IDS,
4706
4829
  MISSION_DECISION_URGENCIES,
4830
+ MISSION_GIT_STATES,
4707
4831
  MISSION_ITEM_KINDS,
4708
4832
  MISSION_ITEM_STATES,
4709
4833
  MISSION_LIMITS,
4710
4834
  MISSION_OUTCOMES,
4835
+ MISSION_REF_GIT_METHODS,
4836
+ MISSION_REF_GIT_STATUSES,
4711
4837
  MISSION_REF_KINDS,
4838
+ MISSION_RELEASE_EVENT_TYPES,
4712
4839
  MODEL_AXIS_SOURCES,
4713
4840
  MODEL_SELECTION_HISTORY_LIMIT,
4714
4841
  MeshChunkAssembler,
4715
4842
  NATIVE_TURN_OUTCOMES,
4843
+ NEEDS_WORDING_MARKER,
4716
4844
  NOTIFY_KINDS,
4717
4845
  NO_PROGRESS_OBSERVED_STATUSES,
4718
4846
  NPM_UPDATE_TAGS,
@@ -4735,7 +4863,11 @@ var RelayReprobeScheduler = class {
4735
4863
  RELAY_REPROBE_BASE_DELAY_MS,
4736
4864
  RELAY_REPROBE_JITTER_RATIO,
4737
4865
  RELAY_REPROBE_MAX_DELAY_MS,
4866
+ RELEASE_ACTORS,
4738
4867
  RELEASE_CHANNELS,
4868
+ RELEASE_EVENT_TYPES,
4869
+ RELEASE_LIMITS,
4870
+ RELEASE_MEMBER_STATES,
4739
4871
  REMOVED_MESH_TOOLS,
4740
4872
  RETIRED_MESH_TOOLS,
4741
4873
  RelayReprobeScheduler,
@@ -4782,12 +4914,15 @@ var RelayReprobeScheduler = class {
4782
4914
  WORKER_REPORT_OUTCOMES,
4783
4915
  WORKER_REPORT_SUMMARY_MAX_CHARS,
4784
4916
  WORKER_TOOLS,
4917
+ aggregateMissionGitState,
4785
4918
  appendWorkerProtocolFooter,
4786
4919
  argsCarryStatusProbeMarker,
4787
4920
  assessQuotaFreshness,
4788
4921
  boundEventPayload,
4789
4922
  buildSlotProposal,
4790
4923
  canonicalDaemonId,
4924
+ changelogMissionMarker,
4925
+ classifyChangelogSection,
4791
4926
  classifySessionStatus,
4792
4927
  compareDashboardWireVersion,
4793
4928
  compareSemver,
@@ -4904,6 +5039,7 @@ var RelayReprobeScheduler = class {
4904
5039
  isMeshMissionStatusValue,
4905
5040
  isMeshP2PSignalType,
4906
5041
  isMeshRecordPayload,
5042
+ isMeshReleaseChannel,
4907
5043
  isMeshTaskDifficulty,
4908
5044
  isMeshTaskMode,
4909
5045
  isMeshTaskPriority,
@@ -4912,6 +5048,7 @@ var RelayReprobeScheduler = class {
4912
5048
  isMeshTopicEntry,
4913
5049
  isMessageId,
4914
5050
  isMissionOutcome,
5051
+ isMissionRefContained,
4915
5052
  isMissionUpsertResponse,
4916
5053
  isModelAxisSource,
4917
5054
  isNativeMarkerRef,
@@ -4925,6 +5062,7 @@ var RelayReprobeScheduler = class {
4925
5062
  isRawDaemonDoId,
4926
5063
  isReadyStatus,
4927
5064
  isRecord,
5065
+ isReleaseStatus,
4928
5066
  isSendPolicy,
4929
5067
  isSendPolicyMode,
4930
5068
  isSendRefusal,
@@ -4951,6 +5089,7 @@ var RelayReprobeScheduler = class {
4951
5089
  isWorkingStatus,
4952
5090
  joinRepoPath,
4953
5091
  launchModelSelectionValue,
5092
+ lintChangelogText,
4954
5093
  machineCoreFromDaemonId,
4955
5094
  makeTypeGuard,
4956
5095
  measureWorstCaseChunkEnvelopeBytes,