zelari-code 0.4.3 → 0.7.5

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.
Files changed (127) hide show
  1. package/README.md +42 -0
  2. package/bin/zelari-code.js +1 -1
  3. package/dist/agents/councilApi.js +7 -7
  4. package/dist/agents/councilApi.js.map +1 -1
  5. package/dist/agents/councilDirectives.js +3 -3
  6. package/dist/agents/promoteMember.js +2 -2
  7. package/dist/agents/roles.js +50 -32
  8. package/dist/agents/roles.js.map +1 -1
  9. package/dist/agents/skills/builtin/debugging.js +4 -4
  10. package/dist/agents/skills/builtin/debugging.js.map +1 -1
  11. package/dist/agents/skills/builtin/docs.js +23 -13
  12. package/dist/agents/skills/builtin/docs.js.map +1 -1
  13. package/dist/agents/skills/builtin/git-ops.js +3 -3
  14. package/dist/agents/skills/builtin/git-ops.js.map +1 -1
  15. package/dist/agents/skills/builtin/planning.js +4 -4
  16. package/dist/agents/skills/builtin/planning.js.map +1 -1
  17. package/dist/agents/skills/builtin/refactoring.js +3 -3
  18. package/dist/agents/skills/builtin/refactoring.js.map +1 -1
  19. package/dist/agents/skills/builtin/review.js +9 -9
  20. package/dist/agents/skills/builtin/review.js.map +1 -1
  21. package/dist/agents/skills/builtin/testing.js +3 -3
  22. package/dist/agents/skills/builtin/testing.js.map +1 -1
  23. package/dist/agents/tools.js +2 -9
  24. package/dist/agents/tools.js.map +1 -1
  25. package/dist/cli/app.js +72 -33
  26. package/dist/cli/app.js.map +1 -1
  27. package/dist/cli/compaction.js.map +1 -1
  28. package/dist/cli/components/ChatStream.js +43 -82
  29. package/dist/cli/components/ChatStream.js.map +1 -1
  30. package/dist/cli/components/CollapsibleToolOutput.js +8 -21
  31. package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
  32. package/dist/cli/components/Header.js +6 -18
  33. package/dist/cli/components/Header.js.map +1 -1
  34. package/dist/cli/components/LiveRegion.js +54 -0
  35. package/dist/cli/components/LiveRegion.js.map +1 -0
  36. package/dist/cli/components/Sidebar.js +33 -31
  37. package/dist/cli/components/Sidebar.js.map +1 -1
  38. package/dist/cli/components/StatusBar.js +42 -0
  39. package/dist/cli/components/StatusBar.js.map +1 -0
  40. package/dist/cli/components/ToolOutput.js +68 -0
  41. package/dist/cli/components/ToolOutput.js.map +1 -0
  42. package/dist/cli/components/toolFormat.js +195 -0
  43. package/dist/cli/components/toolFormat.js.map +1 -0
  44. package/dist/cli/councilDispatcher.js +1 -1
  45. package/dist/cli/councilDispatcher.js.map +1 -1
  46. package/dist/cli/grokOAuth.js +93 -75
  47. package/dist/cli/grokOAuth.js.map +1 -1
  48. package/dist/cli/headless.js +137 -0
  49. package/dist/cli/headless.js.map +1 -0
  50. package/dist/cli/hooks/chatState.js +139 -0
  51. package/dist/cli/hooks/chatState.js.map +1 -0
  52. package/dist/cli/hooks/eventsToMessages.js +42 -11
  53. package/dist/cli/hooks/eventsToMessages.js.map +1 -1
  54. package/dist/cli/hooks/messageHelpers.js +72 -15
  55. package/dist/cli/hooks/messageHelpers.js.map +1 -1
  56. package/dist/cli/hooks/useBatchedMessages.js +71 -0
  57. package/dist/cli/hooks/useBatchedMessages.js.map +1 -0
  58. package/dist/cli/hooks/useChatTurn.js +453 -84
  59. package/dist/cli/hooks/useChatTurn.js.map +1 -1
  60. package/dist/cli/hooks/useSession.js +24 -3
  61. package/dist/cli/hooks/useSession.js.map +1 -1
  62. package/dist/cli/hooks/useSlashDispatch.js +13 -2
  63. package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
  64. package/dist/cli/main.bundled.js +10607 -7889
  65. package/dist/cli/main.bundled.js.map +4 -4
  66. package/dist/cli/main.js +120 -2
  67. package/dist/cli/main.js.map +1 -1
  68. package/dist/cli/mcp/mcpClient.js +152 -0
  69. package/dist/cli/mcp/mcpClient.js.map +1 -0
  70. package/dist/cli/mcp/mcpManager.js +139 -0
  71. package/dist/cli/mcp/mcpManager.js.map +1 -0
  72. package/dist/cli/provider/openai-compatible.js +9 -2
  73. package/dist/cli/provider/openai-compatible.js.map +1 -1
  74. package/dist/cli/refreshRegistry.js +9 -6
  75. package/dist/cli/refreshRegistry.js.map +1 -1
  76. package/dist/cli/runHeadless.js +160 -0
  77. package/dist/cli/runHeadless.js.map +1 -0
  78. package/dist/cli/sessionManager.js +1 -1
  79. package/dist/cli/sessionManager.js.map +1 -1
  80. package/dist/cli/skillSuggest.js +1 -1
  81. package/dist/cli/skillsMd.js +155 -0
  82. package/dist/cli/skillsMd.js.map +1 -0
  83. package/dist/cli/slashHandlers/branch.js +11 -2
  84. package/dist/cli/slashHandlers/branch.js.map +1 -1
  85. package/dist/cli/slashHandlers/git.js +0 -75
  86. package/dist/cli/slashHandlers/git.js.map +1 -1
  87. package/dist/cli/slashHandlers/promoteMember.js +25 -0
  88. package/dist/cli/slashHandlers/promoteMember.js.map +1 -0
  89. package/dist/cli/slashHandlers/skills.js +16 -0
  90. package/dist/cli/slashHandlers/skills.js.map +1 -1
  91. package/dist/cli/slashHandlers/transcript.js +13 -0
  92. package/dist/cli/slashHandlers/transcript.js.map +1 -0
  93. package/dist/cli/slashHandlers/updater.js +40 -0
  94. package/dist/cli/slashHandlers/updater.js.map +1 -0
  95. package/dist/cli/toolRegistry.js +37 -6
  96. package/dist/cli/toolRegistry.js.map +1 -1
  97. package/dist/cli/wizard/firstRun.js +63 -0
  98. package/dist/cli/wizard/firstRun.js.map +1 -0
  99. package/dist/cli/wizard/index.js +150 -0
  100. package/dist/cli/wizard/index.js.map +1 -0
  101. package/dist/cli/wizard/runWizard.js +137 -0
  102. package/dist/cli/wizard/runWizard.js.map +1 -0
  103. package/dist/cli/wizard/useWizardState.js +151 -0
  104. package/dist/cli/wizard/useWizardState.js.map +1 -0
  105. package/dist/cli/workspace/paths.js +20 -13
  106. package/dist/cli/workspace/paths.js.map +1 -1
  107. package/dist/cli/workspace/storage.js +7 -3
  108. package/dist/cli/workspace/storage.js.map +1 -1
  109. package/dist/cli/workspace/stubs.js +122 -44
  110. package/dist/cli/workspace/stubs.js.map +1 -1
  111. package/dist/cli/workspace/toolRegistry.js +2 -2
  112. package/dist/cli/workspace/toolRegistry.js.map +1 -1
  113. package/dist/cli/workspace/workspaceSummary.js +255 -0
  114. package/dist/cli/workspace/workspaceSummary.js.map +1 -0
  115. package/dist/main/core/AgentHarness.js +36 -7
  116. package/dist/main/core/AgentHarness.js.map +1 -1
  117. package/dist/main/core/tools/builtin/listFiles.js +43 -5
  118. package/dist/main/core/tools/builtin/listFiles.js.map +1 -1
  119. package/dist/main/core/tools/builtin/search.js +28 -120
  120. package/dist/main/core/tools/builtin/search.js.map +1 -1
  121. package/package.json +6 -1
  122. package/dist/cli/oauthCallbackServer.js +0 -207
  123. package/dist/cli/oauthCallbackServer.js.map +0 -1
  124. package/dist/main/core/tools/builtin/_walk.js +0 -129
  125. package/dist/main/core/tools/builtin/_walk.js.map +0 -1
  126. package/dist/main/core/tools/builtin/diff.js +0 -477
  127. package/dist/main/core/tools/builtin/diff.js.map +0 -1
