@duo-director/cli 0.1.0 → 0.1.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.
@@ -16402,6 +16402,8 @@ var EN = {
16402
16402
  "init.dirty.choose": "Adoption baseline: [1] use HEAD as the baseline (current changes stay changes to review) [2] abort and clean the repository first",
16403
16403
  "init.dirty.policy-required": "The working tree is dirty. Choose --baseline-policy head (HEAD as baseline) or abort (clean first). --yes does not choose it.",
16404
16404
  "init.dirty.aborted": "Baseline not captured. Commit or stash your changes, then run duoctl init again (Truth and index are kept).",
16405
+ "init.unborn": "Baseline not captured: this repository does not have an initial commit yet. Create the first commit, then run duoctl init again (Truth and index are kept).",
16406
+ "init.unborn.dirty": "This repository does not have an initial commit yet, so no adoption baseline can be captured. Create the first commit, then run duoctl init again.",
16405
16407
  "init.imports": "Import candidates found: {n} (not imported; review them yourself)",
16406
16408
  "init.documents": "Candidate documents: {list}",
16407
16409
  "init.question.project_goal": "Project goal (one sentence)",
@@ -16414,10 +16416,12 @@ var EN = {
16414
16416
  "init.repair-required": ".duo-project exists without project.yaml; rerun with --repair to add only the missing files.",
16415
16417
  "init.open": "Open questions (UNKNOWN lines in intent/vision.md): {list}",
16416
16418
  "init.done": "DUO is set up. Next: duoctl status \xB7 duoctl context <task> \xB7 duoctl review",
16419
+ "init.agents": "Connect a coding agent: duoctl install codex \xB7 duoctl install claude-code",
16417
16420
  "init.cancelled": "Cancelled; nothing written.",
16418
16421
  "status.project": "Project {name} \xB7 goal {goal} \xB7 milestone {milestone}",
16419
16422
  "status.truth": "Truth: {requirements} requirements \xB7 {decisions} decisions \xB7 {constraints} constraints \xB7 {gaps} declared gaps",
16420
16423
  "status.index": "Index: {status}{reason}",
16424
+ "status.index-remediation": " Run duoctl index to refresh the project index.",
16421
16425
  "status.changes": "Changed since index: {files} files \xB7 analysis stale {analysis} \xB7 module resolution {modules} \xB7 calls may be recomputed {calls}",
16422
16426
  "status.analysis": "Analysis: {languages}",
16423
16427
  "status.baseline": "Adoption baseline: {status}{detail}",
@@ -16486,6 +16490,8 @@ var KO = {
16486
16490
  "init.dirty.choose": "Adoption baseline: [1] HEAD\uB97C baseline\uC73C\uB85C \uC0AC\uC6A9(\uD604\uC7AC \uBCC0\uACBD\uC740 \uC774\uD6C4 Review \uB300\uC0C1) [2] \uC911\uB2E8\uD558\uACE0 \uBA3C\uC800 \uC800\uC7A5\uC18C \uC815\uB9AC",
16487
16491
  "init.dirty.policy-required": "\uC791\uC5C5 \uD2B8\uB9AC\uAC00 dirty\uD569\uB2C8\uB2E4. --baseline-policy head(HEAD\uB97C baseline) \uB610\uB294 abort(\uBA3C\uC800 \uC815\uB9AC)\uB97C \uACE0\uB974\uC138\uC694. --yes\uB294 \uC774\uAC83\uC744 \uACE0\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",
16488
16492
  "init.dirty.aborted": "Baseline\uC744 \uB9CC\uB4E4\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \uBCC0\uACBD\uC744 commit\uD558\uAC70\uB098 stash\uD55C \uB4A4 duoctl init\uC744 \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694(Truth\uC640 index\uB294 \uC720\uC9C0).",
16493
+ "init.unborn": "Baseline\uC744 \uB9CC\uB4E4\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4: \uC774 \uC800\uC7A5\uC18C\uC5D0\uB294 \uC544\uC9C1 \uCCAB commit\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uCCAB commit\uC744 \uB9CC\uB4E0 \uB4A4 duoctl init\uC744 \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694(Truth\uC640 index\uB294 \uC720\uC9C0).",
16494
+ "init.unborn.dirty": "\uC774 \uC800\uC7A5\uC18C\uC5D0\uB294 \uC544\uC9C1 \uCCAB commit\uC774 \uC5C6\uC5B4 adoption baseline\uC744 \uB9CC\uB4E4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uCCAB commit\uC744 \uB9CC\uB4E0 \uB4A4 duoctl init\uC744 \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.",
16489
16495
  "init.imports": "Import \uD6C4\uBCF4 {n}\uAC1C \uBC1C\uACAC(\uAC00\uC838\uC624\uC9C0 \uC54A\uC74C, \uC9C1\uC811 \uAC80\uD1A0\uD558\uC138\uC694)",
16490
16496
  "init.documents": "\uD6C4\uBCF4 \uBB38\uC11C: {list}",
16491
16497
  "init.question.project_goal": "\uD504\uB85C\uC81D\uD2B8 Goal(\uD55C \uBB38\uC7A5)",
@@ -16498,10 +16504,12 @@ var KO = {
16498
16504
  "init.repair-required": "project.yaml \uC5C6\uB294 .duo-project\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uC5C6\uB294 \uD30C\uC77C\uB9CC \uCD94\uAC00\uD558\uB824\uBA74 --repair\uB85C \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.",
16499
16505
  "init.open": "\uC5F4\uB9B0 \uC9C8\uBB38(intent/vision.md\uC758 UNKNOWN \uC904): {list}",
16500
16506
  "init.done": "DUO \uC124\uC815 \uC644\uB8CC. \uB2E4\uC74C: duoctl status \xB7 duoctl context <task> \xB7 duoctl review",
16507
+ "init.agents": "Coding agent \uC5F0\uACB0: duoctl install codex \xB7 duoctl install claude-code",
16501
16508
  "init.cancelled": "\uCDE8\uC18C\uD588\uC2B5\uB2C8\uB2E4. \uC544\uBB34\uAC83\uB3C4 \uC4F0\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.",
16502
16509
  "status.project": "Project {name} \xB7 goal {goal} \xB7 milestone {milestone}",
16503
16510
  "status.truth": "Truth: requirement {requirements} \xB7 decision {decisions} \xB7 constraint {constraints} \xB7 declared gap {gaps}",
16504
16511
  "status.index": "Index: {status}{reason}",
16512
+ "status.index-remediation": " duoctl index\uB97C \uC2E4\uD589\uD574 project index\uB97C \uAC31\uC2E0\uD558\uC138\uC694.",
16505
16513
  "status.changes": "Index \uC774\uD6C4 \uBCC0\uACBD: \uD30C\uC77C {files} \xB7 \uBD84\uC11D stale {analysis} \xB7 module resolution {modules} \xB7 \uC7AC\uACC4\uC0B0 \uAC00\uB2A5 call {calls}",
16506
16514
  "status.analysis": "\uBD84\uC11D \uC218\uC900: {languages}",
16507
16515
  "status.baseline": "Adoption baseline: {status}{detail}",
@@ -16879,6 +16887,8 @@ async function initCommand(env, options) {
16879
16887
  if (!aborted)
16880
16888
  diagnostics.push(createDiagnostic("ADOPTION_DIRTY_POLICY_REQUIRED", t("en", "init.dirty.policy-required")));
16881
16889
  human.push(t(env.locale, aborted ? "init.dirty.aborted" : "init.dirty.policy-required"));
16890
+ if (!aborted && o.git.unborn)
16891
+ human.push(t(env.locale, "init.unborn.dirty"));
16882
16892
  if (aborted)
16883
16893
  baseline = { status: "aborted" };
16884
16894
  report("baseline");
@@ -16967,6 +16977,7 @@ async function initCommand(env, options) {
16967
16977
  if (status.value.status === "incompatible")
16968
16978
  return finish(EXIT.ERROR);
16969
16979
  human.push(t(env.locale, "init.done"));
16980
+ human.push(t(env.locale, "init.agents"));
16970
16981
  return finish(EXIT.OK);
16971
16982
  }
16972
16983
  const captured = await withWriter(env.root, async (graph) => captureAdoptionBaseline(env.root, {
@@ -16981,6 +16992,8 @@ async function initCommand(env, options) {
16981
16992
  steps.baseline = { status: "failed" };
16982
16993
  report("baseline");
16983
16994
  human.push(...diagLines(captured.diagnostics));
16995
+ if (captured.diagnostics.some((d) => d.code === "ADOPTION_HEAD_REQUIRED"))
16996
+ human.push(t(env.locale, "init.unborn"));
16984
16997
  return finish(EXIT.ERROR);
16985
16998
  }
16986
16999
  if (captured.value.status === "aborted") {
@@ -16995,6 +17008,7 @@ async function initCommand(env, options) {
16995
17008
  steps.baseline = { status: "ok", detail: `${b.git.headOid.slice(0, 12)}${b.workingTree.dirty ? " \xB7 dirty at adoption (HEAD_BASELINE)" : ""} \xB7 ${b.findings.length} pre-existing findings` };
16996
17009
  report("baseline");
16997
17010
  human.push(t(env.locale, "init.done"));
17011
+ human.push(t(env.locale, "init.agents"));
16998
17012
  return finish(EXIT.OK);
16999
17013
  });
17000
17014
  }
@@ -17290,6 +17304,7 @@ async function statusCommand(env) {
17290
17304
  const c = s.index?.changes;
17291
17305
  const b = s.baseline;
17292
17306
  const a = s.analysis;
17307
+ const indexNeedsRun = s.index?.status === "stale" || s.index?.status === "missing" || s.index?.status === "incompatible";
17293
17308
  const fileOnlyExts = a?.fileOnly.extensions.slice(0, 5).map((e) => e.extension === "" ? "(none)" : `.${e.extension}`).join(", ") ?? "";
17294
17309
  const analysis = a === null ? void 0 : [
17295
17310
  ...a.languages.map((l) => `${l.language} ${l.level} (${l.files})`),
@@ -17299,6 +17314,7 @@ async function statusCommand(env) {
17299
17314
  t(L, "status.project", { name: s.project.name, goal: s.project.vision, milestone: s.project.currentMilestone ?? "-" }),
17300
17315
  t(L, "status.truth", { requirements: s.truth.requirements, decisions: s.truth.decisions, constraints: s.truth.constraints, gaps: s.truth.declaredGaps }),
17301
17316
  t(L, "status.index", { status: s.index?.status ?? "unknown", reason: s.index?.fullRebuildReason == null ? "" : ` (full rebuild: ${s.index.fullRebuildReason})` }),
17317
+ ...indexNeedsRun ? [t(L, "status.index-remediation")] : [],
17302
17318
  ...c === void 0 ? [] : [t(L, "status.changes", { files: c.files, analysis: c.analysisStale, modules: c.modulesToResolve, calls: c.callsMaybeRecomputed })],
17303
17319
  ...analysis === void 0 || analysis === "" ? [] : [t(L, "status.analysis", { languages: analysis })],
17304
17320
  t(L, "status.baseline", { status: b?.status ?? "unknown", detail: b?.headOid === void 0 ? "" : ` \xB7 ${b.headOid.slice(0, 12)}${b.dirtyAtAdoption === true ? " \xB7 dirty at adoption" : ""} \xB7 ${b.findings ?? 0} findings` }),
package/dist/duoctl.js CHANGED
@@ -29,7 +29,7 @@ if (problem !== void 0) {
29
29
  process.exit(1);
30
30
  }
31
31
  try {
32
- await import("./cli-GSP2L3UX.js");
32
+ await import("./cli-OWQX3DIA.js");
33
33
  } catch (error) {
34
34
  const e = error;
35
35
  if (e.code === "ERR_MODULE_NOT_FOUND" || e.code === "MODULE_NOT_FOUND") {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@duo-director/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@duo-director/cli",
9
- "version": "0.1.0",
9
+ "version": "0.1.1",
10
10
  "dependencies": {
11
11
  "@modelcontextprotocol/client": "2.1.0",
12
12
  "@modelcontextprotocol/server": "2.1.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duo-director/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "DUO: AI Project Direction Layer for Coding Agents (duoctl)",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {