@cotal-ai/cli 0.49.0 → 0.50.0
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/command.d.ts.map +1 -1
- package/dist/command.js +8 -0
- package/dist/command.js.map +1 -1
- package/dist/commands/agents.d.ts +143 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +126 -49
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +175 -11
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/join.d.ts.map +1 -1
- package/dist/commands/join.js +9 -1
- package/dist/commands/join.js.map +1 -1
- package/dist/commands/setup.d.ts +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +1 -1
- package/dist/commands/status.d.ts +11 -3
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +176 -13
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +12 -1
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +19 -7
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/auth-proc.d.ts.map +1 -1
- package/dist/lib/auth-proc.js +2 -1
- package/dist/lib/auth-proc.js.map +1 -1
- package/dist/lib/control.d.ts +28 -1
- package/dist/lib/control.d.ts.map +1 -1
- package/dist/lib/control.js +58 -11
- package/dist/lib/control.js.map +1 -1
- package/dist/lib/delivery-proc.d.ts +21 -5
- package/dist/lib/delivery-proc.d.ts.map +1 -1
- package/dist/lib/delivery-proc.js +82 -18
- package/dist/lib/delivery-proc.js.map +1 -1
- package/dist/lib/delivery-responder.d.ts +92 -0
- package/dist/lib/delivery-responder.d.ts.map +1 -0
- package/dist/lib/delivery-responder.js +78 -0
- package/dist/lib/delivery-responder.js.map +1 -0
- package/dist/lib/manager-proc.d.ts.map +1 -1
- package/dist/lib/manager-proc.js +4 -1
- package/dist/lib/manager-proc.js.map +1 -1
- package/dist/lib/self-exec.d.ts +15 -1
- package/dist/lib/self-exec.d.ts.map +1 -1
- package/dist/lib/self-exec.js +30 -3
- package/dist/lib/self-exec.js.map +1 -1
- package/package.json +5 -5
package/dist/command.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAwH7F,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B;;;oCAGgC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;uFAEuF;AACvF,wBAAsB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyGxG"}
|
package/dist/command.js
CHANGED
|
@@ -87,6 +87,14 @@ function skipAutoReconcile(argv) {
|
|
|
87
87
|
return true;
|
|
88
88
|
if (argv.includes("--help") || argv.includes("-h"))
|
|
89
89
|
return true; // command-specific help must not mutate state
|
|
90
|
+
// A dry run promises to plan and print while mutating NOTHING, and the boot-gate reconcile is a
|
|
91
|
+
// mutation of the operator-global seed store, manifest and npm prefix — it ran BEFORE the command
|
|
92
|
+
// body could reject the invocation, so `down --preserve-state --dry-run` (an unsupported
|
|
93
|
+
// combination) migrated the whole store to the invoking binary's generation and only then printed
|
|
94
|
+
// the usage refusal, leaving an older live deployment on a store it no longer matches (#1620). The
|
|
95
|
+
// planning surface reads what is installed; it never seeds to make the plan prettier.
|
|
96
|
+
if (argv.includes("--dry-run"))
|
|
97
|
+
return true;
|
|
90
98
|
if (name === "update")
|
|
91
99
|
return true; // update owns one explicit reconcile; never auto-refresh then force-refresh
|
|
92
100
|
// The seed is skipped for an INTERNAL CHILD re-exec — the `up`/`spawn` that spawns the delivery
|
package/dist/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAA+B,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEjE;;;4EAG4E;AAC5E,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAEjG,SAAS,IAAI,CAAC,QAAmB;IAC/B,+FAA+F;IAC/F,kFAAkF;IAClF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC;QAClC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE;QACzB,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,2CAA2C,CAAC;IACxE,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,GAAG,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IACtF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;sDACsD;AACtD,SAAS,WAAW,CAAC,GAAY;IAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC;AAED;;;;;;;;;;GAUG;AACH,KAAK,UAAU,QAAQ,CAAC,QAAkB,EAAE,IAAc;IACxD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACzB,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAU,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACpF,kGAAkG;QAClG,8FAA8F;QAC9F,8DAA8D;QAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,WAAW,CAAC,MAAM,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,yBAAyB,EAAE,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAc;IACvC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IACtH,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,8CAA8C;IAC/G,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,4EAA4E;IAChH,gGAAgG;IAChG,qGAAqG;IACrG,oGAAoG;IACpG,qGAAqG;IACrG,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC/D,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,gHAAgH;IACnK,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,mDAAmD;IACtG,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,oBAAoB,EAAE;QAAE,OAAO,IAAI,CAAC,CAAC,gCAAgC;IAC5G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yFAAyF;AACzF,SAAS,UAAU,CAAC,CAAU;IAC5B,MAAM,IAAI,GAAI,CAAuB,EAAE,IAAI,CAAC;IAC5C,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACvE,CAAC;AAWD;;uFAEuF;AACvF,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAkB,EAAE,IAAc,EAAE,OAAsB,EAAE;IACvF,iGAAiG;IACjG,iGAAiG;IACjG,6FAA6F;IAC7F,0BAA0B;IAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,CAAC,YAAY,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,6BAA6B,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACxD,+FAA+F;IAC/F,+FAA+F;IAC/F,yFAAyF;IACzF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,MAAM,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;gBAAE,OAAO;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,QAAmB,CAAC;IACxB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAU,SAAS,CAAC,CAAC;IAC9F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,2FAA2F;QAC3F,6EAA6E;QAC7E,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,gEAAgE;IAC7F,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChF,IAAI,CAAC,QAAQ,CAAC,CAAC;QACf,OAAO;IACT,CAAC;IACD,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,8FAA8F;IAC9F,6FAA6F;IAC7F,2FAA2F;IAC3F,iEAAiE;IACjE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACnF,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IACD,4FAA4F;IAC5F,wFAAwF;IACxF,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAC9C,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAAE,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,mFAAmF;QACnF,uFAAuF;QACvF,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM,GAAG,GAAI,CAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;YACjC,WAAW,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,8FAA8F;QAC9F,2FAA2F;QAC3F,4FAA4F;QAC5F,8FAA8F;QAC9F,+FAA+F;QAC/F,oBAAoB;QACpB,IAAI,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,4FAA4F;QAC5F,6FAA6F;QAC7F,sFAAsF;QACtF,6BAA6B;QAC7B,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,oFAAoF;QACpF,8EAA8E;QAC9E,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type CompletionResult, type ParsedArgs } from "@cotal-ai/core";
|
|
1
|
+
import { standaloneConnectOpts, type CompletionResult, type ParsedArgs, type SpaceAuth } from "@cotal-ai/core";
|
|
2
|
+
import { type ScatterInstanceReply } from "../lib/control.js";
|
|
2
3
|
export declare const stopFlags: readonly [{
|
|
3
4
|
readonly name: "space";
|
|
4
5
|
readonly type: "string";
|
|
@@ -154,6 +155,77 @@ type AgentRow = {
|
|
|
154
155
|
* recorded: when no override was requested it stays absent rather than inventing an effective
|
|
155
156
|
* provider default Cotal cannot observe. */
|
|
156
157
|
export declare function agentIdentity(r: Pick<AgentRow, "agent" | "model" | "variant" | "mode">): string;
|
|
158
|
+
/**
|
|
159
|
+
* WHERE does the named seat live? A `stop` or `attach` can only be served by the manager actually
|
|
160
|
+
* HOSTING the seat, and the class queue does not know which one that is — so without this the verb
|
|
161
|
+
* is answered by whichever instance wins the race and fails on a seat that plainly exists.
|
|
162
|
+
*
|
|
163
|
+
* This is a POSITIVE lookup, not a retry after a miss, and that is forced by measurement: a manager
|
|
164
|
+
* asked about a seat it does not host answers `not-found: no agent "<n>"` — the SAME code and the
|
|
165
|
+
* same message it gives for a name that exists nowhere. "Hosted elsewhere" and "does not exist" are
|
|
166
|
+
* indistinguishable from a single manager's answer, so a caller that retried on a miss would scatter
|
|
167
|
+
* for a typo and, worse, could only ever report the ambiguous message. Asking every instance is the
|
|
168
|
+
* only construction that can tell the two apart — which is also what lets the error finally say
|
|
169
|
+
* which case it is.
|
|
170
|
+
*
|
|
171
|
+
* Costs a second one-shot instrument. The scatter's freeze read belongs to the PRIVILEGED tier;
|
|
172
|
+
* `stop`/`attach` mint ADMIN, which is denied that read deliberately ("the admin tier never
|
|
173
|
+
* scatters"). Rather than widen admin for convenience, the lookup runs as its own privileged
|
|
174
|
+
* instrument and the admin instrument is then minted pinned to the answer.
|
|
175
|
+
*/
|
|
176
|
+
export type SeatLocation = {
|
|
177
|
+
kind: "pin";
|
|
178
|
+
instanceId: string;
|
|
179
|
+
} | {
|
|
180
|
+
kind: "unpinned";
|
|
181
|
+
} | {
|
|
182
|
+
kind: "absent";
|
|
183
|
+
checked: number;
|
|
184
|
+
}
|
|
185
|
+
/** #1638 item 3: the search could not settle. At least one registered instance did not answer
|
|
186
|
+
* FOR ITSELF, so the seat may be sitting on it; absence is not what was established. */
|
|
187
|
+
| {
|
|
188
|
+
kind: "unknown";
|
|
189
|
+
answered: number;
|
|
190
|
+
silent: string[];
|
|
191
|
+
refused: {
|
|
192
|
+
instanceId: string;
|
|
193
|
+
error: string;
|
|
194
|
+
}[];
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* WHAT THE SCATTER ESTABLISHED about one seat name — the whole decision, as a function of the rows
|
|
198
|
+
* alone, so it is gradable without a broker.
|
|
199
|
+
*
|
|
200
|
+
* ANSWERED FOR ITSELF means an instance returned its own roster. A slot that never answered and one
|
|
201
|
+
* that answered with a REFUSAL are the same fact for this search: neither stated which seats it
|
|
202
|
+
* hosts, so neither licenses a conclusion about a seat that might be sitting on it (#1638 item 3).
|
|
203
|
+
* The refusal half is the reachable-but-errored row `scatterManager` reports, which the older
|
|
204
|
+
* filter counted as a manager that had looked and found nothing.
|
|
205
|
+
*
|
|
206
|
+
* Absence is a claim about the WHOLE space, so it is concluded only when the whole space answered.
|
|
207
|
+
*/
|
|
208
|
+
export declare function locateSeatIn(instances: readonly ScatterInstanceReply[], name: string): SeatLocation;
|
|
209
|
+
/**
|
|
210
|
+
* What a `stop`/`attach`/`input` that did not find its seat TELLS the operator — and the difference
|
|
211
|
+
* between the two things it can mean (#1638 item 3).
|
|
212
|
+
*
|
|
213
|
+
* ABSENT is a claim about the whole space and is only made when the whole space answered for
|
|
214
|
+
* itself. A registration that gave no answer within the deadline is NOT told to "retry": a manager
|
|
215
|
+
* whose host died never deregisters, so its row stays in the registry indefinitely and answers
|
|
216
|
+
* nothing, and a retry against it loops forever. Say what is known (registered, silent), what it
|
|
217
|
+
* may mean (a live slow host OR a dead registration), and the two real actions.
|
|
218
|
+
*
|
|
219
|
+
* UNKNOWN is the other case and it used to print as the first one. The seat may be sitting on the
|
|
220
|
+
* instance that did not answer, so "no managed agent <name>" was a definite negative drawn from an
|
|
221
|
+
* incomplete search — and it names the instance COUNT, which is the shape a reader believes.
|
|
222
|
+
* Measured on a live mesh: a seat that `ps` listed as running the whole time was reported absent,
|
|
223
|
+
* and the same command with `--on` succeeded first time. A retry loop that reads the old sentence
|
|
224
|
+
* as "already gone" stops looking for a seat that is still running.
|
|
225
|
+
*/
|
|
226
|
+
export declare function seatMissRefusal(name: string, verb: string, loc: Extract<SeatLocation, {
|
|
227
|
+
kind: "absent" | "unknown";
|
|
228
|
+
}>): string;
|
|
157
229
|
/** Render one managed-agent row (process fact, mesh fact, optional auth-health line), indented for
|
|
158
230
|
* the per-manager grouping a class scatter prints.
|
|
159
231
|
*
|
|
@@ -219,6 +291,76 @@ export declare function reconnectNotice(est: {
|
|
|
219
291
|
* close their terminal.
|
|
220
292
|
*/
|
|
221
293
|
export declare function heldSessionNotice(pending: number, verdict: AttachVerdict["kind"]): string | undefined;
|
|
294
|
+
/** Why attach cannot redeem a session grant, said in terms of what the command actually resolved.
|
|
295
|
+
*
|
|
296
|
+
* Three distinct states, kept distinct because the remedy differs and a single sentence covering
|
|
297
|
+
* all three is the defect issue #722 opened on (its old text named an internal work item and no
|
|
298
|
+
* root at all). A USER-AUTH mesh holds no local seed by design. A REGISTERED static mesh has a
|
|
299
|
+
* root and it is named, so an operator can see which directory the command used rather than
|
|
300
|
+
* guessing at their cwd.
|
|
301
|
+
*
|
|
302
|
+
* The third arm is an INVARIANT, not advice, and is written that way on purpose. A connection with
|
|
303
|
+
* no resolved root is what the type allows, and no supported route reaches redemption in that
|
|
304
|
+
* state: both off-registry routes are refused earlier, which `smoke:attach-auth-root` measures
|
|
305
|
+
* rather than assumes. So that arm says what its own existence would mean instead of offering a
|
|
306
|
+
* remedy for a situation that cannot currently arise. */
|
|
307
|
+
/** The mesh contract that decides how attach redeems a session grant. The mode is the REGISTERED
|
|
308
|
+
* one (`MeshTarget.mode`), carried forward from the resolve. It is the only input to the decision:
|
|
309
|
+
* `spaceAuth` says whether a SEALED mesh's seed is present, and is never consulted to decide which
|
|
310
|
+
* kind of mesh this is. */
|
|
311
|
+
export type AttachSessionTarget = {
|
|
312
|
+
space: string;
|
|
313
|
+
server: string;
|
|
314
|
+
root?: string;
|
|
315
|
+
spaceAuth?: SpaceAuth;
|
|
316
|
+
mode?: "auth" | "open" | "user";
|
|
317
|
+
auth: {
|
|
318
|
+
bearer?: unknown;
|
|
319
|
+
};
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* HOW this mesh's session grant is redeemed, as a closed union with no optional credential.
|
|
323
|
+
*
|
|
324
|
+
* `bare` and `session-caller` are structurally distinct rather than "session-caller, but the creds
|
|
325
|
+
* may be missing". That distinction is the whole fix for #1205. An optional `creds?: string` on the
|
|
326
|
+
* redeem path invites exactly one question at every call site — "is the seed there?" — and answering
|
|
327
|
+
* it with `!creds` is the defect: an OPEN mesh has no seed BY DESIGN, so absence means "bare",
|
|
328
|
+
* while on a SEALED mesh the same absence means "refuse". One field cannot carry both meanings, so
|
|
329
|
+
* the mode is named and the compiler makes every consumer read the name.
|
|
330
|
+
*/
|
|
331
|
+
export type RedeemLink = {
|
|
332
|
+
mode: "bare";
|
|
333
|
+
tls: boolean;
|
|
334
|
+
} | {
|
|
335
|
+
mode: "session-caller";
|
|
336
|
+
tls: boolean;
|
|
337
|
+
creds: string;
|
|
338
|
+
};
|
|
339
|
+
/** The ONE place a {@link RedeemLink} becomes NATS connect options. Both connections on the redeem
|
|
340
|
+
* path (the session link and the abandoned-session hand-back) go through here, so neither can
|
|
341
|
+
* invent a credential for an open mesh or drop one on a sealed mesh, and a third caller gets the
|
|
342
|
+
* same two arms for free. */
|
|
343
|
+
export declare function redeemConnectOpts(link: RedeemLink): ReturnType<typeof standaloneConnectOpts>;
|
|
344
|
+
/**
|
|
345
|
+
* Which redeem contract this target gets: a bare open-mesh connection, a seed-backed mint, or a
|
|
346
|
+
* loud refusal. Graded by `smoke:attach-open-mode`, whose mutations flip each arm in turn.
|
|
347
|
+
*
|
|
348
|
+
* EXHAUSTIVE over the three recorded modes on purpose, with `user` named rather than reached by
|
|
349
|
+
* fallthrough. A `user` entry holds no local seed by design and its two-step redemption is not
|
|
350
|
+
* wired, so it must refuse even on the day a user-mode root happens to carry static material on
|
|
351
|
+
* disk; letting it fall through to the seed test would silently mint on the wrong identity plane.
|
|
352
|
+
* An UNRECORDED mode (a raw off-registry connection) is the conservative arm: it is not known to be
|
|
353
|
+
* open, so it takes the sealed test and refuses without a seed.
|
|
354
|
+
*/
|
|
355
|
+
export declare function attachSessionMaterial(t: AttachSessionTarget): {
|
|
356
|
+
kind: "bare";
|
|
357
|
+
} | {
|
|
358
|
+
kind: "mint";
|
|
359
|
+
auth: SpaceAuth;
|
|
360
|
+
} | {
|
|
361
|
+
kind: "fatal";
|
|
362
|
+
message: string;
|
|
363
|
+
};
|
|
222
364
|
/** How the attach finished, decided inside the loop and acted on outside it — so the terminal is
|
|
223
365
|
* always given back before anything prints or exits. */
|
|
224
366
|
type AttachVerdict = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/agents.js
CHANGED
|
@@ -116,14 +116,33 @@ async function locateSeat(v, name) {
|
|
|
116
116
|
const scatter = await scatterManager(probe.space, probe.server, "ps", probe.auth, probe.spaceAuth);
|
|
117
117
|
if (!scatter.ok)
|
|
118
118
|
return { kind: "unpinned" }; // cannot locate ⇒ behave exactly as before, never worse
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
return locateSeatIn(scatter.instances, name);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* WHAT THE SCATTER ESTABLISHED about one seat name — the whole decision, as a function of the rows
|
|
123
|
+
* alone, so it is gradable without a broker.
|
|
124
|
+
*
|
|
125
|
+
* ANSWERED FOR ITSELF means an instance returned its own roster. A slot that never answered and one
|
|
126
|
+
* that answered with a REFUSAL are the same fact for this search: neither stated which seats it
|
|
127
|
+
* hosts, so neither licenses a conclusion about a seat that might be sitting on it (#1638 item 3).
|
|
128
|
+
* The refusal half is the reachable-but-errored row `scatterManager` reports, which the older
|
|
129
|
+
* filter counted as a manager that had looked and found nothing.
|
|
130
|
+
*
|
|
131
|
+
* Absence is a claim about the WHOLE space, so it is concluded only when the whole space answered.
|
|
132
|
+
*/
|
|
133
|
+
export function locateSeatIn(instances, name) {
|
|
134
|
+
const reachable = instances.filter((i) => i.reachable);
|
|
135
|
+
const silent = instances.filter((i) => !i.reachable).map((i) => i.instanceId);
|
|
136
|
+
if (reachable.length <= 1 && !silent.length)
|
|
122
137
|
return { kind: "unpinned" };
|
|
123
|
-
const
|
|
138
|
+
const answered = reachable.filter((i) => i.error === undefined);
|
|
139
|
+
const refused = reachable.filter((i) => i.error !== undefined).map((i) => ({ instanceId: i.instanceId, error: i.error }));
|
|
140
|
+
const host = answered.find((i) => (i.data ?? []).some((r) => r.name === name));
|
|
124
141
|
if (host)
|
|
125
142
|
return { kind: "pin", instanceId: host.instanceId };
|
|
126
|
-
|
|
143
|
+
if (silent.length || refused.length)
|
|
144
|
+
return { kind: "unknown", answered: answered.length, silent, refused };
|
|
145
|
+
return { kind: "absent", checked: answered.length };
|
|
127
146
|
}
|
|
128
147
|
/** Resolve `--on` for a targeted verb: an explicit pin wins; otherwise locate the seat. Returns the
|
|
129
148
|
* instance to address, or exits with an error that says WHICH case the miss was. */
|
|
@@ -136,17 +155,38 @@ async function pinForTarget(v, verb) {
|
|
|
136
155
|
return loc.instanceId;
|
|
137
156
|
if (loc.kind === "unpinned")
|
|
138
157
|
return undefined;
|
|
139
|
-
|
|
140
|
-
// gave no answer within the deadline is NOT told to "retry": a manager whose host died never
|
|
141
|
-
// deregisters, so its row stays in the registry indefinitely and answers nothing, and a retry
|
|
142
|
-
// against it loops forever. Say what is known (registered, silent), what it may mean (a live
|
|
143
|
-
// slow host OR a dead registration), and the two real actions.
|
|
144
|
-
const missed = loc.unreachable.length
|
|
145
|
-
? ` ${loc.unreachable.length} registered manager instance(s) gave no answer within the deadline (${loc.unreachable.join(", ")}). Either that host is alive but slow, or it died and its registration was never removed; if it is dead, deregister it. To address it directly: \`${verb} --on <instance>\` (the whole id, as printed).`
|
|
146
|
-
: "";
|
|
147
|
-
console.error(c.red(`✗ no managed agent "${v.name}" on any of the ${loc.checked} reachable manager instance(s) in this space.${missed}`));
|
|
158
|
+
console.error(c.red(`✗ ${seatMissRefusal(String(v.name), verb, loc)}`));
|
|
148
159
|
process.exit(1);
|
|
149
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* What a `stop`/`attach`/`input` that did not find its seat TELLS the operator — and the difference
|
|
163
|
+
* between the two things it can mean (#1638 item 3).
|
|
164
|
+
*
|
|
165
|
+
* ABSENT is a claim about the whole space and is only made when the whole space answered for
|
|
166
|
+
* itself. A registration that gave no answer within the deadline is NOT told to "retry": a manager
|
|
167
|
+
* whose host died never deregisters, so its row stays in the registry indefinitely and answers
|
|
168
|
+
* nothing, and a retry against it loops forever. Say what is known (registered, silent), what it
|
|
169
|
+
* may mean (a live slow host OR a dead registration), and the two real actions.
|
|
170
|
+
*
|
|
171
|
+
* UNKNOWN is the other case and it used to print as the first one. The seat may be sitting on the
|
|
172
|
+
* instance that did not answer, so "no managed agent <name>" was a definite negative drawn from an
|
|
173
|
+
* incomplete search — and it names the instance COUNT, which is the shape a reader believes.
|
|
174
|
+
* Measured on a live mesh: a seat that `ps` listed as running the whole time was reported absent,
|
|
175
|
+
* and the same command with `--on` succeeded first time. A retry loop that reads the old sentence
|
|
176
|
+
* as "already gone" stops looking for a seat that is still running.
|
|
177
|
+
*/
|
|
178
|
+
export function seatMissRefusal(name, verb, loc) {
|
|
179
|
+
const address = `To address one directly: \`${verb} --on <instance>\` (the whole id, as printed).`;
|
|
180
|
+
if (loc.kind === "absent")
|
|
181
|
+
return `no managed agent "${name}" on any of the ${loc.checked} reachable manager instance(s) in this space.`;
|
|
182
|
+
const silent = loc.silent.length
|
|
183
|
+
? ` ${loc.silent.length} registered manager instance(s) gave no answer within the deadline (${loc.silent.join(", ")}). Either that host is alive but slow, or it died and its registration was never removed; if it is dead, deregister it.`
|
|
184
|
+
: "";
|
|
185
|
+
const refused = loc.refused.length
|
|
186
|
+
? ` ${loc.refused.length} refused the read rather than answering (${loc.refused.map((r) => `${r.instanceId}: ${r.error}`).join("; ")}).`
|
|
187
|
+
: "";
|
|
188
|
+
return `could not establish where "${name}" is: ${loc.answered} manager instance(s) answered and none hosts it, but ${loc.silent.length + loc.refused.length} did not answer for themselves, so this is NOT a report that it is gone — it may be running on one of those.${silent}${refused} ${address}`;
|
|
189
|
+
}
|
|
150
190
|
/**
|
|
151
191
|
* What one SILENT manager instance's row says. The wording lives here, in the CLI, and not in the
|
|
152
192
|
* scatter that produced the fact: core reports a frozen slot that did not answer, and turning that
|
|
@@ -494,9 +534,10 @@ async function establishAttachSession(v, on, reconnect, first) {
|
|
|
494
534
|
if (!reply.ok)
|
|
495
535
|
return { ok: false, kind: attachRefusal(reply.code, reply.details), message: reply.error ?? "error", fromManager: true };
|
|
496
536
|
// P2 item 6: the reply is the holder-bound §13.6 session GRANT (no ws:// URL). Redeem it over the
|
|
497
|
-
// mesh
|
|
498
|
-
//
|
|
499
|
-
//
|
|
537
|
+
// mesh. A static-auth mesh mints a per-session, rails-only caller cred from the resolved root's
|
|
538
|
+
// seed. A registered open mesh has no seed: the same bare connection `askManagerEp` already used
|
|
539
|
+
// for the control round trip opens the caller rail. USER mesh (bearer, no local seed): refuse LOUD
|
|
540
|
+
// — the 2-step user-mode redemption callout is the #29 follow-up, deliberately not wired here.
|
|
500
541
|
const { grant } = reply.data;
|
|
501
542
|
// The trust material the TARGET resolved, not a second answer walked up from the cwd. This used
|
|
502
543
|
// to be `loadSpaceAuth(authDir(findCotalRoot()), t.space)`, which is the defect behind issue #722:
|
|
@@ -518,17 +559,27 @@ async function establishAttachSession(v, on, reconnect, first) {
|
|
|
518
559
|
if (shadow)
|
|
519
560
|
console.error(`! this directory resolves to ${shadow.cwdRoot}, whose .cotal/auth holds a DIFFERENT trust chain for space "${t.space}".\n` +
|
|
520
561
|
` attach used ${t.root}, the root this mesh resolved to. The other one is not being used, and is worth a look.`);
|
|
521
|
-
const
|
|
522
|
-
if (!auth)
|
|
523
|
-
return {
|
|
524
|
-
ok: false, kind: "fatal",
|
|
525
|
-
message: attachNoSeedMessage(t),
|
|
526
|
-
};
|
|
562
|
+
const tls = t.auth.tls === true;
|
|
527
563
|
const id = newIdentity();
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
564
|
+
// WHICH CONTRACT redeems this grant is decided ONCE, by the recorded mesh mode, and the answer is
|
|
565
|
+
// a value this function then carries. It is never re-derived from the absence of a seed: that
|
|
566
|
+
// inference is issue #1205 itself, where an open mesh (which holds no seed BY DESIGN) was read as
|
|
567
|
+
// a static mesh whose seed had gone missing, and every open attach was refused.
|
|
568
|
+
const material = attachSessionMaterial(t);
|
|
569
|
+
if (material.kind === "fatal")
|
|
570
|
+
return { ok: false, kind: "fatal", message: material.message };
|
|
571
|
+
const link = material.kind === "bare"
|
|
572
|
+
// An open mesh has no credential system: the same bare connection the control round trip
|
|
573
|
+
// already used opens the caller rail. Nothing is minted and nothing is invented.
|
|
574
|
+
? { mode: "bare", tls }
|
|
575
|
+
: {
|
|
576
|
+
mode: "session-caller",
|
|
577
|
+
tls,
|
|
578
|
+
creds: await mintCreds(material.auth, id, "session-caller", {
|
|
579
|
+
sessionCaller: { endpoint: grant.endpoint, sessionId: grant.sessionId, epoch: grant.serving.epoch },
|
|
580
|
+
expiresAt: Math.floor(grant.exp / 1000), // grant.exp is ms (now+ttlMs); the JWT exp is seconds
|
|
581
|
+
}),
|
|
582
|
+
};
|
|
532
583
|
// maxReconnectAttempts is the whole difference between the two modes, and it is deliberate.
|
|
533
584
|
// ONE-SHOT keeps the old -1: the NATS layer redials forever under a single session.
|
|
534
585
|
// RECONNECTING uses 0, because that redial is what breaks the attach rather than saving it — the
|
|
@@ -539,7 +590,7 @@ async function establishAttachSession(v, on, reconnect, first) {
|
|
|
539
590
|
// real repaint, instead of a restored socket over a session that ended without us.
|
|
540
591
|
const nc = await dialerFor(t.server)({
|
|
541
592
|
servers: t.server,
|
|
542
|
-
...
|
|
593
|
+
...redeemConnectOpts(link),
|
|
543
594
|
inboxPrefix: `_INBOX_${id.id}`,
|
|
544
595
|
maxReconnectAttempts: reconnect ? 0 : -1,
|
|
545
596
|
// Detection latency is part of the defect, not a detail of it. A laptop waking from sleep does
|
|
@@ -553,21 +604,46 @@ async function establishAttachSession(v, on, reconnect, first) {
|
|
|
553
604
|
// half-opens a link is what would grade this line, and it does not exist here yet.
|
|
554
605
|
...(reconnect ? { pingInterval: 10_000 } : {}),
|
|
555
606
|
});
|
|
556
|
-
return { ok: true, nc, grant,
|
|
607
|
+
return { ok: true, nc, grant, link, inbox: id.id, server: t.server };
|
|
557
608
|
}
|
|
558
|
-
/**
|
|
559
|
-
*
|
|
560
|
-
*
|
|
561
|
-
*
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
609
|
+
/** The ONE place a {@link RedeemLink} becomes NATS connect options. Both connections on the redeem
|
|
610
|
+
* path (the session link and the abandoned-session hand-back) go through here, so neither can
|
|
611
|
+
* invent a credential for an open mesh or drop one on a sealed mesh, and a third caller gets the
|
|
612
|
+
* same two arms for free. */
|
|
613
|
+
export function redeemConnectOpts(link) {
|
|
614
|
+
return link.mode === "bare"
|
|
615
|
+
? standaloneConnectOpts({ tls: link.tls })
|
|
616
|
+
: standaloneConnectOpts({ creds: link.creds, tls: link.tls });
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* Which redeem contract this target gets: a bare open-mesh connection, a seed-backed mint, or a
|
|
620
|
+
* loud refusal. Graded by `smoke:attach-open-mode`, whose mutations flip each arm in turn.
|
|
565
621
|
*
|
|
566
|
-
*
|
|
567
|
-
*
|
|
568
|
-
*
|
|
569
|
-
*
|
|
570
|
-
*
|
|
622
|
+
* EXHAUSTIVE over the three recorded modes on purpose, with `user` named rather than reached by
|
|
623
|
+
* fallthrough. A `user` entry holds no local seed by design and its two-step redemption is not
|
|
624
|
+
* wired, so it must refuse even on the day a user-mode root happens to carry static material on
|
|
625
|
+
* disk; letting it fall through to the seed test would silently mint on the wrong identity plane.
|
|
626
|
+
* An UNRECORDED mode (a raw off-registry connection) is the conservative arm: it is not known to be
|
|
627
|
+
* open, so it takes the sealed test and refuses without a seed.
|
|
628
|
+
*/
|
|
629
|
+
export function attachSessionMaterial(t) {
|
|
630
|
+
switch (t.mode) {
|
|
631
|
+
// An OPEN mesh: no credential system at all, so there is no seed to be missing and nothing to
|
|
632
|
+
// mint. This is the arm issue #1205 did not have.
|
|
633
|
+
case "open":
|
|
634
|
+
return { kind: "bare" };
|
|
635
|
+
// A USER mesh: refused by name, and refused EVEN IF a seed is present, because the bearer plane
|
|
636
|
+
// is the control surface there and static material would be the wrong identity.
|
|
637
|
+
case "user":
|
|
638
|
+
return { kind: "fatal", message: attachNoSeedMessage(t) };
|
|
639
|
+
// SEALED (`auth`) and unrecorded: the seed is required, and its absence is a refusal. A sealed
|
|
640
|
+
// mesh must never be rescued by the open arm — that is the failure a fix for #1205 is most
|
|
641
|
+
// likely to introduce, and `smoke:attach-open-mode` asserts the refusal by name against a live
|
|
642
|
+
// sealed broker.
|
|
643
|
+
default:
|
|
644
|
+
return t.spaceAuth ? { kind: "mint", auth: t.spaceAuth } : { kind: "fatal", message: attachNoSeedMessage(t) };
|
|
645
|
+
}
|
|
646
|
+
}
|
|
571
647
|
function attachNoSeedMessage(t) {
|
|
572
648
|
const shadow = t.root === undefined ? undefined : divergentCwdAnchor(t.root, t.space);
|
|
573
649
|
const shadowLine = shadow
|
|
@@ -578,7 +654,7 @@ function attachNoSeedMessage(t) {
|
|
|
578
654
|
return `${head}\n broker ${t.server}\n This is a USER-AUTH mesh, which holds no local seed by design; two-step user-mode redemption is not wired yet, so attach is unavailable on it from every directory, not just this one.${shadowLine}`;
|
|
579
655
|
if (t.root === undefined)
|
|
580
656
|
return `${head}\n broker ${t.server}\n This connection resolved NO checkout root, and no supported route reaches redemption in that state: an off-registry \`--server\` on an unregistered space is refused for missing credentials, and \`--creds\` is refused at the control surface, both before a session grant is asked for. Reaching this sentence means a route now exists that skips both refusals.${shadowLine}`;
|
|
581
|
-
return `${head}\n broker ${t.server}\n resolved root ${t.root}\n
|
|
657
|
+
return `${head}\n broker ${t.server}\n resolved root ${t.root}\n This is a static-auth mesh. Attach still needs this space's seed under ${t.root}/.cotal/auth. Restore the seed at that checkout. This mesh is not open, so attach will not connect without the seed.${shadowLine}`;
|
|
582
658
|
}
|
|
583
659
|
/**
|
|
584
660
|
* Tell the manager a session is over, so it gets its slot back.
|
|
@@ -590,15 +666,16 @@ function attachNoSeedMessage(t) {
|
|
|
590
666
|
* to 2 — one slot per outage, held until the seat or the manager ends it, against a ceiling of 64.
|
|
591
667
|
*
|
|
592
668
|
* The mechanism is the advisory close frame the rail already defines; the manager's bridge ends on
|
|
593
|
-
* it.
|
|
594
|
-
* session's subjects, so a re-establishment cannot send it on the abandoned
|
|
595
|
-
*
|
|
596
|
-
*
|
|
669
|
+
* it. On a static-auth mesh it has to be published with THIS session's caller credential, the only
|
|
670
|
+
* one scoped to this session's subjects, so a re-establishment cannot send it on the abandoned
|
|
671
|
+
* session's behalf. On a registered open mesh there is no session-caller seed: the same bare
|
|
672
|
+
* connection the session used hands the slot back. Hence a short-lived connection minted from the
|
|
673
|
+
* abandoned session's own material, never an invented seed.
|
|
597
674
|
*/
|
|
598
675
|
async function releaseAbandonedSession(s) {
|
|
599
676
|
const nc = await dialerFor(s.server)({
|
|
600
677
|
servers: s.server,
|
|
601
|
-
...
|
|
678
|
+
...redeemConnectOpts(s.link),
|
|
602
679
|
inboxPrefix: `_INBOX_${s.inbox}`,
|
|
603
680
|
maxReconnectAttempts: 0,
|
|
604
681
|
timeout: LINK_DEADLINE_MS,
|
|
@@ -799,7 +876,7 @@ async function runAttachLoop(vv, pin, reconnect, key, hold) {
|
|
|
799
876
|
releaseStdin();
|
|
800
877
|
const late = await attempting.catch(() => undefined);
|
|
801
878
|
if (late?.ok) {
|
|
802
|
-
abandoned.push({ grant: late.grant,
|
|
879
|
+
abandoned.push({ grant: late.grant, link: late.link, inbox: late.inbox, server: late.server });
|
|
803
880
|
// And CLOSE the link that session came up on. Nothing here will ever read it, and an open
|
|
804
881
|
// NATS connection is a ref'd handle: measured, the attach printed `detached from` and then
|
|
805
882
|
// sat there forever, because the hand-back mints its own short-lived connection from the
|
|
@@ -877,7 +954,7 @@ async function runAttachLoop(vv, pin, reconnect, key, hold) {
|
|
|
877
954
|
handedBack = await flushed(est.nc);
|
|
878
955
|
}
|
|
879
956
|
if (!handedBack && reconnect) {
|
|
880
|
-
abandoned.push({ grant: est.grant,
|
|
957
|
+
abandoned.push({ grant: est.grant, link: est.link, inbox: est.inbox, server: est.server });
|
|
881
958
|
}
|
|
882
959
|
await closeLink(est.nc);
|
|
883
960
|
}
|