@@ -0,0 +1,151 @@
1
+ import { setActiveProviderId, setModelForProvider, } from '../providerConfig.js';
2
+ import { setApiKey as setKeyStoreApiKey } from '../keyStore.js';
3
+ const ORDER = ['welcome', 'provider', 'model', 'apikey', 'confirm'];
4
+ function next(s) {
5
+ const idx = ORDER.indexOf(s);
6
+ if (idx === -1 || idx === ORDER.length - 1)
7
+ return null;
8
+ return ORDER[idx + 1];
9
+ }
10
+ function prev(s) {
11
+ const idx = ORDER.indexOf(s);
12
+ if (idx <= 0)
13
+ return null;
14
+ return ORDER[idx - 1];
15
+ }
16
+ /**
17
+ * Pure-function factory for the wizard state machine. Returned API is
18
+ * stateless from the caller's perspective — pass the same instance to
19
+ * React via `useMemo`.
20
+ *
21
+ * @public
22
+ */
23
+ export function createWizardState(opts) {
24
+ const persistActive = opts.persistActiveProvider ?? ((id) => setActiveProviderId(id));
25
+ const persistModel = opts.persistModel ?? ((id, m) => setModelForProvider(id, m));
26
+ const persistKey = opts.persistApiKey ?? ((id, k) => setKeyStoreApiKey(id, k));
27
+ let s = {
28
+ step: 'welcome',
29
+ providerCursor: 0,
30
+ apiKeyCursor: 0,
31
+ committed: false,
32
+ };
33
+ const listeners = new Set();
34
+ function notify() {
35
+ for (const l of listeners)
36
+ l();
37
+ }
38
+ const api = {
39
+ get state() {
40
+ return s;
41
+ },
42
+ moveProvider(up) {
43
+ const n = opts.providers.length;
44
+ const c = s.providerCursor;
45
+ s = {
46
+ ...s,
47
+ providerCursor: up ? (c - 1 + n) % n : (c + 1) % n,
48
+ };
49
+ notify();
50
+ },
51
+ selectProvider() {
52
+ const provider = opts.providers[s.providerCursor];
53
+ if (!provider)
54
+ return; // shouldn't happen
55
+ s = {
56
+ ...s,
57
+ step: 'model',
58
+ providerId: provider.id,
59
+ model: opts.defaultModelFor(provider.id),
60
+ };
61
+ notify();
62
+ },
63
+ setModel(name) {
64
+ const trimmed = name.trim();
65
+ if (!trimmed || !s.providerId)
66
+ return;
67
+ s = { ...s, model: trimmed };
68
+ notify();
69
+ },
70
+ moveApiKey(up) {
71
+ const c = s.apiKeyCursor;
72
+ // 3 options: 0=env, 1=keystore, 2=skip
73
+ s = { ...s, apiKeyCursor: up ? (c - 1 + 3) % 3 : (c + 1) % 3 };
74
+ notify();
75
+ },
76
+ selectApiKey(choice, value) {
77
+ // 'keystore' stores the (trimmed) value; 'env' and 'skip' clear it.
78
+ // Distinguish `value === undefined` (no value provided) from
79
+ // `value === ''` or whitespace-only (empty after trim) — both
80
+ // are guarded at commit time, but the type signature is clearer
81
+ // if we keep `undefined` for "not provided".
82
+ let apiKeyValue;
83
+ if (choice === 'keystore') {
84
+ apiKeyValue = value === undefined ? undefined : value.trim();
85
+ }
86
+ s = {
87
+ ...s,
88
+ apiKeyChoice: choice,
89
+ apiKeyValue,
90
+ step: 'confirm',
91
+ };
92
+ notify();
93
+ },
94
+ back() {
95
+ const p = prev(s.step);
96
+ if (!p)
97
+ return;
98
+ s = { ...s, step: p };
99
+ notify();
100
+ },
101
+ commit() {
102
+ if (s.committed || !s.providerId || !s.model)
103
+ return;
104
+ persistActive(s.providerId);
105
+ persistModel(s.providerId, s.model);
106
+ // Persist API key only if user chose 'keystore' AND provided a
107
+ // non-empty value. 'env' means "use env var, don't save" and
108
+ // 'skip' means "no key yet, user will set it later via /login".
109
+ if (s.apiKeyChoice === 'keystore' && s.apiKeyValue && s.apiKeyValue.length > 0) {
110
+ try {
111
+ persistKey(s.providerId, s.apiKeyValue);
112
+ }
113
+ catch (err) {
114
+ // Key persistence failure shouldn't block config commit —
115
+ // the user can re-add the key later via /login. Log to
116
+ // stderr for debuggability, then proceed.
117
+ // eslint-disable-next-line no-console
118
+ console.error(`[zelari-code wizard] failed to persist API key for ${s.providerId}: ` +
119
+ (err instanceof Error ? err.message : String(err)));
120
+ }
121
+ }
122
+ s = { ...s, committed: true };
123
+ notify();
124
+ },
125
+ };
126
+ // Internal: allow React UI to re-render. We expose `subscribe` so the
127
+ // Ink component can useSyncExternalStore (or call manually in tests).
128
+ api.subscribe = (l) => {
129
+ listeners.add(l);
130
+ return () => listeners.delete(l);
131
+ };
132
+ // Advance to first non-welcome step programmatically — used by tests
133
+ // and by the "skip intro" flag (future).
134
+ api.jumpToProvider = () => {
135
+ s = { ...s, step: 'provider' };
136
+ notify();
137
+ };
138
+ // Advance from model to apikey step (used by runWizard when user
139
+ // confirms the model on step 3).
140
+ api.advanceToApikey = () => {
141
+ if (s.step === 'model') {
142
+ s = { ...s, step: 'apikey' };
143
+ notify();
144
+ }
145
+ };
146
+ return api;
147
+ }
148
+ /** Convenience constants for tests + UI. */
149
+ export const API_KEY_OPTIONS = ['env', 'keystore', 'skip'];
150
+ export const WIZARD_STEPS = ORDER;
151
+ //# sourceMappingURL=useWizardState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWizardState.js","sourceRoot":"","sources":["../../../src/cli/wizard/useWizardState.ts"],"names":[],"mappings":"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"}
@@ -7,10 +7,10 @@
7
7
  * The fallback ensures the workspace always works — even in read-only
