mancode 0.5.0 → 0.5.2

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.
@@ -164,6 +164,10 @@ var V3_CODEX_START_MARKER = "<!-- mancode:continuity:codex:start -->";
164
164
  var V3_CODEX_END_MARKER = "<!-- mancode:continuity:codex:end -->";
165
165
  var V3_ZCODE_START_MARKER = "<!-- mancode:continuity:zcode:start -->";
166
166
  var V3_ZCODE_END_MARKER = "<!-- mancode:continuity:zcode:end -->";
167
+ var V3_KIMI_START_MARKER = "<!-- mancode:continuity:kimi:start -->";
168
+ var V3_KIMI_END_MARKER = "<!-- mancode:continuity:kimi:end -->";
169
+ var V3_QODER_START_MARKER = "<!-- mancode:continuity:qoder:start -->";
170
+ var V3_QODER_END_MARKER = "<!-- mancode:continuity:qoder:end -->";
167
171
  var V3_COPILOT_START_MARKER = "<!-- mancode:continuity:copilot:start -->";
168
172
  var V3_COPILOT_END_MARKER = "<!-- mancode:continuity:copilot:end -->";
169
173
  var LEGACY_V3_CODEX_MARKERS = [
@@ -182,6 +186,14 @@ var LEGACY_CODEX_START_MARKER = "<!-- mancode:start -->";
182
186
  var LEGACY_CODEX_END_MARKER = "<!-- mancode:end -->";
183
187
  var LEGACY_ZCODE_START_MARKER = "<!-- mancode:zcode:start -->";
184
188
  var LEGACY_ZCODE_END_MARKER = "<!-- mancode:zcode:end -->";
189
+ var LEGACY_KIMI_MARKERS = [
190
+ "<!-- mancode:kimi-code:start -->",
191
+ "<!-- mancode:kimi-code:end -->"
192
+ ];
193
+ var LEGACY_QODER_MARKERS = [
194
+ "<!-- mancode:qoder:start -->",
195
+ "<!-- mancode:qoder:end -->"
196
+ ];
185
197
  var RETRIABLE_ADAPTER_READ_CODES = /* @__PURE__ */ new Set(["EACCES", "EBUSY", "EPERM"]);
186
198
  var ADAPTER_READ_MAX_ATTEMPTS = 4;
187
199
  var ADAPTER_READ_RETRY_DELAY_MS = 25;
@@ -190,13 +202,16 @@ var V3_ADAPTER_PLATFORMS = [
190
202
  "codex",
191
203
  "cursor",
192
204
  "copilot",
193
- "zcode"
205
+ "zcode",
206
+ "kimi-code",
207
+ "qoder"
194
208
  ];
195
209
  var V3_MODE_ENTRY_FILE_TARGETS = V3_MODE_NAMES.flatMap((mode) => [
196
210
  `claude-mode-${mode}`,
197
211
  `agents-mode-${mode}`,
198
212
  `cursor-mode-${mode}`,
199
- `copilot-mode-${mode}`
213
+ `copilot-mode-${mode}`,
214
+ `qoder-mode-${mode}`
200
215
  ]);
201
216
  var V3_LEGACY_ADAPTER_FILE_TARGETS = [
202
217
  "claude-settings",
@@ -241,21 +256,37 @@ async function planV3AdapterFiles(projectRoot) {
241
256
  }
242
257
  const agents = removeLegacyV3Block(
243
258
  removeLegacyV3Block(
244
- removeLegacyAgentsBlocks(existing.get("agents") ?? ""),
245
- LEGACY_V3_CODEX_MARKERS
259
+ removeLegacyV3Block(
260
+ removeLegacyV3Block(
261
+ removeLegacyAgentsBlocks(existing.get("agents") ?? ""),
262
+ LEGACY_V3_CODEX_MARKERS
263
+ ),
264
+ LEGACY_V3_ZCODE_MARKERS
265
+ ),
266
+ LEGACY_KIMI_MARKERS
246
267
  ),
247
- LEGACY_V3_ZCODE_MARKERS
268
+ LEGACY_QODER_MARKERS
248
269
  );
249
270
  const nextAgents = replaceManagedV3BlockText(
250
271
  replaceManagedV3BlockText(
251
- agents,
252
- V3_CODEX_START_MARKER,
253
- V3_CODEX_END_MARKER,
254
- renderV3Bootstrap("codex")
272
+ replaceManagedV3BlockText(
273
+ replaceManagedV3BlockText(
274
+ agents,
275
+ V3_CODEX_START_MARKER,
276
+ V3_CODEX_END_MARKER,
277
+ renderV3Bootstrap("codex")
278
+ ),
279
+ V3_ZCODE_START_MARKER,
280
+ V3_ZCODE_END_MARKER,
281
+ renderV3Bootstrap("zcode")
282
+ ),
283
+ V3_KIMI_START_MARKER,
284
+ V3_KIMI_END_MARKER,
285
+ renderV3Bootstrap("kimi-code")
255
286
  ),
256
- V3_ZCODE_START_MARKER,
257
- V3_ZCODE_END_MARKER,
258
- renderV3Bootstrap("zcode")
287
+ V3_QODER_START_MARKER,
288
+ V3_QODER_END_MARKER,
289
+ renderV3Bootstrap("qoder")
259
290
  );
260
291
  const legacyAdapterPlans = planLegacyAdapterRetirement(existing);
261
292
  const plans = [
@@ -479,11 +510,14 @@ function v3ModeEntryPath(projectRoot, platform, mode) {
479
510
  return path.join(root, ".claude", "skills", mode, "SKILL.md");
480
511
  case "codex":
481
512
  case "zcode":
513
+ case "kimi-code":
482
514
  return path.join(root, ".agents", "skills", mode, "SKILL.md");
483
515
  case "cursor":
484
516
  return path.join(root, ".cursor", "commands", `${mode}.md`);
485
517
  case "copilot":
486
518
  return path.join(root, ".github", "prompts", `${mode}.prompt.md`);
519
+ case "qoder":
520
+ return path.join(root, ".qoder", "commands", `${mode}.md`);
487
521
  }
488
522
  }
489
523
  async function installV3Adapter(projectRoot, platform) {
@@ -545,6 +579,24 @@ async function installV3Adapter(projectRoot, platform) {
545
579
  ]
546
580
  );
547
581
  break;
582
+ case "kimi-code":
583
+ await replaceManagedV3Block(
584
+ path.join(root, "AGENTS.md"),
585
+ V3_KIMI_START_MARKER,
586
+ V3_KIMI_END_MARKER,
587
+ content,
588
+ [LEGACY_KIMI_MARKERS]
589
+ );
590
+ break;
591
+ case "qoder":
592
+ await replaceManagedV3Block(
593
+ path.join(root, "AGENTS.md"),
594
+ V3_QODER_START_MARKER,
595
+ V3_QODER_END_MARKER,
596
+ content,
597
+ [LEGACY_QODER_MARKERS]
598
+ );
599
+ break;
548
600
  }
549
601
  await retireLegacyPlatformFiles(root, platform);
550
602
  for (const mode of V3_MODE_NAMES) {
@@ -593,7 +645,9 @@ async function inspectV3AdapterVersions(projectRoot, requiredPlatforms = []) {
593
645
  "codex",
594
646
  "cursor",
595
647
  "copilot",
596
- "zcode"
648
+ "zcode",
649
+ "kimi-code",
650
+ "qoder"
597
651
  ];
598
652
  const required = new Set(requiredPlatforms);
599
653
  const entries = await Promise.all(
@@ -646,7 +700,11 @@ async function removeV3Adapter(projectRoot, platform) {
646
700
  );
647
701
  preserveSharedModeEntries = await anyManagedBlockPresent(
648
702
  path.join(root, "AGENTS.md"),
649
- [[V3_ZCODE_START_MARKER, V3_ZCODE_END_MARKER], LEGACY_V3_ZCODE_MARKERS]
703
+ [
704
+ [V3_ZCODE_START_MARKER, V3_ZCODE_END_MARKER],
705
+ LEGACY_V3_ZCODE_MARKERS,
706
+ [V3_KIMI_START_MARKER, V3_KIMI_END_MARKER]
707
+ ]
650
708
  );
651
709
  break;
652
710
  case "copilot":
@@ -672,7 +730,42 @@ async function removeV3Adapter(projectRoot, platform) {
672
730
  );
673
731
  preserveSharedModeEntries = await anyManagedBlockPresent(
674
732
  path.join(root, "AGENTS.md"),
675
- [[V3_CODEX_START_MARKER, V3_CODEX_END_MARKER], LEGACY_V3_CODEX_MARKERS]
733
+ [
734
+ [V3_CODEX_START_MARKER, V3_CODEX_END_MARKER],
735
+ LEGACY_V3_CODEX_MARKERS,
736
+ [V3_KIMI_START_MARKER, V3_KIMI_END_MARKER]
737
+ ]
738
+ );
739
+ break;
740
+ case "kimi-code":
741
+ await removeManagedV3Block(
742
+ path.join(root, "AGENTS.md"),
743
+ V3_KIMI_START_MARKER,
744
+ V3_KIMI_END_MARKER
745
+ );
746
+ await removeManagedV3Block(
747
+ path.join(root, "AGENTS.md"),
748
+ ...LEGACY_KIMI_MARKERS
749
+ );
750
+ preserveSharedModeEntries = await anyManagedBlockPresent(
751
+ path.join(root, "AGENTS.md"),
752
+ [
753
+ [V3_CODEX_START_MARKER, V3_CODEX_END_MARKER],
754
+ LEGACY_V3_CODEX_MARKERS,
755
+ [V3_ZCODE_START_MARKER, V3_ZCODE_END_MARKER],
756
+ LEGACY_V3_ZCODE_MARKERS
757
+ ]
758
+ );
759
+ break;
760
+ case "qoder":
761
+ await removeManagedV3Block(
762
+ path.join(root, "AGENTS.md"),
763
+ V3_QODER_START_MARKER,
764
+ V3_QODER_END_MARKER
765
+ );
766
+ await removeManagedV3Block(
767
+ path.join(root, "AGENTS.md"),
768
+ ...LEGACY_QODER_MARKERS
676
769
  );
677
770
  break;
678
771
  }
@@ -686,8 +779,8 @@ async function removeV3Adapter(projectRoot, platform) {
686
779
  function renderV3Bootstrap(platform) {
687
780
  const platformLabel = platformLabelFor(platform);
688
781
  const sessionArguments = sessionArgumentsFor(platform);
689
- const sessionCreationGuidance = platform === "codex" || platform === "zcode" ? "When status has no `session`, first reuse any explicit session ID already returned in this conversation. Only when neither exists, create one once with `mancode context session new --client codex` in Codex or `mancode context session new --client zcode` in ZCode." : `When status has no \`session\`, first reuse any explicit session ID already returned in this conversation. Only when neither exists, create one once with \`mancode context session new --client ${platform}\`.`;
690
- const spikePlatform = platform === "codex" || platform === "zcode" ? "the active Codex or ZCode host" : platform;
782
+ const sessionCreationGuidance = platform === "codex" || platform === "zcode" || platform === "kimi-code" ? "When status has no `session`, first reuse any explicit session ID already returned in this conversation. Only when neither exists, create one once with `mancode context session new --client codex` in Codex, `mancode context session new --client zcode` in ZCode, or `mancode context session new --client kimi-code` in Kimi Code." : `When status has no \`session\`, first reuse any explicit session ID already returned in this conversation. Only when neither exists, create one once with \`mancode context session new --client ${platform}\`.`;
783
+ const spikePlatform = platform === "codex" || platform === "zcode" || platform === "kimi-code" ? "the active Codex, ZCode, or Kimi Code host" : platform;
691
784
  const modeEntry = capabilitiesFor(platform).nativeModeEntry ? "Use the platform mode entry only as a shortcut; resolve a Context Pack first." : "This platform has no native mancode mode entry; use the CLI commands explicitly.";
692
785
  return [
693
786
  "# mancode bootstrap",
@@ -721,6 +814,9 @@ function renderV3Bootstrap(platform) {
721
814
  "- For a mode entry, request the matching Context Pack purpose: `plan`, `implement`, `review`, `verify`, or `handoff`.",
722
815
  "- Do not persist task, mode, or session state in this adapter file or any legacy state file.",
723
816
  `- ${modeEntry}`,
817
+ ...platform === "qoder" ? [
818
+ "- Treat host-injected security scan findings (L1/L2/L3) as advisory review input for the current step. In a governed review, fold open findings into the single remediation round; after any post-verification code change, re-run and re-record the required checks before completing. Scan findings never reopen completed reviews or bypass workflow revisions."
819
+ ] : [],
724
820
  `- No approved session or prompt hook is assumed. After a real-host spike is recorded for ${spikePlatform}, a verified host may provide MANCODE_HOST_SESSION_KEY; otherwise mutations require an explicit \`--session\`.`
725
821
  ].join("\n");
726
822
  }
@@ -730,7 +826,7 @@ function renderV3ModeEntry(mode, platform) {
730
826
  const sessionClientGuidance = sessionClientGuidanceFor(platform);
731
827
  const statusGuidance = "Reuse a `mancode status --brief --json` snapshot already obtained in this conversation. Only when none exists, run it once from the project root.";
732
828
  const cliSelectionGuidance = "Before the first command, use `./node_modules/.bin/mancode` when it exists, otherwise `mancode`; check that selected binary with `--version` once and never mix binaries or versions. In every command below, replace the literal `mancode` with that selected binary path when the local binary exists.";
733
- const sessionCreationGuidance = platform === "codex" || platform === "zcode" ? "If status has no current session, reuse an explicit session ID already retained in this conversation. Only if neither exists, run `mancode context session new --client codex` in Codex or `mancode context session new --client zcode` in ZCode exactly once, then retain the returned session ID." : `If status has no current session, reuse an explicit session ID already retained in this conversation. Only if neither exists, run \`mancode context session new --client ${platform}\` exactly once and retain the returned session ID.`;
829
+ const sessionCreationGuidance = platform === "codex" || platform === "zcode" || platform === "kimi-code" ? "If status has no current session, reuse an explicit session ID already retained in this conversation. Only if neither exists, run `mancode context session new --client codex` in Codex, `mancode context session new --client zcode` in ZCode, or `mancode context session new --client kimi-code` in Kimi Code exactly once, then retain the returned session ID." : `If status has no current session, reuse an explicit session ID already retained in this conversation. Only if neither exists, run \`mancode context session new --client ${platform}\` exactly once and retain the returned session ID.`;
734
830
  let authoritySteps;
735
831
  if (mode === "manps") {
736
832
  authoritySteps = [
@@ -765,7 +861,7 @@ function renderV3ModeEntry(mode, platform) {
765
861
  }
766
862
  const frontmatter = [
767
863
  "---",
768
- ...platform === "claude-code" || platform === "codex" || platform === "zcode" ? [`name: ${mode}`] : [],
864
+ ...platform === "claude-code" || platform === "codex" || platform === "zcode" || platform === "kimi-code" || platform === "qoder" ? [`name: ${mode}`] : [],
769
865
  ...platform === "copilot" ? ["agent: 'agent'"] : [],
770
866
  `description: ${JSON.stringify(definition.description)}`,
771
867
  "---"
@@ -799,11 +895,11 @@ function renderV3ModeEntry(mode, platform) {
799
895
  ].join("\n");
800
896
  }
801
897
  function sessionArgumentsFor(platform) {
802
- const client = platform === "codex" || platform === "zcode" ? "<active-client>" : platform;
898
+ const client = platform === "codex" || platform === "zcode" || platform === "kimi-code" ? "<active-client>" : platform;
803
899
  return `--session <id> --client ${client}`;
804
900
  }
805
901
  function sessionClientGuidanceFor(platform) {
806
- return platform === "codex" || platform === "zcode" ? "Use `--client codex` in Codex or `--client zcode` in ZCode on every command that uses this session." : `Use \`--client ${platform}\` on every command that uses this session.`;
902
+ return platform === "codex" || platform === "zcode" || platform === "kimi-code" ? "Use `--client codex` in Codex, `--client zcode` in ZCode, or `--client kimi-code` in Kimi Code on every command that uses this session." : `Use \`--client ${platform}\` on every command that uses this session.`;
807
903
  }
808
904
  var V3_MODE_DEFINITIONS = {
809
905
  man: {
@@ -813,6 +909,7 @@ var V3_MODE_DEFINITIONS = {
813
909
  actions: [
814
910
  "- For a read-only project orientation, inspect and answer directly; do not create governance records.",
815
911
  '- For a new task, run `mancode workflow create man "<task>" --session <id>`.',
912
+ "- Read `.mancode/shared/context/glossary.json` when it exists and prefer its confirmed terms in clarification, requirements, plans, reports, and naming.",
816
913
  "- Before writing requirements, inspect the relevant project facts and implementation, then run a decision-readiness gate covering both clarity and soundness. Treat the request as ready only when the goal, in-scope/out-of-scope behavior, acceptance boundary, semantic owner/source of truth, and decision-changing constraints are supplied and consistent with evidence, verifiable from the repository, or explicitly recorded as safe defaults. A supplied instruction is not automatically correct. Do not ask ceremonial questions or manufacture alternatives when the request is already clear and sound.",
817
914
  "- Classify unresolved decisions as blocking, recommendable, or defaultable. Ask and wait for blocking decisions; for recommendable decisions, present 2\u20133 bounded options with tradeoffs and one clear recommendation; use a default only when it is low-impact, reversible, consistent with repository conventions, and recorded with its reason.",
818
915
  "- If any unresolved ambiguity could change the goal, scope, user-visible behavior, acceptance, architecture, data, security, compatibility, owner, or source of truth, stop before requirements finalization, explain the missing decision, ask focused questions, and wait for the user answer. Ask in as many batches as needed, do not repeat answered questions, and never turn an unverified assumption into confirmed scope or confirmed coverage.",
@@ -829,7 +926,8 @@ var V3_MODE_DEFINITIONS = {
829
926
  "- Confirming with `--plan-decision plan_only` keeps the plan as planned authority and clears this session's active workflow pointer. Resume the TaskRef explicitly before any later governed mutation.",
830
927
  '- When new evidence materially invalidates confirmed requirements and the operator explicitly chooses to realign the same local task, resume its TaskRef if needed, generate a fresh canonical checkpoint ULID, and run `mancode workflow reframe <namespace:ULID> --expected-revision <n> --checkpoint-id <fresh-ULID> --summary "<reason>" --next-action "<step-2 action>" --session <id>`. Reframe archives the confirmed requirements and plan, clears the plan decision, and stops at Step 2 with draft requirements. Do not substitute plan revise, scope-change, or workflow update for reframe.',
831
928
  "- Read reframe evidence without opening private authority files: `mancode workflow archive <namespace:ULID> show <archive-ULID> --json` and `mancode workflow checkpoint <namespace:ULID> show <checkpoint-ULID> --json`.",
832
- "- Apply verification and review ledgers with their mancode `apply --file` commands, then use `mancode workflow complete <namespace:ULID> --expected-revision <n> --session <id>`."
929
+ "- Apply verification and review ledgers with their mancode `apply --file` commands, then use `mancode workflow complete <namespace:ULID> --expected-revision <n> --session <id>`.",
930
+ '- When a new high-frequency domain term emerges, propose it to the operator; only after explicit confirmation register it with `mancode context glossary add --term "<term>" --definition "<definition>" --expected-revision <n> --session <id>`. Never write to the glossary without operator confirmation.'
833
931
  ]
834
932
  },
835
933
  manba: {
@@ -850,6 +948,7 @@ var V3_MODE_DEFINITIONS = {
850
948
  contextPurpose: "plan",
851
949
  actions: [
852
950
  "- Confirm team membership with `mancode team status`; join invited participants before assigning shared work.",
951
+ "- Read `.mancode/shared/context/glossary.json` when it exists and prefer its confirmed terms in shared requirements, plans, and handoffs.",
853
952
  '- For a new shared task, run `mancode workflow create manteam "<task>" --visibility shared --coordination team --confirm-shared --session <id>`.',
854
953
  "- Apply the same decision-readiness gate as `man` before finalizing requirements: validate both clarity and soundness against project facts and team authority. If the goal, scope, acceptance, owner/source of truth, and constraints are clear and consistent, continue without ceremonial questions; if a decision-changing ambiguity, ownership conflict, or hard-risk direction remains, give evidence and a recommendation, ask focused questions, and wait before writing confirmed requirements.",
855
954
  "- Persist unresolved team clarification through the same `workflow requirements <namespace:ULID> draft --file <requirements.json>` command as `man`; do not leave ownership questions or partial answers only in chat history.",
@@ -872,6 +971,7 @@ var V3_MODE_DEFINITIONS = {
872
971
  contextPurpose: "implement",
873
972
  actions: [
874
973
  "- Do not create or persist a legacy solo mode. Ordinary focused work needs no TaskRef; if the operator expects a governed task, use its bound TaskRef or report that none is bound.",
974
+ "- Read `.mancode/shared/context/glossary.json` when it exists and prefer its confirmed terms.",
875
975
  "- Before editing, assess both clarity and soundness using the project facts. If the request is clear, consistent, and low risk, proceed without ceremonial questions. Resolve repository-answerable unknowns yourself; classify the rest as blocking, recommendable, or defaultable. Ask and wait only when a blocking unknown could materially change behavior, scope, acceptance, data, security, compatibility, or ownership.",
876
976
  "- A supplied implementation direction is not automatically safe. If it conflicts with repository evidence or involves authentication, payment, sensitive data, deletion, migration, public APIs, untrusted input, concurrency, infrastructure, or another irreversible effect, show the evidence and impact, recommend the safer path, ask for focused confirmation, and wait before editing.",
877
977
  "- If resolving the ambiguity requires architecture, semantic owner/source-of-truth, cross-module scope, migration, team coordination, or formal acceptance decisions, recommend `/man`, explain the trigger, and wait for the operator to choose; advice alone never changes mode or authority.",
@@ -935,6 +1035,27 @@ async function renderV3AdapterCandidate(root, platform) {
935
1035
  renderV3Bootstrap(platform)
936
1036
  );
937
1037
  }
1038
+ case "kimi-code": {
1039
+ const existing = await readAdapterTarget(root, "agents") ?? "";
1040
+ return replaceManagedV3BlockText(
1041
+ removeLegacyV3Block(
1042
+ removeLegacyAgentsBlocks(existing),
1043
+ LEGACY_KIMI_MARKERS
1044
+ ),
1045
+ V3_KIMI_START_MARKER,
1046
+ V3_KIMI_END_MARKER,
1047
+ renderV3Bootstrap(platform)
1048
+ );
1049
+ }
1050
+ case "qoder": {
1051
+ const existing = await readAdapterTarget(root, "agents") ?? "";
1052
+ return replaceManagedV3BlockText(
1053
+ removeLegacyV3Block(existing, LEGACY_QODER_MARKERS),
1054
+ V3_QODER_START_MARKER,
1055
+ V3_QODER_END_MARKER,
1056
+ renderV3Bootstrap(platform)
1057
+ );
1058
+ }
938
1059
  }
939
1060
  }
940
1061
  function renderCursorRule(content) {
@@ -984,6 +1105,8 @@ function primaryFileTarget(platform) {
984
1105
  return "cursor-rule";
985
1106
  case "codex":
986
1107
  case "zcode":
1108
+ case "kimi-code":
1109
+ case "qoder":
987
1110
  return "agents";
988
1111
  case "copilot":
989
1112
  return "copilot-instructions";
@@ -1042,6 +1165,31 @@ function planPlatformBootstrapUpgrade(desired, platform) {
1042
1165
  )
1043
1166
  );
1044
1167
  return;
1168
+ case "kimi-code":
1169
+ desired.set(
1170
+ target,
1171
+ replaceManagedV3BlockText(
1172
+ removeLegacyV3Block(
1173
+ removeLegacyAgentsBlocks(current ?? ""),
1174
+ LEGACY_KIMI_MARKERS
1175
+ ),
1176
+ V3_KIMI_START_MARKER,
1177
+ V3_KIMI_END_MARKER,
1178
+ renderV3Bootstrap(platform)
1179
+ )
1180
+ );
1181
+ return;
1182
+ case "qoder":
1183
+ desired.set(
1184
+ target,
1185
+ replaceManagedV3BlockText(
1186
+ removeLegacyV3Block(current ?? "", LEGACY_QODER_MARKERS),
1187
+ V3_QODER_START_MARKER,
1188
+ V3_QODER_END_MARKER,
1189
+ renderV3Bootstrap(platform)
1190
+ )
1191
+ );
1192
+ return;
1045
1193
  case "copilot":
1046
1194
  desired.set(
1047
1195
  target,
@@ -1104,6 +1252,24 @@ function primaryManagedTargetSpec(platform) {
1104
1252
  V3_ZCODE_END_MARKER,
1105
1253
  renderV3Bootstrap(platform)
1106
1254
  );
1255
+ case "kimi-code":
1256
+ return embeddedManagedTargetSpec(
1257
+ target,
1258
+ "agents#kimi-code",
1259
+ "agents",
1260
+ V3_KIMI_START_MARKER,
1261
+ V3_KIMI_END_MARKER,
1262
+ renderV3Bootstrap(platform)
1263
+ );
1264
+ case "qoder":
1265
+ return embeddedManagedTargetSpec(
1266
+ target,
1267
+ "agents#qoder",
1268
+ "agents",
1269
+ V3_QODER_START_MARKER,
1270
+ V3_QODER_END_MARKER,
1271
+ renderV3Bootstrap(platform)
1272
+ );
1107
1273
  }
1108
1274
  }
1109
1275
  function embeddedManagedTargetSpec(target, identity, fileTarget, startMarker, endMarker, content) {
@@ -1116,7 +1282,7 @@ function embeddedManagedTargetSpec(target, identity, fileTarget, startMarker, en
1116
1282
  };
1117
1283
  }
1118
1284
  function modeEntryFileTarget(platform, mode) {
1119
- const family = platform === "claude-code" ? "claude" : platform === "codex" || platform === "zcode" ? "agents" : platform;
1285
+ const family = platform === "claude-code" ? "claude" : platform === "codex" || platform === "zcode" || platform === "kimi-code" ? "agents" : platform;
1120
1286
  return `${family}-mode-${mode}`;
1121
1287
  }
1122
1288
  async function inspectManagedTarget(root, platform, spec) {
@@ -1433,11 +1599,14 @@ function legacyAdapterTargetsForPlatform(platform, includeSettings) {
1433
1599
  (target) => /^(cursor-legacy|cursor-alias)-/u.test(target)
1434
1600
  );
1435
1601
  }
1436
- if (platform === "codex" || platform === "zcode") {
1602
+ if (platform === "codex" || platform === "zcode" || platform === "kimi-code") {
1437
1603
  return V3_LEGACY_ADAPTER_FILE_TARGETS.filter(
1438
1604
  (target) => target.startsWith("agents-alias-")
1439
1605
  );
1440
1606
  }
1607
+ if (platform === "qoder") {
1608
+ return [];
1609
+ }
1441
1610
  return V3_LEGACY_ADAPTER_FILE_TARGETS.filter(
1442
1611
  (target) => target.startsWith("copilot-alias-")
1443
1612
  );
@@ -1622,13 +1791,13 @@ function renderModeEntryForFileTarget(target) {
1622
1791
  return renderV3ModeEntry(parsed.mode, parsed.platform);
1623
1792
  }
1624
1793
  function parseModeEntryFileTarget(target) {
1625
- const match = /^(claude|agents|cursor|copilot)-mode-(manba|man|manteam|manps|mansolo)$/u.exec(
1794
+ const match = /^(claude|agents|cursor|copilot|qoder)-mode-(manba|man|manteam|manps|mansolo)$/u.exec(
1626
1795
  target
1627
1796
  );
1628
1797
  if (!match) return null;
1629
1798
  const family = match[1];
1630
1799
  const mode = match[2];
1631
- const platform = family === "claude" ? "claude-code" : family === "agents" ? "codex" : family === "cursor" ? "cursor" : "copilot";
1800
+ const platform = family === "claude" ? "claude-code" : family === "agents" ? "codex" : family === "cursor" ? "cursor" : family === "qoder" ? "qoder" : "copilot";
1632
1801
  return { platform, mode };
1633
1802
  }
1634
1803
  function isRecord(value) {
@@ -1766,6 +1935,8 @@ function targetFor(platform) {
1766
1935
  return ".cursor/rules/mancode-continuity.mdc";
1767
1936
  case "codex":
1768
1937
  case "zcode":
1938
+ case "kimi-code":
1939
+ case "qoder":
1769
1940
  return "AGENTS.md";
1770
1941
  case "copilot":
1771
1942
  return ".github/copilot-instructions.md";
@@ -1819,11 +1990,15 @@ function platformLabelFor(platform) {
1819
1990
  case "cursor":
1820
1991
  return "Cursor";
1821
1992
  case "codex":
1822
- return "Codex or ZCode (shared AGENTS.md bootstrap)";
1993
+ return "Codex, ZCode, or Kimi Code (shared AGENTS.md bootstrap)";
1823
1994
  case "copilot":
1824
1995
  return "GitHub Copilot";
1825
1996
  case "zcode":
1826
- return "Codex or ZCode (shared AGENTS.md bootstrap)";
1997
+ return "Codex, ZCode, or Kimi Code (shared AGENTS.md bootstrap)";
1998
+ case "kimi-code":
1999
+ return "Codex, ZCode, or Kimi Code (shared AGENTS.md bootstrap)";
2000
+ case "qoder":
2001
+ return "Qoder (IDE/CLI)";
1827
2002
  }
1828
2003
  }
1829
2004
  function capabilitiesFor(_platform) {
@@ -1877,4 +2052,4 @@ export {
1877
2052
  renderV3Bootstrap,
1878
2053
  renderV3ModeEntry
1879
2054
  };
1880
- //# sourceMappingURL=chunk-73F46VQM.js.map
2055
+ //# sourceMappingURL=chunk-2JOKDC3X.js.map