@adhdev/mesh-shared 1.0.82-rc.35 → 1.0.82-rc.37

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/index.mjs CHANGED
@@ -755,6 +755,7 @@ var CANONICAL_MESH_TOOL_NAMES = [
755
755
  "mesh_enqueue_task",
756
756
  "mesh_view_queue",
757
757
  "mesh_queue_cancel",
758
+ "mesh_direct_cancel",
758
759
  "mesh_queue_requeue",
759
760
  "mesh_queue_revise",
760
761
  "mesh_send_task",
@@ -777,6 +778,7 @@ var CANONICAL_MESH_TOOL_NAMES = [
777
778
  "mesh_attach_remote",
778
779
  "mesh_clone_node",
779
780
  "mesh_remove_node",
781
+ "mesh_retry_node_bootstrap",
780
782
  "mesh_cleanup_worktree_nodes",
781
783
  "mesh_refine_node",
782
784
  "mesh_refine_batch",
@@ -793,6 +795,12 @@ var CANONICAL_MESH_TOOL_NAMES = [
793
795
  "mesh_reconcile_ledger",
794
796
  "mesh_mission_upsert",
795
797
  "mesh_mission_list",
798
+ "mesh_mission_git_eval",
799
+ "mesh_release_upsert",
800
+ "mesh_release_scope",
801
+ "mesh_release_list",
802
+ "mesh_release_record_deploy",
803
+ "mesh_release_changelog_draft",
796
804
  "mesh_review_inbox",
797
805
  "mesh_node_slots",
798
806
  "driver_list",
@@ -1797,6 +1805,7 @@ var ASSISTANT_TOOLS = [
1797
1805
  "project_attach_remote",
1798
1806
  "discover_repos",
1799
1807
  "memory",
1808
+ "memory_search",
1800
1809
  "skill_view",
1801
1810
  "skill_manage",
1802
1811
  "project_note",
@@ -1807,7 +1816,8 @@ var ASSISTANT_TOOLS = [
1807
1816
  "artifact_list",
1808
1817
  "artifact_read",
1809
1818
  "decision_answer",
1810
- "decision_request"
1819
+ "decision_request",
1820
+ "session_control"
1811
1821
  ];
1812
1822
  var ASSISTANT_TOOL_SET = new Set(ASSISTANT_TOOLS);
1813
1823
  function isAssistantTool(value) {
@@ -1830,6 +1840,8 @@ var ASSISTANT_VERB = {
1830
1840
  projectAttachRemote: "assistant_project_attach_remote",
1831
1841
  discoverRepos: "assistant_discover_repos",
1832
1842
  memory: "assistant_memory",
1843
+ /** Pull-only FTS search over the archive tier (memory design 2026-11-01 §3.4). */
1844
+ memorySearch: "assistant_memory_search",
1833
1845
  skillView: "assistant_skill_view",
1834
1846
  skillManage: "assistant_skill_manage",
1835
1847
  projectNote: "assistant_project_note",
@@ -1841,6 +1853,8 @@ var ASSISTANT_VERB = {
1841
1853
  decisionAnswer: "assistant_decision_answer",
1842
1854
  /** Register a plain-text question a coordinator put to the owner as a decision item (§5.2). */
1843
1855
  decisionRequest: "assistant_decision_request",
1856
+ /** Stop / restart / switch the provider of a coordinator, worker or the assistant session (handoff design 2026-11-01 §4). */
1857
+ sessionControl: "assistant_session_control",
1844
1858
  // assistant-side daemon verbs without a tool of the same name
1845
1859
  launch: "launch_assistant",
1846
1860
  pendingRelays: "assistant_pending_relays",
@@ -1848,6 +1862,12 @@ var ASSISTANT_VERB = {
1848
1862
  stagedResolve: "assistant_staged_resolve",
1849
1863
  storeAdmin: "assistant_store_admin",
1850
1864
  importSkills: "assistant_import_skills",
1865
+ /** Owner skill list (attach/view counts, save proposals, recent skill metrics); reads move no counter. */
1866
+ skillsList: "assistant_skills_list",
1867
+ /** Owner: what the assistant remembered recently, with undo handles (memory design §3.2). */
1868
+ memoryDigest: "assistant_memory_digest",
1869
+ /** Owner: reverse one remembered write or one batch (memory design §3.2). Never an assistant tool. */
1870
+ memoryUndo: "assistant_memory_undo",
1851
1871
  /** Projects the assistant is following (open relay threads) — list / stop following. */
1852
1872
  threads: "assistant_threads",
1853
1873
  threadClose: "assistant_thread_close"
@@ -1866,6 +1886,7 @@ var ASSISTANT_TOOL_VERBS = {
1866
1886
  project_attach_remote: ASSISTANT_VERB.projectAttachRemote,
1867
1887
  discover_repos: ASSISTANT_VERB.discoverRepos,
1868
1888
  memory: ASSISTANT_VERB.memory,
1889
+ memory_search: ASSISTANT_VERB.memorySearch,
1869
1890
  skill_view: ASSISTANT_VERB.skillView,
1870
1891
  skill_manage: ASSISTANT_VERB.skillManage,
1871
1892
  project_note: ASSISTANT_VERB.projectNote,
@@ -1874,18 +1895,23 @@ var ASSISTANT_TOOL_VERBS = {
1874
1895
  artifact_list: ASSISTANT_VERB.artifactList,
1875
1896
  artifact_read: ASSISTANT_VERB.artifactRead,
1876
1897
  decision_answer: ASSISTANT_VERB.decisionAnswer,
1877
- decision_request: ASSISTANT_VERB.decisionRequest
1898
+ decision_request: ASSISTANT_VERB.decisionRequest,
1899
+ session_control: ASSISTANT_VERB.sessionControl
1878
1900
  };
1879
- 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"];
1901
+ 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"];
1880
1902
  var ASSISTANT_OWNER_VERBS = [
1881
1903
  ASSISTANT_VERB.executionSettings,
1882
1904
  ASSISTANT_VERB.stagedResolve,
1883
1905
  ASSISTANT_VERB.storeAdmin,
1884
1906
  ASSISTANT_VERB.importSkills,
1907
+ ASSISTANT_VERB.skillsList,
1908
+ ASSISTANT_VERB.memoryDigest,
1909
+ ASSISTANT_VERB.memoryUndo,
1885
1910
  ASSISTANT_VERB.threadClose
1886
1911
  ];
1887
1912
  var ASSISTANT_REVIEW_TURN_VERBS = [
1888
1913
  ASSISTANT_VERB.memory,
1914
+ ASSISTANT_VERB.memorySearch,
1889
1915
  ASSISTANT_VERB.skillView,
1890
1916
  ASSISTANT_VERB.skillManage,
1891
1917
  ASSISTANT_VERB.projectNote
@@ -2491,6 +2517,7 @@ function parseModelSelection(raw) {
2491
2517
  const current = readString(record2.current);
2492
2518
  const observed = readString(record2.observed);
2493
2519
  const observedAt = readFiniteNumber(record2.observedAt);
2520
+ const fallback = record2.fallback === true;
2494
2521
  return {
2495
2522
  source: isModelAxisSource(record2.source) ? record2.source : "unspecified",
2496
2523
  ...requested ? { requested } : {},
@@ -2499,6 +2526,7 @@ function parseModelSelection(raw) {
2499
2526
  ...current ? { current } : {},
2500
2527
  ...observed ? { observed } : {},
2501
2528
  ...observedAt !== void 0 ? { observedAt } : {},
2529
+ ...fallback ? { fallback } : {},
2502
2530
  history: history.slice(-MODEL_SELECTION_HISTORY_LIMIT)
2503
2531
  };
2504
2532
  }
@@ -2811,13 +2839,13 @@ function isMissionBriefWire(value) {
2811
2839
  }
2812
2840
  return true;
2813
2841
  }
2814
- var STRUCTURED_MISSION_KEYS = ["summary", "outcome", "outcomeReason", "version", "carryOver", "openItems"];
2842
+ var STRUCTURED_MISSION_KEYS = ["summary", "releaseNote", "outcome", "outcomeReason", "version", "carryOver", "openItems"];
2815
2843
  function isOpenItemCountsWire(value) {
2816
2844
  if (!isRecord(value) || !hasOnlyKeys2(value, ["remaining", "live_check", "decision", "evidence"])) return false;
2817
2845
  return ["remaining", "live_check", "decision", "evidence"].every((k) => isNonNegativeInt(value[k]));
2818
2846
  }
2819
2847
  function isStructuredMissionFields(value) {
2820
- for (const k of ["summary", "outcome", "outcomeReason"]) {
2848
+ for (const k of ["summary", "releaseNote", "outcome", "outcomeReason"]) {
2821
2849
  if (value[k] !== void 0 && typeof value[k] !== "string") return false;
2822
2850
  }
2823
2851
  if (value.version !== void 0 && !isNonNegativeInt(value.version)) return false;
@@ -2835,7 +2863,7 @@ function isMeshMissionRecordWire(value) {
2835
2863
  return true;
2836
2864
  }
2837
2865
  function isMissionUpsertRequest(value) {
2838
- if (!isRecord(value) || !hasOnlyKeys2(value, ["v", "meshId", "id", "title", "goal", "status", "brief", "structured", "summary", "outcome", "outcomeReason", "carryOverTo", "toCarryOver", "itemsAdd", "itemsUpdate"])) return false;
2866
+ if (!isRecord(value) || !hasOnlyKeys2(value, ["v", "meshId", "id", "title", "goal", "status", "brief", "structured", "summary", "releaseNote", "outcome", "outcomeReason", "carryOverTo", "toCarryOver", "itemsAdd", "itemsUpdate"])) return false;
2839
2867
  if (value.v !== TURN_IPC_PROTOCOL_VERSION) return false;
2840
2868
  if (!isEvidenceIdentifier(value.meshId)) return false;
2841
2869
  if (value.id !== void 0 && !isEvidenceIdentifier(value.id)) return false;
@@ -2843,7 +2871,7 @@ function isMissionUpsertRequest(value) {
2843
2871
  if (value.title.trim().length === 0 && value.toCarryOver !== true && value.id === void 0) return false;
2844
2872
  if (value.structured !== void 0 && typeof value.structured !== "boolean") return false;
2845
2873
  if (value.toCarryOver !== void 0 && typeof value.toCarryOver !== "boolean") return false;
2846
- for (const k of ["summary", "outcome", "outcomeReason"]) {
2874
+ for (const k of ["summary", "releaseNote", "outcome", "outcomeReason"]) {
2847
2875
  if (value[k] !== void 0 && typeof value[k] !== "string") return false;
2848
2876
  }
2849
2877
  if (value.carryOverTo !== void 0 && !isEvidenceIdentifier(value.carryOverTo)) return false;
@@ -3473,7 +3501,7 @@ function touchedFilesOutsideOwnership(touched, owned) {
3473
3501
 
3474
3502
  // src/mission-items.ts
3475
3503
  var MISSION_ITEM_KINDS = ["remaining", "live_check", "decision", "evidence"];
3476
- var MISSION_ITEM_STATES = ["open", "done", "dropped", "moved", "answered", "expired", "withdrawn", "superseded"];
3504
+ var MISSION_ITEM_STATES = ["open", "done", "failed", "dropped", "moved", "answered", "expired", "withdrawn", "superseded"];
3477
3505
  var COORDINATOR_SETTABLE_ITEM_STATES = {
3478
3506
  remaining: ["open", "done", "dropped"],
3479
3507
  live_check: ["open", "done", "dropped"],
@@ -3743,6 +3771,81 @@ function normalizeReportCommits(value) {
3743
3771
  return out;
3744
3772
  }
3745
3773
 
3774
+ // src/mission-git-state.ts
3775
+ var MISSION_REF_GIT_STATUSES = ["contained_ancestor", "contained_patch_equivalent", "not_contained", "unknown"];
3776
+ var MISSION_REF_GIT_METHODS = ["ancestry", "cherry", "residual_patch"];
3777
+ var MISSION_GIT_STATES = ["no_refs", "landed", "partial", "not_landed", "unknown"];
3778
+ function isMissionRefContained(status) {
3779
+ return status === "contained_ancestor" || status === "contained_patch_equivalent";
3780
+ }
3781
+ function aggregateMissionGitState(statuses) {
3782
+ const total = statuses.length;
3783
+ const contained = statuses.filter(isMissionRefContained).length;
3784
+ const notContained = statuses.filter((s) => s === "not_contained").length;
3785
+ const unknown = statuses.filter((s) => s === "unknown").length;
3786
+ const counts = { total, contained, notContained, unknown };
3787
+ if (total === 0) return { state: "no_refs", partialUnknown: false, counts };
3788
+ if (contained === total) return { state: "landed", partialUnknown: false, counts };
3789
+ if (contained > 0) return { state: "partial", partialUnknown: unknown > 0, counts };
3790
+ if (notContained === total) return { state: "not_landed", partialUnknown: false, counts };
3791
+ return { state: "unknown", partialUnknown: false, counts };
3792
+ }
3793
+
3794
+ // src/release.ts
3795
+ var MESH_RELEASE_CHANNELS = ["preview", "stable"];
3796
+ function isMeshReleaseChannel(value) {
3797
+ return typeof value === "string" && MESH_RELEASE_CHANNELS.includes(value);
3798
+ }
3799
+ var MESH_RELEASE_STATUSES = ["planned", "frozen", "deployed", "verified", "superseded", "cancelled"];
3800
+ function isReleaseStatus(value) {
3801
+ return typeof value === "string" && MESH_RELEASE_STATUSES.includes(value);
3802
+ }
3803
+ var RELEASE_MEMBER_STATES = ["member", "moved_out", "removed"];
3804
+ var RELEASE_ACTORS = ["coordinator", "owner", "assistant", "script"];
3805
+ var RELEASE_EVENT_TYPES = [
3806
+ "created",
3807
+ "status_changed",
3808
+ "scope_added",
3809
+ "scope_moved",
3810
+ "scope_removed",
3811
+ "deploy_recorded",
3812
+ "changelog_drafted",
3813
+ "changelog_applied"
3814
+ ];
3815
+ var MISSION_RELEASE_EVENT_TYPES = ["release_attached", "release_moved", "release_detached"];
3816
+ var RELEASE_LIMITS = {
3817
+ name: 80,
3818
+ note: 500,
3819
+ /** `mesh_missions.release_note`: one user/operator-visible sentence. */
3820
+ releaseNote: 400,
3821
+ missionsPerCall: 100,
3822
+ changelogEntries: 300
3823
+ };
3824
+ var CHANGELOG_SECTIONS = ["Added", "Fixed", "Changed"];
3825
+ var NEEDS_WORDING_MARKER = "[needs user-facing wording]";
3826
+ function changelogMissionMarker(missionId) {
3827
+ return `<!-- m:${missionId.slice(0, 8)} -->`;
3828
+ }
3829
+ function classifyChangelogSection(text, hint) {
3830
+ const m = /^\s*\[(added|fixed|changed)\]\s*/i.exec(text);
3831
+ if (m) {
3832
+ const key = m[1].toLowerCase();
3833
+ return { section: key === "added" ? "Added" : key === "fixed" ? "Fixed" : "Changed", text: text.slice(m[0].length).trim() };
3834
+ }
3835
+ const probe = `${hint ?? ""} ${text}`.toLowerCase();
3836
+ if (/\b(fix|fixes|fixed|bug|regression|crash|error)\b|오류|결함|버그|수정/.test(probe)) return { section: "Fixed", text };
3837
+ if (/\b(add|adds|added|new|introduc\w*|support\w*)\b|신규|추가/.test(probe)) return { section: "Added", text };
3838
+ return { section: "Changed", text };
3839
+ }
3840
+ function lintChangelogText(text) {
3841
+ const out = [];
3842
+ if (/\bwave[\s-]*\d+/i.test(text) || /웨이브\s*\d+/.test(text)) out.push("mentions an internal wave number");
3843
+ if (/\brc[.\s-]?\d+\b/i.test(text)) out.push("mentions an internal rc number");
3844
+ 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");
3845
+ if (/\bmission\b/i.test(text)) out.push('mentions "mission" (internal vocabulary)');
3846
+ return out;
3847
+ }
3848
+
3746
3849
  // src/decision-push-relay.ts
3747
3850
  var DECISION_PUSH_RELAY_COMMAND = "mission_decision_push_relay_answer";
3748
3851
  var DECISION_PUSH_RELAY_SOURCE = "push_relay";
@@ -4210,6 +4313,7 @@ export {
4210
4313
  CANONICAL_MESH_TOOL_NAMES,
4211
4314
  CARRY_OVER_MISSION_GOAL,
4212
4315
  CARRY_OVER_MISSION_TITLE,
4316
+ CHANGELOG_SECTIONS,
4213
4317
  CLAUDE_TUI_REVIEW_PAGE_NOT_FOCUSED_PREFIX,
4214
4318
  CLAUDE_TUI_REVIEW_UNCONFIRMED_PREFIX,
4215
4319
  CLI_SLOT_RECIPES,
@@ -4260,6 +4364,8 @@ export {
4260
4364
  MESH_MISSION_STATUSES,
4261
4365
  MESH_P2P_SIGNAL_TYPES,
4262
4366
  MESH_RECORD_PAYLOAD_KEYS,
4367
+ MESH_RELEASE_CHANNELS,
4368
+ MESH_RELEASE_STATUSES,
4263
4369
  MESH_SESSION_CLEANUP_MODES,
4264
4370
  MESH_STATUS_DOC_SPEC,
4265
4371
  MESH_TASK_DIFFICULTIES,
@@ -4274,15 +4380,20 @@ export {
4274
4380
  MISSION_DECISION_ON_DUE,
4275
4381
  MISSION_DECISION_OPTION_IDS,
4276
4382
  MISSION_DECISION_URGENCIES,
4383
+ MISSION_GIT_STATES,
4277
4384
  MISSION_ITEM_KINDS,
4278
4385
  MISSION_ITEM_STATES,
4279
4386
  MISSION_LIMITS,
4280
4387
  MISSION_OUTCOMES,
4388
+ MISSION_REF_GIT_METHODS,
4389
+ MISSION_REF_GIT_STATUSES,
4281
4390
  MISSION_REF_KINDS,
4391
+ MISSION_RELEASE_EVENT_TYPES,
4282
4392
  MODEL_AXIS_SOURCES,
4283
4393
  MODEL_SELECTION_HISTORY_LIMIT,
4284
4394
  MeshChunkAssembler,
4285
4395
  NATIVE_TURN_OUTCOMES,
4396
+ NEEDS_WORDING_MARKER,
4286
4397
  NOTIFY_KINDS,
4287
4398
  NO_PROGRESS_OBSERVED_STATUSES,
4288
4399
  NPM_UPDATE_TAGS,
@@ -4305,7 +4416,11 @@ export {
4305
4416
  RELAY_REPROBE_BASE_DELAY_MS,
4306
4417
  RELAY_REPROBE_JITTER_RATIO,
4307
4418
  RELAY_REPROBE_MAX_DELAY_MS,
4419
+ RELEASE_ACTORS,
4308
4420
  RELEASE_CHANNELS,
4421
+ RELEASE_EVENT_TYPES,
4422
+ RELEASE_LIMITS,
4423
+ RELEASE_MEMBER_STATES,
4309
4424
  REMOVED_MESH_TOOLS,
4310
4425
  RETIRED_MESH_TOOLS,
4311
4426
  RelayReprobeScheduler,
@@ -4352,12 +4467,15 @@ export {
4352
4467
  WORKER_REPORT_OUTCOMES,
4353
4468
  WORKER_REPORT_SUMMARY_MAX_CHARS,
4354
4469
  WORKER_TOOLS,
4470
+ aggregateMissionGitState,
4355
4471
  appendWorkerProtocolFooter,
4356
4472
  argsCarryStatusProbeMarker,
4357
4473
  assessQuotaFreshness,
4358
4474
  boundEventPayload,
4359
4475
  buildSlotProposal,
4360
4476
  canonicalDaemonId,
4477
+ changelogMissionMarker,
4478
+ classifyChangelogSection,
4361
4479
  classifySessionStatus,
4362
4480
  compareDashboardWireVersion,
4363
4481
  compareSemver,
@@ -4474,6 +4592,7 @@ export {
4474
4592
  isMeshMissionStatusValue,
4475
4593
  isMeshP2PSignalType,
4476
4594
  isMeshRecordPayload,
4595
+ isMeshReleaseChannel,
4477
4596
  isMeshTaskDifficulty,
4478
4597
  isMeshTaskMode,
4479
4598
  isMeshTaskPriority,
@@ -4482,6 +4601,7 @@ export {
4482
4601
  isMeshTopicEntry,
4483
4602
  isMessageId,
4484
4603
  isMissionOutcome,
4604
+ isMissionRefContained,
4485
4605
  isMissionUpsertResponse,
4486
4606
  isModelAxisSource,
4487
4607
  isNativeMarkerRef,
@@ -4495,6 +4615,7 @@ export {
4495
4615
  isRawDaemonDoId,
4496
4616
  isReadyStatus,
4497
4617
  isRecord,
4618
+ isReleaseStatus,
4498
4619
  isSendPolicy,
4499
4620
  isSendPolicyMode,
4500
4621
  isSendRefusal,
@@ -4521,6 +4642,7 @@ export {
4521
4642
  isWorkingStatus,
4522
4643
  joinRepoPath,
4523
4644
  launchModelSelectionValue,
4645
+ lintChangelogText,
4524
4646
  machineCoreFromDaemonId,
4525
4647
  makeTypeGuard,
4526
4648
  measureWorstCaseChunkEnvelopeBytes,