8
8
  * directories (Docker containers, system dirs, etc.).
9
9
  */
10
- import { mkdirSync, writeFileSync, existsSync, accessSync, constants, realpathSync } from 'node:fs';
11
- import { join, basename } from 'node:path';
12
- import { homedir } from 'node:os';
13
- import { createHash } from 'node:crypto';
10
+ import { mkdirSync, writeFileSync, existsSync, accessSync, constants, realpathSync, } from "node:fs";
11
+ import { join, basename } from "node:path";
12
+ import { homedir } from "node:os";
13
+ import { createHash } from "node:crypto";
14
14
  /**
15
15
  * Resolve the workspace root. Returns the first writable option:
16
16
  * 1. `<cwd>/.zelari/` if cwd is writable
@@ -20,8 +20,8 @@ import { createHash } from 'node:crypto';
20
20
  */
21
21
  export function resolveWorkspaceRoot(projectRoot = process.cwd()) {
22
22
  const candidates = [
23
- join(projectRoot, '.zelari'),
24
- join(homedir(), '.zelari-code', 'workspace', hashProject(projectRoot)),
23
+ join(projectRoot, ".zelari"),
24
+ join(homedir(), ".zelari-code", "workspace", hashProject(projectRoot)),
25
25
  ];
26
26
  for (const candidate of candidates) {
27
27
  if (isWritableDir(projectRoot) || candidate !== candidates[0]) {
@@ -35,7 +35,10 @@ export function resolveWorkspaceRoot(projectRoot = process.cwd()) {
35
35
  }
36
36
  /** Hash a project path to a stable short id (used in global fallback path). */
37
37
  function hashProject(projectPath) {
38
- return createHash('sha1').update(realpathSync(projectPath)).digest('hex').slice(0, 12);
38
+ return createHash("sha1")
39
+ .update(realpathSync(projectPath))
40
+ .digest("hex")
41
+ .slice(0, 12);
39
42
  }
40
43
  /** Check if a directory is writable (creates if missing). */
41
44
  function isWritableDir(dir) {
@@ -53,10 +56,11 @@ function isWritableDir(dir) {
53
56
  function ensureWorkspaceDir(workspaceDir) {
54
57
  mkdirSync(workspaceDir, { recursive: true });
55
58
  // Auto-gitignore ONLY if workspace is project-local AND inside a git repo
56
- if (workspaceDir.endsWith('/.zelari') && existsSync(join(workspaceDir, '..', '.git'))) {
57
- const gitignorePath = join(workspaceDir, '.gitignore');
59
+ if (workspaceDir.endsWith("/.zelari") &&
60
+ existsSync(join(workspaceDir, "..", ".git"))) {
61
+ const gitignorePath = join(workspaceDir, ".gitignore");
58
62
  if (!existsSync(gitignorePath)) {
59
- writeFileSync(gitignorePath, '*\n!.gitignore\n');
63
+ writeFileSync(gitignorePath, "*\n!.gitignore\n");
60
64
  }
61
65
  }
62
66
  }
@@ -72,9 +76,12 @@ export const WORKSPACE_SUBDIRS = [
72
76
  /** Get the absolute path to a standard workspace file. */
73
77
  export function workspaceFile(rootDir, kind) {
74
78
  switch (kind) {
75
- case 'plan': return join(rootDir, 'plan.md');
76
- case 'risks': return join(rootDir, 'risks.md');
77
- case 'index': return join(rootDir, 'workspace.json');
79
+ case "plan":
80
+ return join(rootDir, "plan.md");
81
+ case "risks":
82
+ return join(rootDir, "risks.md");
83
+ case "index":
84
+ return join(rootDir, "workspace.json");
78
85
  }
79
86
  }
80
87
  /** Get the absolute path to a numbered artifact in a subdir. */
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/cli/workspace/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/cli/workspace/paths.ts"],"names":[],"mappings":"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"}
@@ -374,15 +374,19 @@ class KeyedMutex {
374
374
  const prev = this.chains.get(key) ?? Promise.resolve();
375
375
  let release = () => { };
376
376
  const next = new Promise((resolve) => { release = resolve; });
377
- this.chains.set(key, prev.then(() => next));
377
+ // v0.7.3: keep the chained promise in a variable — the old cleanup
378
+ // compared against a FRESH `prev.then(...)` promise, so it never matched
379
+ // and entries leaked forever.
380
+ const chained = prev.then(() => next);
381
+ this.chains.set(key, chained);
378
382
  await prev;
379
383
  try {
380
384
  return await fn();
381
385
  }
382
386
  finally {
383
387
  release();
384
- // Cleanup if this was the last in chain
385
- if (this.chains.get(key) === prev.then(() => next)) {
388
+ // Cleanup if this was the last in chain.
389
+ if (this.chains.get(key) === chained) {
386
390
  this.chains.delete(key);
387
391
  }
388
392
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/cli/workspace/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/cli/workspace/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,0EAA0E;AAE1E,MAAM,cAAc,GAAG,6CAA6C,CAAC;AAQrE,gDAAgD;AAChD,MAAM,UAAU,gBAAgB,CAC9B,EAAU;IAEV,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAU,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,oBAAoB,CAClC,IAAW,EACX,IAAY;IAEZ,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,6DAA6D;IAC7D,OAAO,QAAQ,OAAO,UAAU,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,0EAA0E;AAC1E,+EAA+E;AAE/E,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAE/C,kDAAkD;AAClD,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,GAAG,GAAa,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACtC,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3B,CAAC;AAOD,SAAS,SAAS,CAAC,GAAa,EAAE,MAAc;IAC9C,gCAAgC;IAChC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7E,MAAM;IACR,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAErC,gCAAgC;IAChC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,wCAAwC;IACxC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,6CAA6C;IAC7C,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,wDAAwD;IACxD,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,aAAa,CAAC,GAAa,EAAE,MAAc;IAClD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7E,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,UAAU,GAAG,MAAM;YAAE,MAAM;QAC/B,IAAI,UAAU,GAAG,MAAM,EAAE,CAAC;YACxB,0CAA0C;YAC1C,GAAG,CAAC,CAAC,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,aAAa;QACb,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC/D,sCAAsC;YACtC,GAAG,CAAC,CAAC,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,+DAA+D;gBAC/D,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;YACD,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAa,EAAE,MAAc;IACvD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,UAAU,GAAG,MAAM;YAAE,MAAM;QAC/B,IAAI,UAAU,GAAG,MAAM;YAAE,MAAM,CAAC,mBAAmB;QACnD,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC;YAAE,MAAM;QACd,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,uCAAuC;YACvC,GAAG,CAAC,CAAC,EAAE,CAAC;YACR,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,2CAA2C;YAC3C,+BAA+B;YAC/B,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,4EAA4E;YAC5E,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACtF,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACtF,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACpE,GAAG,CAAC,CAAC,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;gBACrB,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;gBAClF,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACpF,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,mDAAmD;YACnD,yEAAyE;YACzE,GAAG,CAAC,CAAC,EAAE,CAAC;YACR,MAAM,MAAM,GAAa,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACrG,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9C,uEAAuE;YACvE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,yDAAyD;IACzD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,uDAAuD;YACvD,OAAO,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mEAAmE;AACnE,SAAS,SAAS,CAAC,CAAS,EAAE,IAAY,EAAE,KAAa;IACvD,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,GAAG,CAAC;YAAE,SAAS;QAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;IAC1C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;iBACpB,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;iBACzB,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;iBACzB,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;iBACzB,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjB,MAAM,GAAG,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;IAC7D,SAAS;IACT,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAChD,gBAAgB;IAChB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrF,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,yBAAyB;IACzB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,yEAAyE;AAEzE,oDAAoD;AACpD,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,MAAM,GAAG,CAAC;IACtD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,kCAAkC;QAClC,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAClF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,2EAA2E;QAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5D,CAAC;QACD,+DAA+D;QAC/D,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QACpG,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC,GAAG,CAAC;YAClD,mDAAmD;YACnD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7E,OAAO,GAAG,CAAC,KAAK,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,iDAAiD;gBACjD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,GAAG,CAAC,MAAM,CAAC;gBACtC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACxD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9D,CAAC;gBACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACpF,CAAC;YACD,4DAA4D;YAC5D,OAAO,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAClD,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,qBAAqB,CAAC,CAAU;IACvC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,oFAAoF;AACpF,SAAS,qBAAqB,CAAC,CAAU;IACvC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;IACpG,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,CAAC,EAAE,CAAC;IAC/C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,yEAAyE;AAEzE,MAAM,OAAO,OAAO;IAClB,kEAAkE;IAClE,IAAI,CAAkC,IAAY;QAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,gBAAgB,CAAQ,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,uDAAuD;IACvD,YAAY,CAAkC,IAAY;QACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAQ,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAQ,IAAY,EAAE,IAAW,EAAE,IAAY;QAClD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QACzC,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/B,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB;IAC3C,CAAC;IAED,yDAAyD;IACzD,YAAY,CAAC,GAAW;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,GAAG,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACtD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,gEAAgE;AAChE,MAAM,UAAU;IACN,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,EAAwB;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACvD,IAAI,OAAO,GAAe,GAAG,EAAE,GAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,mEAAmE;QACnE,yEAAyE;QACzE,8BAA8B;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,IAAI,CAAC;QACX,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;YACV,yCAAyC;YACzC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,UAAU,EAAE,CAAC"}
@@ -11,8 +11,8 @@
11
11
  *
12
12
  * @see docs/plans/2026-07-01-council-workspace-cli-stubs.md
13
13
  */
14
- import { existsSync, readdirSync, readFileSync } from 'node:fs';
15
- import { join } from 'node:path';
14
+ import { existsSync, readdirSync, writeFileSync, readFileSync, mkdirSync, renameSync } from 'node:fs';
15
+ import { join, basename, dirname, relative } from 'node:path';
16
16
  import { workspaceMutex } from './storage.js';
17
17
  import { resolveWorkspaceRoot, workspaceFile, workspaceArtifact, projectName as deriveProjectName, } from './paths.js';
18
18
  import { Storage } from './storage.js';
@@ -29,49 +29,64 @@ export function createWorkspaceContext(projectRoot = process.cwd()) {
29
29
  storage: new Storage(),
30
30
  };
31
31
  }
32
+ /** Path of the machine-readable plan store (source of truth since v0.7.3). */
33
+ function planJsonPath(ctx) {
34
+ return join(ctx.rootDir, 'plan.json');
35
+ }
32
36
  function readPlan(ctx) {
37
+ // v0.7.3: the plan's source of truth is plan.json. The previous
38
+ // implementation round-tripped the whole summary through the handwritten
39
+ // YAML-subset frontmatter of plan.md; free-text names/descriptions with
40
+ // colons, commas, and apostrophes corrupted the flow-map parse, so a phase
41
+ // written by createPhase could be unreadable one call later ("Phase not
42
+ // found" right after "Phase created", live test 2026-07-02). plan.md is
43
+ // now only the human-readable rendering.
44
+ const jsonPath = planJsonPath(ctx);
45
+ if (existsSync(jsonPath)) {
46
+ try {
47
+ const parsed = JSON.parse(readFileSync(jsonPath, 'utf8'));
48
+ return {
49
+ phases: Array.isArray(parsed.phases) ? parsed.phases : [],
50
+ tasks: Array.isArray(parsed.tasks) ? parsed.tasks : [],
51
+ milestones: Array.isArray(parsed.milestones) ? parsed.milestones : [],
52
+ };
53
+ }
54
+ catch {
55
+ // Corrupt plan.json — fall through to the legacy migration read.
56
+ }
57
+ }
58
+ // Legacy migration: one best-effort parse of the old plan.md frontmatter
59
+ // (pre-v0.7.3 files). The next writePlan persists it as plan.json.
33
60
  const path = workspaceFile(ctx.rootDir, 'plan');
34
61
  const doc = ctx.storage.readIfExists(path);
35
62
  if (!doc)
36
63
  return { phases: [], tasks: [], milestones: [] };
37
- // The plan.md body is markdown; the frontmatter is a single "summary" object.
38
- // We treat the file as a single doc with `kind: plan` and a body listing items.
39
- // For our needs we just persist individual items to disk separately.
40
- // But for v1 we serialize the entire plan as one doc with a list of phases/tasks/milestones in the body.
41
- // Simpler: we store ONE phase/task/milestone per file under `.zelari/plan/<id>.md`.
42
- // TODO: refactor for v2 if plan gets large.
43
- const items = [];
44
- // For now, parse the doc.meta as the entire plan state (kind=plan, has children fields).
45
64
  const meta = doc.meta;
46
- if (meta.phases)
47
- items.push(...meta.phases);
48
- return { phases: meta.phases ?? [], tasks: meta.tasks ?? [], milestones: meta.milestones ?? [] };
65
+ return {
66
+ phases: Array.isArray(meta.phases) ? meta.phases : [],
67
+ tasks: Array.isArray(meta.tasks) ? meta.tasks : [],
68
+ milestones: Array.isArray(meta.milestones) ? meta.milestones : [],
69
+ };
49
70
  }
50
71
  /**
51
- * Write the entire plan (phases + tasks + milestones) as one file.
52
- * Simpler than per-item files for v1.
72
+ * Write the entire plan (phases + tasks + milestones):
73
+ * - plan.json lossless machine-readable source of truth (atomic write).
74
+ * - plan.md — human-readable rendering only (no machine-parsed arrays in
75
+ * the frontmatter, so the fragile YAML round-trip is gone).
53
76
  */
54
77
  function writePlan(ctx, summary) {
55
- const path = workspaceFile(ctx.rootDir, 'plan');
56
- const meta = {
57
- kind: 'phase',
58
- id: '_plan_summary',
59
- order: -1,
60
- tags: ['plan-summary'],
61
- };
62
- // We pack phases/tasks/milestones in a synthetic frontmatter using flow-style.
63
- // Easier: just store each item's key fields inline as comments? No — keep them
64
- // parseable. We use a special frontmatter shape with arrays.
78
+ const jsonPath = planJsonPath(ctx);
79
+ mkdirSync(dirname(jsonPath), { recursive: true });
80
+ const tmp = jsonPath + '.tmp-' + process.pid;
81
+ writeFileSync(tmp, JSON.stringify(summary, null, 2), 'utf8');
82
+ renameSync(tmp, jsonPath);
83
+ const mdPath = workspaceFile(ctx.rootDir, 'plan');
65
84
  const summaryMeta = {
66
85
  kind: 'plan-summary',
67
86
  id: '_plan',
68
87
  updatedAt: new Date().toISOString(),
69
- phases: summary.phases,
70
- tasks: summary.tasks,
71
- milestones: summary.milestones,
72
88
  };
73
- const body = renderPlanBody(summary);
74
- ctx.storage.write(path, summaryMeta, body);
89
+ ctx.storage.write(mdPath, summaryMeta, renderPlanBody(summary));
75
90
  }
76
91
  /** Render the plan.md body in human-readable Markdown. */
77
92
  function renderPlanBody(summary) {
@@ -227,6 +242,9 @@ function createTaskStub(ctx) {
227
242
  summary.tasks.push({
228
243
  kind: 'task',
229
244
  id,
245
+ // v0.7.3: keep the human-readable title in plan.json so
246
+ // buildPlanSummary can render it in the system prompt.
247
+ name: title,
230
248
  phaseId,
231
249
  status: 'pending',
232
250
  priority: priority,
@@ -273,12 +291,21 @@ function updateTaskStub(ctx) {
273
291
  execute: async (args) => {
274
292
  return workspaceMutex.run(`${ctx.rootDir}:plan`, () => {
275
293
  const taskId = args['taskId'];
276
- const status = args['status'];
277
- if (!taskId || !status)
294
+ const rawStatus = args['status'];
295
+ if (!taskId || !rawStatus)
278
296
  return 'updateTask requires taskId and status.';
279
297
  const valid = ['pending', 'in_progress', 'done', 'blocked'];
280
- if (!valid.includes(status))
281
- return `Invalid status: ${status}. Must be one of: ${valid.join(', ')}.`;
298
+ // v0.7.3: models routinely use kanban vocabulary ("todo", "completed")
299
+ // map the common synonyms instead of erroring on each attempt.
300
+ const aliases = {
301
+ 'todo': 'pending', 'to-do': 'pending', 'open': 'pending', 'backlog': 'pending',
302
+ 'in-progress': 'in_progress', 'in progress': 'in_progress', 'doing': 'in_progress', 'started': 'in_progress', 'active': 'in_progress',
303
+ 'complete': 'done', 'completed': 'done', 'finished': 'done', 'closed': 'done', 'resolved': 'done',
304
+ 'stuck': 'blocked', 'waiting': 'blocked', 'on-hold': 'blocked', 'on hold': 'blocked',
305
+ };
306
+ const status = valid.includes(rawStatus) ? rawStatus : aliases[rawStatus.toLowerCase()];
307
+ if (!status)
308
+ return `Invalid status: ${rawStatus}. Must be one of: ${valid.join(', ')}.`;
282
309
  const summary = readPlan(ctx);
283
310
  const task = summary.tasks.find((t) => t.id === taskId);
284
311
  if (!task)
@@ -411,21 +438,52 @@ function createDocumentStub(ctx) {
411
438
  },
412
439
  };
413
440
  }
441
+ /**
442
+ * After this many searchDocuments calls in one council run, every further
443
+ * result carries a nudge to stop searching and act. Live test 2026-07-02:
444
+ * one member burned ~25 near-identical searches (each phrased slightly
445
+ * differently, so the duplicate-call cache never tripped) before doing any
446
+ * actual work.
447
+ */
448
+ const SEARCH_NUDGE_THRESHOLD = 5;
414
449
  function searchDocumentsStub(ctx) {
450
+ let callCount = 0;
415
451
  return {
416
452
  name: 'searchDocuments',
417
- description: 'Search all workspace documents (`.zelari/**`) for a keyword. Returns matching files with snippets.',
453
+ description: 'Search all workspace documents (`.zelari/**`) for a keyword. Returns matching files with snippets. ' +
454
+ 'Search AT MOST 2-3 times, then act on the results: read the matched files with read_file instead of rephrasing the same search.',
418
455
  category: 'analysis',
419
456
  parameters: [],
420
457
  execute: async (args) => {
421
- const query = (args['query'] ?? '').toLowerCase();
458
+ callCount++;
459
+ const nudge = callCount > SEARCH_NUDGE_THRESHOLD
460
+ ? `[note] This is searchDocuments call #${callCount} in this run — STOP searching. Read the files you already found with read_file and act on them.\n\n`
461
+ : '';
462
+ const rawQuery = (args['query'] ?? '').trim();
422
463
  const limit = args['limit'] ?? 5;
423
- if (!query)
464
+ if (!rawQuery)
424
465
  return 'searchDocuments requires a query.';
466
+ // v0.7.3: models routinely write boolean-ish queries ("plan OR phase OR
467
+ // milestone"). The previous implementation substring-matched the WHOLE
468
+ // query string, so every OR query — and any multi-word query that didn't
469
+ // appear verbatim — returned "No matches" even for documents created
470
+ // seconds earlier. Match any OR-phrase first, then fall back to
471
+ // any-word matching per file.
472
+ const phrases = rawQuery
473
+ .toLowerCase()
474
+ .split(/\s+or\s+/i)
475
+ .map((p) => p.trim())
476
+ .filter((p) => p.length > 0);
477
+ const words = rawQuery
478
+ .toLowerCase()
479
+ .split(/[^a-z0-9_-]+/)
480
+ .filter((w) => w.length >= 3 && w !== 'or' && w !== 'and' && w !== 'the');
425
481
  const files = [
426
482
  ...ctx.storage.listMarkdown(join(ctx.rootDir, 'decisions')),
427
483
  ...ctx.storage.listMarkdown(join(ctx.rootDir, 'docs')),
428
484
  ...ctx.storage.listMarkdown(join(ctx.rootDir, 'reviews')),
485
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'plan-tasks')),
486
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'milestones')),
429
487
  workspaceFile(ctx.rootDir, 'plan'),
430
488
  workspaceFile(ctx.rootDir, 'risks'),
431
489
  ];
@@ -433,20 +491,40 @@ function searchDocumentsStub(ctx) {
433
491
  for (const file of files) {
434
492
  if (!existsSync(file))
435
493
  continue;
436
- const content = readFileSync(file, 'utf8').toLowerCase();
437
- const idx = content.indexOf(query);
494
+ const raw = readFileSync(file, 'utf8');
495
+ const content = raw.toLowerCase();
496
+ let idx = -1;
497
+ let matchLen = 0;
498
+ for (const p of phrases) {
499
+ const i = content.indexOf(p);
500
+ if (i >= 0) {
501
+ idx = i;
502
+ matchLen = p.length;
503
+ break;
504
+ }
505
+ }
506
+ if (idx < 0) {
507
+ for (const w of words) {
508
+ const i = content.indexOf(w);
509
+ if (i >= 0) {
510
+ idx = i;
511
+ matchLen = w.length;
512
+ break;
513
+ }
514
+ }
515
+ }
438
516
  if (idx < 0)
439
517
  continue;
440
518
  const start = Math.max(0, idx - 40);
441
- const end = Math.min(content.length, idx + query.length + 40);
442
- const snippet = '…' + readFileSync(file, 'utf8').slice(start, end).replace(/\n/g, ' ').trim() + '…';
443
- results.push({ path: file, snippet });
519
+ const end = Math.min(raw.length, idx + matchLen + 40);
520
+ const snippet = '…' + raw.slice(start, end).replace(/\n/g, ' ').trim() + '…';
521
+ results.push({ path: relative(ctx.rootDir, file) || basename(file), snippet });
444
522
  if (results.length >= limit)
445
523
  break;
446
524
  }
447
525
  if (results.length === 0)
448
- return `No matches for "${query}" in workspace.`;
449
- return results.map((r) => `[${r.path}]\n${r.snippet}`).join('\n\n');
526
+ return `${nudge}No matches for "${rawQuery}" in workspace.`;
527
+ return nudge + results.map((r) => `[${r.path}]\n${r.snippet}`).join('\n\n');
450
528
  },
451
529
  };
452
530
  }