@captain_z/zsk 1.8.6 → 1.8.7

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 (70) hide show
  1. package/dist/bin.js +128 -0
  2. package/dist/bin.js.map +1 -1
  3. package/dist/commands/add-flow.js +7 -1
  4. package/dist/commands/add-flow.js.map +1 -1
  5. package/dist/commands/add.js +22 -5
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/dispatch.d.ts +4 -0
  8. package/dist/commands/dispatch.js +483 -7
  9. package/dist/commands/dispatch.js.map +1 -1
  10. package/dist/commands/doctor.js +21 -5
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/issue.d.ts +1 -0
  13. package/dist/commands/issue.js +2 -2
  14. package/dist/commands/issue.js.map +1 -1
  15. package/dist/commands/project-init.js +14 -8
  16. package/dist/commands/project-init.js.map +1 -1
  17. package/dist/commands/work.d.ts +34 -0
  18. package/dist/commands/work.js +1769 -0
  19. package/dist/commands/work.js.map +1 -0
  20. package/dist/commands/workflow.d.ts +32 -0
  21. package/dist/commands/workflow.js +270 -0
  22. package/dist/commands/workflow.js.map +1 -0
  23. package/dist/core/config.d.ts +29 -0
  24. package/dist/core/config.js +157 -1
  25. package/dist/core/config.js.map +1 -1
  26. package/dist/core/skill-classification.d.ts +13 -0
  27. package/dist/core/skill-classification.js +50 -0
  28. package/dist/core/skill-classification.js.map +1 -0
  29. package/dist/core/stage-clarity-verification.js +58 -7
  30. package/dist/core/stage-clarity-verification.js.map +1 -1
  31. package/dist/core/template-registry.js +26 -7
  32. package/dist/core/template-registry.js.map +1 -1
  33. package/dist/core/work-ledger.d.ts +44 -0
  34. package/dist/core/work-ledger.js +88 -0
  35. package/dist/core/work-ledger.js.map +1 -0
  36. package/dist/core/work-provider-adapters.d.ts +110 -0
  37. package/dist/core/work-provider-adapters.js +484 -0
  38. package/dist/core/work-provider-adapters.js.map +1 -0
  39. package/dist/core/workflow-graph.d.ts +100 -0
  40. package/dist/core/workflow-graph.js +655 -0
  41. package/dist/core/workflow-graph.js.map +1 -0
  42. package/dist/core/workspace-conformance.js +55 -0
  43. package/dist/core/workspace-conformance.js.map +1 -1
  44. package/dist/core/workspace-layout.d.ts +3 -1
  45. package/dist/core/workspace-layout.js +4 -0
  46. package/dist/core/workspace-layout.js.map +1 -1
  47. package/package.json +2 -2
  48. package/schemas/zsk-config.schema.json +112 -1
  49. package/templates/module/frontend-module/CONTEXT.md +22 -0
  50. package/templates/module/frontend-module/design.md +1 -1
  51. package/templates/module/frontend-module/proposal.md +1 -1
  52. package/templates/module/frontend-module/spec.md +1 -1
  53. package/templates/module/frontend-module/tasks.md +14 -1
  54. package/templates/project-init/.zsk/CONTEXT.md +35 -0
  55. package/templates/project-init/.zsk/README.md +94 -10
  56. package/templates/project-init/.zsk/config.yaml +2 -0
  57. package/templates/project-init/.zsk/docs/CONFIG-SCHEMA.md +13 -1
  58. package/templates/project-init/.zsk/docs/PROJECT-CONFIG.md +25 -7
  59. package/templates/project-init/.zsk/docs/SYSTEM-SPEC.md +1 -0
  60. package/templates/project-init/.zsk/team.yaml +218 -0
  61. package/templates/project-init/.zsk/work.yaml +75 -0
  62. package/templates/project-init/.zsk/evidence/README.md +0 -21
  63. package/templates/project-init/.zsk/evidence/prepare/README.md +0 -22
  64. package/templates/project-init/.zsk/issues/README.md +0 -10
  65. package/templates/project-init/.zsk/templates/module/README.md +0 -13
  66. package/templates/project-init/.zsk/templates/module/design.md +0 -22
  67. package/templates/project-init/.zsk/templates/module/module.yaml +0 -15
  68. package/templates/project-init/.zsk/templates/module/proposal.md +0 -20
  69. package/templates/project-init/.zsk/templates/module/spec.md +0 -22
  70. package/templates/project-init/.zsk/templates/module/tasks.md +0 -16
