multi-agents-cli 1.0.92 → 1.0.94

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.
@@ -863,6 +863,42 @@ const main = async () => {
863
863
  }
864
864
  }
865
865
 
866
+
867
+ // Soft gate - shared selected but missing prerequisites
868
+ if (project === 'shared') {
869
+ const clientCompleted = buildEntries.filter(e => e.scope === 'client' && e.status === 'COMPLETED');
870
+ const backendCompleted = buildEntries.filter(e => e.scope === 'backend' && e.status === 'COMPLETED');
871
+ const clientUIДone = clientCompleted.some(e => e.agent === 'UI');
872
+ const backendINITDone = backendCompleted.some(e => e.agent === 'INIT');
873
+ const missing = [];
874
+
875
+ if (!clientUIДone) {
876
+ missing.push({ item: 'Client scaffold', detail: 'no completed client work found — SECURITY needs to know what auth patterns the client uses' });
877
+ }
878
+ if (!backendINITDone) {
879
+ missing.push({ item: 'Backend INIT', detail: 'backend not scaffolded yet — SECURITY needs to know the backend auth strategy and DB schema' });
880
+ }
881
+ if (!contracts.hasContent) {
882
+ missing.push({ item: 'CONTRACTS.md', detail: 'no shared types defined — auth utilities should align with established contracts' });
883
+ }
884
+
885
+ if (missing.length > 0) {
886
+ console.log(`\n${yellow(' ⚠ Shared prerequisites not fully met:')}
887
+ `);
888
+ missing.forEach(m => {
889
+ console.log(` ${dim('→')} ${bold(m.item)}`);
890
+ console.log(` ${m.detail}\n`);
891
+ });
892
+ console.log(` ${dim('The agent will proceed autonomously and make assumptions about auth patterns.')}`);
893
+ console.log(` ${dim('These may need revision once client and backend are fully established.\n')}`);
894
+ const proceedIdx = await arrowSelect('Shared prerequisites not met:', [
895
+ { label: `${green('→')} Proceed anyway` },
896
+ { label: `${yellow('←')} Go back — pick a different scope ${dim('← recommended')}` },
897
+ ], rl);
898
+ if (proceedIdx === 1) continue flowLoop;
899
+ }
900
+ }
901
+
866
902
  // ── Select agent (with re-selection loop + back to scope) ────────────────────
867
903
 
868
904
  const agentOptions = AGENTS[project] || [];
@@ -1197,7 +1233,7 @@ const main = async () => {
1197
1233
  if (backendLaunchTiming === 'now') {
1198
1234
  const beTimestamp = Date.now();
1199
1235
  const beBranchName = `agent/backend/init/${beTimestamp}`;
1200
- const beWorktreeName = `${config.projectName.toLowerCase().replace(/\s+/g, '-')}-backend-init-${beTimestamp}`;
1236
+ const beWorktreeName = `backend-${config.projectName.toLowerCase().replace(/\s+/g, '-')}-init-${beTimestamp}`;
1201
1237
  const beWorktreePath = path.join(ROOT, 'worktrees', beWorktreeName);
1202
1238
 
1203
1239
  console.log(`\n ${dim('Setting up backend/INIT workspace...')}\n`);
@@ -79,7 +79,7 @@ const main = async () => {
79
79
  for (const scope of ['client', 'backend', 'shared']) {
80
80
  const agents = tracking[scope] || {};
81
81
  for (const [agent, data] of Object.entries(agents)) {
82
- if (data && data.branch) {
82
+ if (data && data.branch && data.status !== 'COMPLETED') {
83
83
  activeAgents.push({ scope, agent, data });
84
84
  }
85
85
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "multi-agents-cli",
3
- "version": "1.0.92",
3
+ "version": "1.0.94",
4
4
  "description": "Multi-agent workflow orchestration for Claude Code — isolated git worktrees, structured state tracking, autonomous task chaining",
5
5
  "keywords": [
6
6
  "claude-code",