@@ -1,8 +1,18 @@
1
1
  import pc from "picocolors";
2
+ import { access, readFile } from "node:fs/promises";
3
+ import { relative, resolve } from "node:path";
4
+ import YAML from "yaml";
2
5
  import { resolvePath } from "../core/targets.js";
3
6
  import { checkProjectConfig, formatConfigIssues, readProjectConfig } from "../core/config.js";
4
7
  import { inspectStaffingRun, writeStaffingPlan } from "../core/staffing-plan.js";
8
+ import { assignmentProviderRef } from "../core/work-provider-adapters.js";
9
+ import { appendWorkEvents, latestWorkItem, readWorkEvents, resolveWorkLedgerPath } from "../core/work-ledger.js";
10
+ import { isPathInside, resolveProjectPath } from "../core/workspace-conformance.js";
5
11
  export async function plan(opts = {}) {
12
+ if (opts.emitWorkAssignments && !opts.item) {
13
+ console.error(pc.red("✗ missing work item id; pass --item <id> with --emit-work-assignments"));
14
+ process.exit(1);
15
+ }
6
16
  const target = opts.target ? resolvePath(opts.target) : process.cwd();
7
17
  const configCheck = await checkProjectConfig(target);
8
18
  for (const warning of configCheck.warnings) {
@@ -14,25 +24,45 @@ export async function plan(opts = {}) {
14
24
  process.exit(1);
15
25
  }
16
26
  const config = await readProjectConfig(target);
27
+ const { target: _target, threshold, nonBlockingGate, emitWorkAssignments, item, provider, project, ...staffingOpts } = opts;
17
28
  const bundle = await writeStaffingPlan(target, config, {
18
- ...opts,
19
- gateThreshold: parseThreshold(opts.threshold),
29
+ ...staffingOpts,
30
+ gateThreshold: parseThreshold(threshold),
20
31
  });
21
32
  console.log(pc.green("✓ zsk dispatch plan completed"));
33
+ const stageGate = bundle.plan.stageGate;
34
+ const stageGateOk = !stageGate || stageGate.status === "READY" || stageGate.status === "WAIVED";
22
35
  if (bundle.plan.stageGate) {
23
- const gateOk = bundle.plan.stageGate.status === "READY" || bundle.plan.stageGate.status === "WAIVED";
24
- const color = gateOk ? pc.green : bundle.plan.stageGate.status === "NEEDS_CONFIRMATION" ? pc.yellow : pc.red;
25
- console.log(color(`${gateOk ? "✓" : bundle.plan.stageGate.status === "NEEDS_CONFIRMATION" ? "!" : "✗"} stage gate: ${bundle.plan.stageGate.status} (${bundle.plan.stageGate.score}/10)`));
36
+ const color = stageGateOk ? pc.green : bundle.plan.stageGate.status === "NEEDS_CONFIRMATION" ? pc.yellow : pc.red;
37
+ console.log(color(`${stageGateOk ? "✓" : bundle.plan.stageGate.status === "NEEDS_CONFIRMATION" ? "!" : "✗"} stage gate: ${bundle.plan.stageGate.status} (${bundle.plan.stageGate.score}/10)`));
26
38
  console.log(pc.dim(`stage-gate: ${bundle.plan.stageGate.assessmentPath}`));
27
39
  }
40
+ let assignmentEmission;
41
+ if (emitWorkAssignments && item && stageGateOk) {
42
+ assignmentEmission = await appendDispatchAssignmentEvents({
43
+ target,
44
+ config,
45
+ bundle,
46
+ item,
47
+ provider,
48
+ project,
49
+ });
50
+ }
28
51
  console.log(pc.dim(`plan: ${bundle.artifacts.jsonPath}`));
29
52
  console.log(pc.dim(`markdown: ${bundle.artifacts.markdownPath}`));
30
53
  console.log(pc.dim(`emit-packets: ${bundle.artifacts.emitPath}`));
31
54
  console.log(pc.dim(`emit-ledger: ${bundle.artifacts.ledgerPath}`));
32
55
  console.log(pc.dim(`planned ${bundle.plan.roles.length} role(s), ${bundle.plan.emitPackets.length} active emit lane(s) for ${bundle.plan.stage}/${bundle.plan.skill}`));
33
56
  console.log(pc.dim(`surface: ${bundle.plan.orchestration.selectedSurface}; dispatch: ${bundle.plan.orchestration.dispatchRecommended ? "yes" : "sequential"}`));
34
- const stageGate = bundle.plan.stageGate;
35
- if (stageGate && stageGate.status !== "READY" && stageGate.status !== "WAIVED" && !opts.nonBlockingGate)
57
+ if (emitWorkAssignments && !stageGateOk) {
58
+ console.log(pc.yellow("! work assignments skipped because the stage gate is not READY or WAIVED"));
59
+ }
60
+ if (assignmentEmission) {
61
+ const skipped = assignmentEmission.skippedRoles.length > 0 ? `; skipped roles: ${assignmentEmission.skippedRoles.join(", ")}` : "";
62
+ console.log(pc.dim(`work assignments: ${assignmentEmission.appendedCount} appended; ${assignmentEmission.skippedCount} skipped${skipped}`));
63
+ console.log(pc.dim(`work ledger: ${assignmentEmission.ledgerPath}`));
64
+ }
65
+ if (stageGate && stageGate.status !== "READY" && stageGate.status !== "WAIVED" && !nonBlockingGate)
36
66
  process.exit(2);
37
67
  }
38
68
  export async function inspect(opts = {}) {
@@ -66,4 +96,450 @@ function parseThreshold(value) {
66
96
  }
67
97
  return parsed;
68
98
  }
99
+ async function appendDispatchAssignmentEvents(input) {
100
+ const { ledgerPath } = await resolveWorkLedgerPath(input.target, input.config);
101
+ const workConfig = await readWorkConfig(input.target, input.config);
102
+ const provider = input.provider ?? workConfig.defaultProvider ?? "multica";
103
+ const teamConfig = await readTeamConfig(input.target, input.config);
104
+ const expertCatalog = await readProviderExpertCatalog(input.target, teamConfig, workConfig, provider);
105
+ const existingEvents = await readWorkEvents(ledgerPath);
106
+ const previous = latestWorkItem(existingEvents, input.item);
107
+ const moduleId = input.bundle.plan.module ?? idOf(previous?.module);
108
+ const assignmentContext = {
109
+ stage: input.bundle.plan.stage,
110
+ module: moduleId,
111
+ };
112
+ const assignments = resolveDispatchAssignments(input.bundle.plan.roles, teamConfig, provider, previous, expertCatalog, assignmentContext);
113
+ const skippedRoles = input.bundle.plan.roles
114
+ .filter((role) => role.active)
115
+ .map((role) => role.role)
116
+ .filter((role) => !assignments.some((assignment) => assignment.staffingRole === role));
117
+ const now = new Date().toISOString();
118
+ const sourceArtifacts = dispatchSourceArtifacts(input.target, input.bundle, previous);
119
+ const projectId = input.project ??
120
+ idOf(previous?.project) ??
121
+ resolveWorkProject(moduleId, workConfig.providers?.[provider]) ??
122
+ input.config.project?.name ??
123
+ moduleId ??
124
+ "project";
125
+ const workItem = {
126
+ id: input.item,
127
+ type: previous?.type ?? "task",
128
+ title: previous?.title ?? `Assignment requested for ${input.item}`,
129
+ project: projectId,
130
+ module: moduleId ?? "project",
131
+ stage: input.bundle.plan.stage,
132
+ status: previous?.status ?? "ready",
133
+ sourceArtifacts,
134
+ };
135
+ const events = assignments
136
+ .filter((assignment) => !latestEquivalentAssignment(existingEvents, input.item, assignment, provider))
137
+ .map((assignment) => {
138
+ const assignee = assignment.providerAgent ?? assignment.agent;
139
+ const providerRefs = assignment.providerAgent
140
+ ? { [provider]: { agent: assignment.providerAgent } }
141
+ : {};
142
+ return {
143
+ event: "work.assignment.requested",
144
+ version: 1,
145
+ occurredAt: now,
146
+ producer: {
147
+ skill: "dispatch",
148
+ stage: input.bundle.plan.stage,
149
+ },
150
+ workItem: {
151
+ ...workItem,
152
+ owner: assignee,
153
+ },
154
+ assignment: {
155
+ mode: "agent",
156
+ role: assignment.role,
157
+ agent: assignment.agent,
158
+ providerAgent: assignment.providerAgent,
159
+ assignee,
160
+ providerRefs,
161
+ rationale: assignment.rationale,
162
+ requestedAt: now,
163
+ staffingRole: assignment.staffingRole,
164
+ subagentType: assignment.subagentType,
165
+ route: assignment.route,
166
+ selection: assignment.selection,
167
+ },
168
+ links: {
169
+ provider,
170
+ dispatchRun: input.bundle.plan.runId,
171
+ dispatchPlan: projectRelative(input.target, input.bundle.artifacts.jsonPath),
172
+ staffingRole: assignment.staffingRole,
173
+ stageGate: input.bundle.plan.stageGate?.assessmentPath,
174
+ },
175
+ evidence: {
176
+ dispatchPlan: projectRelative(input.target, input.bundle.artifacts.jsonPath),
177
+ stageGate: input.bundle.plan.stageGate?.assessmentPath,
178
+ },
179
+ };
180
+ });
181
+ if (events.length > 0) {
182
+ await appendWorkEvents(ledgerPath, events);
183
+ }
184
+ return {
185
+ provider,
186
+ ledgerPath,
187
+ appendedCount: events.length,
188
+ skippedCount: assignments.length - events.length,
189
+ skippedRoles,
190
+ };
191
+ }
192
+ function resolveDispatchAssignments(roles, teamConfig, provider, previous, expertCatalog, context) {
193
+ const resolved = [];
194
+ const seen = new Set();
195
+ for (const role of roles.filter((item) => item.active)) {
196
+ const assignment = resolveDispatchAssignment(role, teamConfig, provider, previous, expertCatalog, context);
197
+ if (!assignment)
198
+ continue;
199
+ const key = [assignment.role, assignment.agent, assignment.providerAgent ?? ""].join(":");
200
+ if (seen.has(key))
201
+ continue;
202
+ seen.add(key);
203
+ resolved.push(assignment);
204
+ }
205
+ return resolved;
206
+ }
207
+ function resolveDispatchAssignment(role, teamConfig, provider, previous, expertCatalog, context) {
208
+ const policy = teamConfig.assignmentPolicy?.dispatch;
209
+ const candidateRoles = uniqueStrings([
210
+ ...ownerRoleCandidates(previous, role, policy),
211
+ role.role,
212
+ ...roleMappingCandidates(policy, role.role),
213
+ ...rolesForSubagentTypes(teamConfig, roleMappingSubagentTypes(policy?.roleMappings?.[role.role])),
214
+ ...stageRouteCandidates(policy, role.stage),
215
+ ...rolesForSubagentTypes(teamConfig, roleMappingSubagentTypes(policy?.stageRoutes?.[role.stage])),
216
+ ...inferredRoleCandidates(teamConfig, role),
217
+ ]).filter((candidate) => Boolean(teamConfig.roles?.[candidate]));
218
+ for (const candidateRole of candidateRoles) {
219
+ const agent = selectAgentForRole(candidateRole, role, teamConfig, provider, expertCatalog, context);
220
+ if (!agent)
221
+ continue;
222
+ return {
223
+ staffingRole: role.role,
224
+ role: candidateRole,
225
+ agent: agent.id,
226
+ providerAgent: agent.providerAgent,
227
+ subagentType: role.subagentType,
228
+ route: role.route,
229
+ rationale: `dispatch selected ${agent.id} for ${candidateRole} from ${role.role} using assignmentPolicy.dispatch (${agent.score}: ${agent.reasons.join(", ")}): ${role.reason}`,
230
+ selection: {
231
+ source: agent.source,
232
+ score: agent.score,
233
+ reasons: agent.reasons,
234
+ },
235
+ };
236
+ }
237
+ return null;
238
+ }
239
+ function ownerRoleCandidates(previous, role, policy) {
240
+ const owner = stringOf(previous?.owner);
241
+ const enabledRoles = policy?.ownerRoleHints?.enabledForStaffingRoles ?? [];
242
+ if (!owner || !enabledRoles.includes(role.role))
243
+ return [];
244
+ return [owner];
245
+ }
246
+ function roleMappingCandidates(policy, staffingRole) {
247
+ const mapping = policy?.roleMappings?.[staffingRole];
248
+ if (typeof mapping === "string")
249
+ return [mapping];
250
+ if (Array.isArray(mapping))
251
+ return mapping.filter(isString);
252
+ if (isRecord(mapping))
253
+ return [
254
+ ...(mapping.preferRoles ?? []).filter(isString),
255
+ ...(mapping.roles ?? []).filter(isString),
256
+ ];
257
+ return [];
258
+ }
259
+ function stageRouteCandidates(policy, stage) {
260
+ return roleMappingCandidates({ roleMappings: policy?.stageRoutes }, stage);
261
+ }
262
+ function roleMappingSubagentTypes(mapping) {
263
+ if (!isRecord(mapping))
264
+ return [];
265
+ return (mapping.subagentTypes ?? []).filter(isString);
266
+ }
267
+ function rolesForSubagentTypes(teamConfig, subagentTypes) {
268
+ if (subagentTypes.length === 0)
269
+ return [];
270
+ return Object.entries(teamConfig.roles ?? {})
271
+ .filter(([, config]) => config?.subagentTypes?.some((type) => subagentTypes.includes(type)))
272
+ .map(([role]) => role);
273
+ }
274
+ function inferredRoleCandidates(teamConfig, staffingRole) {
275
+ return Object.entries(teamConfig.roles ?? {})
276
+ .map(([role, config]) => {
277
+ const stages = config?.stages ?? [];
278
+ const subagentTypes = config?.subagentTypes ?? [];
279
+ const score = (subagentTypes.includes(staffingRole.subagentType) ? 2 : 0) +
280
+ (stages.includes(staffingRole.stage) ? 1 : 0);
281
+ return { role, score };
282
+ })
283
+ .filter((candidate) => candidate.score > 0)
284
+ .sort((a, b) => b.score - a.score || a.role.localeCompare(b.role))
285
+ .map((candidate) => candidate.role);
286
+ }
287
+ function selectAgentForRole(role, staffingRole, teamConfig, provider, expertCatalog, context) {
288
+ const candidates = agentCandidatesForRole(role, teamConfig, provider, expertCatalog);
289
+ if (candidates.length === 0)
290
+ return null;
291
+ const scored = candidates
292
+ .map((candidate) => scoreAgentCandidate(candidate, role, staffingRole, context))
293
+ .filter((candidate) => candidate.score > -100);
294
+ if (scored.length === 0)
295
+ return null;
296
+ scored.sort((a, b) => b.score - a.score || a.id.localeCompare(b.id));
297
+ return scored[0] ?? null;
298
+ }
299
+ function agentCandidatesForRole(role, teamConfig, provider, expertCatalog) {
300
+ const teamCandidates = Object.entries(teamConfig.agents ?? {})
301
+ .filter(([, agent]) => agent?.roles?.includes(role))
302
+ .map(([id, agent]) => ({
303
+ id,
304
+ providerAgent: agent?.providerRefs?.[provider]?.agent ?? null,
305
+ roles: agent?.roles ?? [],
306
+ stages: agent?.stages ?? [],
307
+ modules: agent?.modules ?? [],
308
+ subagentTypes: agent?.subagentTypes ?? [],
309
+ capacity: agent?.capacity,
310
+ priority: agent?.priority,
311
+ source: "team",
312
+ }));
313
+ const catalogCandidates = expertCatalog
314
+ .filter((expert) => expert.roles?.includes(role))
315
+ .flatMap((expert) => {
316
+ const id = expert.id ?? expert.agent ?? expert.providerAgent;
317
+ if (!id)
318
+ return [];
319
+ return [{
320
+ id,
321
+ providerAgent: expert.providerRefs?.[provider]?.agent ?? expert.providerAgent ?? expert.agent ?? id,
322
+ roles: expert.roles ?? [],
323
+ stages: expert.stages ?? [],
324
+ modules: expert.modules ?? [],
325
+ subagentTypes: expert.subagentTypes ?? [],
326
+ capacity: expert.capacity,
327
+ priority: expert.priority,
328
+ source: "provider-catalog",
329
+ }];
330
+ });
331
+ const byKey = new Map();
332
+ for (const candidate of [...teamCandidates, ...catalogCandidates]) {
333
+ byKey.set([candidate.source, candidate.id, candidate.providerAgent ?? ""].join(":"), candidate);
334
+ }
335
+ return [...byKey.values()];
336
+ }
337
+ function scoreAgentCandidate(candidate, role, staffingRole, context) {
338
+ let score = 30;
339
+ const reasons = [`role:${role}`, `source:${candidate.source}`];
340
+ if (candidate.providerAgent) {
341
+ score += 25;
342
+ reasons.push("provider-ref");
343
+ }
344
+ if (candidate.stages.includes(context.stage)) {
345
+ score += 18;
346
+ reasons.push(`stage:${context.stage}`);
347
+ }
348
+ else if (candidate.stages.length > 0) {
349
+ score -= 20;
350
+ reasons.push("stage-mismatch");
351
+ }
352
+ if (context.module && candidate.modules.includes(context.module)) {
353
+ score += 20;
354
+ reasons.push(`module:${context.module}`);
355
+ }
356
+ else if (candidate.modules.length > 0) {
357
+ score -= 20;
358
+ reasons.push("module-mismatch");
359
+ }
360
+ if (candidate.subagentTypes.includes(staffingRole.subagentType)) {
361
+ score += 15;
362
+ reasons.push(`subagent:${staffingRole.subagentType}`);
363
+ }
364
+ else if (candidate.subagentTypes.length > 0) {
365
+ score -= 10;
366
+ reasons.push("subagent-mismatch");
367
+ }
368
+ const capacity = capacityScore(candidate.capacity);
369
+ if (capacity !== 0) {
370
+ score += capacity;
371
+ reasons.push(`capacity:${candidate.capacity}`);
372
+ }
373
+ if (typeof candidate.priority === "number" && Number.isFinite(candidate.priority)) {
374
+ score += candidate.priority;
375
+ reasons.push(`priority:${candidate.priority}`);
376
+ }
377
+ return {
378
+ id: candidate.id,
379
+ providerAgent: candidate.providerAgent,
380
+ source: candidate.source,
381
+ score,
382
+ reasons,
383
+ };
384
+ }
385
+ function capacityScore(value) {
386
+ if (typeof value === "number" && Number.isFinite(value))
387
+ return Math.max(-100, Math.min(25, value));
388
+ switch (value) {
389
+ case "primary":
390
+ return 18;
391
+ case "high":
392
+ return 14;
393
+ case "normal":
394
+ return 8;
395
+ case "low":
396
+ return 3;
397
+ case "unavailable":
398
+ return -120;
399
+ default:
400
+ return 0;
401
+ }
402
+ }
403
+ function latestEquivalentAssignment(events, item, assignment, provider) {
404
+ for (const event of [...events].reverse()) {
405
+ if (event.workItem?.id !== item)
406
+ continue;
407
+ if (event.event !== "work.assignment.requested" && event.event !== "work.assignment.accepted")
408
+ continue;
409
+ const previous = event.assignment ?? {};
410
+ if (stringOf(previous.mode) === "agent" &&
411
+ stringOf(previous.role) === assignment.role &&
412
+ stringOf(previous.agent) === assignment.agent &&
413
+ stringOf(previous.providerAgent) === assignment.providerAgent &&
414
+ stringOf(previous.rationale) === assignment.rationale &&
415
+ assignmentProviderRef(previous, provider) === (assignment.providerAgent ?? assignment.agent)) {
416
+ return event;
417
+ }
418
+ }
419
+ return undefined;
420
+ }
421
+ function dispatchSourceArtifacts(target, bundle, previous) {
422
+ return uniqueStrings([
423
+ ...stringsOf(previous?.sourceArtifacts),
424
+ projectRelative(target, bundle.artifacts.jsonPath),
425
+ projectRelative(target, bundle.artifacts.markdownPath),
426
+ ...(bundle.plan.stageGate?.assessmentPath ? [bundle.plan.stageGate.assessmentPath] : []),
427
+ ]);
428
+ }
429
+ function resolveWorkProject(moduleId, providerConfig) {
430
+ const module = moduleId?.trim();
431
+ if (!module)
432
+ return null;
433
+ const mapped = providerConfig?.projectMapping?.projects?.[module];
434
+ if (mapped?.trim())
435
+ return mapped.trim();
436
+ return providerConfig?.projectMapping?.strategy === "module-to-project" ? module : null;
437
+ }
438
+ async function readWorkConfig(target, config) {
439
+ const path = resolveInsideProject(target, config.customize?.work ?? ".zsk/work.yaml", "work config");
440
+ try {
441
+ const raw = await readFile(path, "utf8");
442
+ const parsed = YAML.parse(raw);
443
+ return isRecord(parsed) ? parsed : {};
444
+ }
445
+ catch {
446
+ return {};
447
+ }
448
+ }
449
+ async function readTeamConfig(target, config) {
450
+ const path = resolveInsideProject(target, config.customize?.team ?? ".zsk/team.yaml", "team config");
451
+ try {
452
+ const raw = await readFile(path, "utf8");
453
+ const parsed = YAML.parse(raw);
454
+ return isRecord(parsed) ? parsed : {};
455
+ }
456
+ catch {
457
+ console.error(pc.red(`✗ team config not found: ${path}`));
458
+ process.exit(1);
459
+ }
460
+ }
461
+ async function readProviderExpertCatalog(target, teamConfig, workConfig, provider) {
462
+ const configuredPath = teamConfig.providerCatalogs?.[provider]?.path ?? workConfig.providers?.[provider]?.expertCatalog?.path;
463
+ const catalogPath = configuredPath ?? await existingDefaultProviderExpertCatalogPath(target, provider);
464
+ if (!catalogPath)
465
+ return [];
466
+ const path = resolveInsideProject(target, catalogPath, "provider expert catalog");
467
+ try {
468
+ const raw = await readFile(path, "utf8");
469
+ return providerExpertRecords(YAML.parse(raw));
470
+ }
471
+ catch {
472
+ if (configuredPath)
473
+ console.warn(pc.yellow(`! provider expert catalog not found: ${path}`));
474
+ return [];
475
+ }
476
+ }
477
+ async function existingDefaultProviderExpertCatalogPath(target, provider) {
478
+ const path = `.zsk/providers/${provider}/experts.yaml`;
479
+ try {
480
+ await access(resolveInsideProject(target, path, "provider expert catalog"));
481
+ return path;
482
+ }
483
+ catch {
484
+ return null;
485
+ }
486
+ }
487
+ function providerExpertRecords(value) {
488
+ if (Array.isArray(value))
489
+ return value.filter(isRecord).map((record) => record);
490
+ if (!isRecord(value))
491
+ return [];
492
+ for (const key of ["experts", "agents", "items", "records"]) {
493
+ const item = value[key];
494
+ if (Array.isArray(item))
495
+ return item.filter(isRecord).map((record) => record);
496
+ if (isRecord(item)) {
497
+ return Object.entries(item)
498
+ .filter(([, record]) => isRecord(record))
499
+ .map(([id, record]) => ({ id, ...record }));
500
+ }
501
+ }
502
+ if (value.id || value.agent || value.providerAgent || value.roles)
503
+ return [value];
504
+ return [];
505
+ }
506
+ function resolveInsideProject(root, value, label) {
507
+ const resolved = resolveProjectPath(root, value);
508
+ if (!isPathInside(resolve(root), resolved)) {
509
+ throw new Error(`${label} path must stay inside the project: ${value}`);
510
+ }
511
+ return resolved;
512
+ }
513
+ function projectRelative(root, value) {
514
+ const rel = relative(root, value);
515
+ return rel && !rel.startsWith("..") ? rel : value;
516
+ }
517
+ function idOf(value) {
518
+ if (typeof value === "string" && value.trim())
519
+ return value;
520
+ if (isRecord(value) && typeof value.id === "string" && value.id.trim())
521
+ return value.id;
522
+ return null;
523
+ }
524
+ function stringOf(value) {
525
+ return typeof value === "string" && value.trim() ? value.trim() : null;
526
+ }
527
+ function stringsOf(value) {
528
+ if (typeof value === "string" && value.trim())
529
+ return [value.trim()];
530
+ if (Array.isArray(value))
531
+ return value.flatMap(stringsOf);
532
+ if (!isRecord(value))
533
+ return [];
534
+ return Object.values(value).flatMap(stringsOf);
535
+ }
536
+ function uniqueStrings(values) {
537
+ return [...new Set(values.map((value) => value.trim()).filter(Boolean))];
538
+ }
539
+ function isString(value) {
540
+ return typeof value === "string" && value.trim().length > 0;
541
+ }
542
+ function isRecord(value) {
543
+ return typeof value === "object" && value !== null && !Array.isArray(value);
544
+ }
69
545
  //# sourceMappingURL=dispatch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import pc from "picocolors";
2
- import { access, readFile } from "node:fs/promises";
2
+ import { access, readFile, readdir } from "node:fs/promises";
3
3
  import { join, resolve } from "node:path";
4
4
  import { resolvePath } from "../core/targets.js";
5
5
  import { checkProjectConfig, formatConfigIssues, readProjectConfig, } from "../core/config.js";
@@ -45,14 +45,13 @@ async function checkRequiredInitArtifacts(target, config, issues) {
45
45
  for (const path of [
46
46
  ".zsk/README.md",
47
47
  ".zsk/roles.yaml",
48
+ ".zsk/CONTEXT.md",
48
49
  getWorkspacePath(config, "projectConfig"),
49
50
  getWorkspacePath(config, "systemSpec"),
50
51
  join(getWorkspacePath(config, "docsRoot"), "CONFIG-SCHEMA.md"),
51
52
  join(getWorkspacePath(config, "docsRoot"), "SECURITY.md"),
52
53
  getWorkspacePath(config, "moduleIndex"),
53
54
  join(getWorkspacePath(config, "rawsRoot"), "README.md"),
54
- join(getWorkspacePath(config, "issuesRoot"), "README.md"),
55
- join(getWorkspacePath(config, "evidenceRoot"), "README.md"),
56
55
  ]) {
57
56
  const file = resolve(target, path);
58
57
  if (await exists(file))
@@ -64,7 +63,7 @@ async function checkRequiredInitArtifacts(target, config, issues) {
64
63
  }
65
64
  }
66
65
  async function checkLegacyPathLeaks(target, issues) {
67
- for (const path of [".zsk/resources", ".zsk/plans", ".zsk/demo-sessions", ".raws", ".issues", ".playwright"]) {
66
+ for (const path of [".zsk/demo-sessions", ".raws", ".issues", ".playwright"]) {
68
67
  const file = resolve(target, path);
69
68
  if (!(await exists(file)))
70
69
  continue;
@@ -73,6 +72,15 @@ async function checkLegacyPathLeaks(target, issues) {
73
72
  message: "unexpected workspace path detected; keep ZSK-owned artifacts under configured .zsk roots",
74
73
  });
75
74
  }
75
+ for (const path of [".zsk/issues", ".zsk/evidence", ".zsk/resources", ".zsk/plans", ".zsk/playwright"]) {
76
+ const file = resolve(target, path);
77
+ if (!(await exists(file)) || await hasEntries(file))
78
+ continue;
79
+ issues.push({
80
+ file,
81
+ message: "empty lazy workspace root detected; let the owning command materialize it with real artifacts",
82
+ });
83
+ }
76
84
  }
77
85
  async function checkWorkflowStateBoundary(target, issues) {
78
86
  const file = resolve(target, ".zsk", "workflow-state.json");
@@ -86,7 +94,7 @@ async function checkWorkflowStateBoundary(target, issues) {
86
94
  issues.push({ file, message: "workflow-state.json exists but cannot be read" });
87
95
  return;
88
96
  }
89
- for (const legacyPath of [".zsk/resources", ".zsk/plans", ".zsk/demo-sessions", ".raws", ".issues", ".playwright"]) {
97
+ for (const legacyPath of [".zsk/demo-sessions", ".raws", ".issues", ".playwright"]) {
90
98
  if (!content.includes(legacyPath))
91
99
  continue;
92
100
  issues.push({
@@ -95,6 +103,14 @@ async function checkWorkflowStateBoundary(target, issues) {
95
103
  });
96
104
  }
97
105
  }
106
+ async function hasEntries(path) {
107
+ try {
108
+ return (await readdir(path)).length > 0;
109
+ }
110
+ catch {
111
+ return true;
112
+ }
113
+ }
98
114
  async function exists(path) {
99
115
  try {
100
116
  await access(path);