@zhuk/spego 0.8.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +57 -2
  3. package/dist/cli/body-input.d.ts +12 -0
  4. package/dist/cli/body-input.js +27 -0
  5. package/dist/cli/body-input.js.map +1 -0
  6. package/dist/cli/commands/artifact.d.ts +8 -0
  7. package/dist/cli/commands/artifact.js +171 -0
  8. package/dist/cli/commands/artifact.js.map +1 -0
  9. package/dist/cli/commands/delivery.d.ts +7 -0
  10. package/dist/cli/commands/delivery.js +99 -0
  11. package/dist/cli/commands/delivery.js.map +1 -0
  12. package/dist/cli/commands/index-rebuild.d.ts +5 -0
  13. package/dist/cli/commands/index-rebuild.js +31 -0
  14. package/dist/cli/commands/index-rebuild.js.map +1 -0
  15. package/dist/cli/commands/meta.d.ts +6 -0
  16. package/dist/cli/commands/meta.js +60 -0
  17. package/dist/cli/commands/meta.js.map +1 -0
  18. package/dist/cli/commands/orchestrate.d.ts +6 -0
  19. package/dist/cli/commands/orchestrate.js +51 -0
  20. package/dist/cli/commands/orchestrate.js.map +1 -0
  21. package/dist/cli/commands/skills.d.ts +5 -0
  22. package/dist/cli/commands/skills.js +49 -0
  23. package/dist/cli/commands/skills.js.map +1 -0
  24. package/dist/cli/commands/view.d.ts +8 -0
  25. package/dist/cli/commands/view.js +59 -0
  26. package/dist/cli/commands/view.js.map +1 -0
  27. package/dist/cli/commands/workspace.d.ts +5 -0
  28. package/dist/cli/commands/workspace.js +61 -0
  29. package/dist/cli/commands/workspace.js.map +1 -0
  30. package/dist/cli/errors.d.ts +20 -0
  31. package/dist/cli/errors.js +55 -0
  32. package/dist/cli/errors.js.map +1 -0
  33. package/dist/cli/output.d.ts +12 -0
  34. package/dist/cli/output.js +28 -0
  35. package/dist/cli/output.js.map +1 -0
  36. package/dist/cli/render.d.ts +7 -0
  37. package/dist/cli/render.js +22 -0
  38. package/dist/cli/render.js.map +1 -1
  39. package/dist/cli/runtime.d.ts +26 -0
  40. package/dist/cli/runtime.js +48 -0
  41. package/dist/cli/runtime.js.map +1 -0
  42. package/dist/cli.d.ts +8 -0
  43. package/dist/cli.js +65 -582
  44. package/dist/cli.js.map +1 -1
  45. package/dist/commands/registry.js +12 -0
  46. package/dist/commands/registry.js.map +1 -1
  47. package/dist/errors.d.ts +1 -1
  48. package/dist/errors.js.map +1 -1
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.js +1 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/orchestration/agents.d.ts +15 -0
  53. package/dist/orchestration/agents.js +156 -0
  54. package/dist/orchestration/agents.js.map +1 -0
  55. package/dist/orchestration/artifacts.d.ts +8 -0
  56. package/dist/orchestration/artifacts.js +20 -0
  57. package/dist/orchestration/artifacts.js.map +1 -0
  58. package/dist/orchestration/client.d.ts +59 -0
  59. package/dist/orchestration/client.js +107 -0
  60. package/dist/orchestration/client.js.map +1 -0
  61. package/dist/orchestration/config.d.ts +14 -0
  62. package/dist/orchestration/config.js +45 -0
  63. package/dist/orchestration/config.js.map +1 -0
  64. package/dist/orchestration/emit.d.ts +7 -0
  65. package/dist/orchestration/emit.js +19 -0
  66. package/dist/orchestration/emit.js.map +1 -0
  67. package/dist/orchestration/engine.d.ts +23 -0
  68. package/dist/orchestration/engine.js +136 -0
  69. package/dist/orchestration/engine.js.map +1 -0
  70. package/dist/orchestration/file-gate.d.ts +19 -0
  71. package/dist/orchestration/file-gate.js +25 -0
  72. package/dist/orchestration/file-gate.js.map +1 -0
  73. package/dist/orchestration/index.d.ts +18 -0
  74. package/dist/orchestration/index.js +12 -0
  75. package/dist/orchestration/index.js.map +1 -0
  76. package/dist/orchestration/manager.d.ts +13 -0
  77. package/dist/orchestration/manager.js +26 -0
  78. package/dist/orchestration/manager.js.map +1 -0
  79. package/dist/orchestration/prompts.d.ts +10 -0
  80. package/dist/orchestration/prompts.js +71 -0
  81. package/dist/orchestration/prompts.js.map +1 -0
  82. package/dist/orchestration/scheduler.d.ts +18 -0
  83. package/dist/orchestration/scheduler.js +49 -0
  84. package/dist/orchestration/scheduler.js.map +1 -0
  85. package/dist/orchestration/schema.d.ts +12 -0
  86. package/dist/orchestration/schema.js +78 -0
  87. package/dist/orchestration/schema.js.map +1 -0
  88. package/dist/orchestration/tiers.d.ts +14 -0
  89. package/dist/orchestration/tiers.js +57 -0
  90. package/dist/orchestration/tiers.js.map +1 -0
  91. package/dist/orchestration/types.d.ts +74 -0
  92. package/dist/orchestration/types.js +8 -0
  93. package/dist/orchestration/types.js.map +1 -0
  94. package/dist/orchestration/verifier.d.ts +14 -0
  95. package/dist/orchestration/verifier.js +66 -0
  96. package/dist/orchestration/verifier.js.map +1 -0
  97. package/dist/orchestration/worker.d.ts +16 -0
  98. package/dist/orchestration/worker.js +80 -0
  99. package/dist/orchestration/worker.js.map +1 -0
  100. package/dist/workspace/config.d.ts +69 -2
  101. package/dist/workspace/config.js +20 -0
  102. package/dist/workspace/config.js.map +1 -1
  103. package/dist/workspace/init.js +2 -0
  104. package/dist/workspace/init.js.map +1 -1
  105. package/package.json +2 -2
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Dependency-tier construction for the swarm scheduler.
3
+ *
4
+ * Uses Kahn's algorithm to group sub-tasks into tiers: tasks within a tier
5
+ * have no dependency on one another and can run in parallel. When a cycle is
6
+ * detected, the remaining tasks are emitted as single-task tiers so they run
7
+ * sequentially rather than concurrently.
8
+ */
9
+ export function buildDependencyTiers(tasks) {
10
+ const byId = new Map(tasks.map((t) => [t.id, t]));
11
+ const inDegree = new Map(tasks.map((t) => [t.id, 0]));
12
+ for (const task of tasks) {
13
+ for (const dep of task.dependsOn) {
14
+ if (inDegree.has(dep)) {
15
+ inDegree.set(task.id, (inDegree.get(task.id) ?? 0) + 1);
16
+ }
17
+ }
18
+ }
19
+ const tiers = [];
20
+ const remaining = new Set(tasks.map((t) => t.id));
21
+ let hadCycle = false;
22
+ const priorityOf = (id) => byId.get(id)?.priority ?? 0;
23
+ while (remaining.size > 0) {
24
+ const ready = [...remaining].filter((id) => (inDegree.get(id) ?? 0) === 0);
25
+ if (ready.length === 0) {
26
+ // Cycle: drain the remainder one task at a time, lowest priority first.
27
+ hadCycle = true;
28
+ const ordered = [...remaining].sort((a, b) => priorityOf(a) - priorityOf(b));
29
+ for (const id of ordered) {
30
+ const task = byId.get(id);
31
+ if (task)
32
+ tiers.push([task]);
33
+ remaining.delete(id);
34
+ }
35
+ break;
36
+ }
37
+ const tier = ready
38
+ .sort((a, b) => priorityOf(a) - priorityOf(b))
39
+ .map((id) => byId.get(id))
40
+ .filter((t) => t !== undefined);
41
+ tiers.push(tier);
42
+ for (const id of ready)
43
+ remaining.delete(id);
44
+ for (const id of remaining) {
45
+ const task = byId.get(id);
46
+ if (!task)
47
+ continue;
48
+ for (const dep of task.dependsOn) {
49
+ if (ready.includes(dep)) {
50
+ inDegree.set(id, (inDegree.get(id) ?? 0) - 1);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ return { tiers, hadCycle };
56
+ }
57
+ //# sourceMappingURL=tiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiers.js","sourceRoot":"","sources":["../../src/orchestration/tiers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Core data models for the ultracode multi-agent orchestration pipeline.
3
+ *
4
+ * Internal models use camelCase. The manager emits a snake_case JSON contract
5
+ * (see `schema.ts`) which is normalized into these shapes before execution.
6
+ */
7
+ export type ExecutionMode = 'sequential' | 'parallel' | 'adaptive';
8
+ export interface SubTask {
9
+ id: string;
10
+ title: string;
11
+ description: string;
12
+ /** Relative paths the worker may modify. Enforced by the file gate. */
13
+ files: string[];
14
+ acceptanceCriteria: string[];
15
+ dependsOn: string[];
16
+ priority: number;
17
+ modelOverride?: string;
18
+ }
19
+ export interface TaskBreakdown {
20
+ goal: string;
21
+ contextSummary: string;
22
+ executionMode: ExecutionMode;
23
+ testCommand: string;
24
+ language: string;
25
+ subtasks: SubTask[];
26
+ }
27
+ /** A single changed-file entry from an OpenCode session diff. */
28
+ export interface DiffEntry {
29
+ path: string;
30
+ [key: string]: unknown;
31
+ }
32
+ export interface SubtaskResult {
33
+ subtaskId: string;
34
+ sessionId: string;
35
+ success: boolean;
36
+ summary: string;
37
+ changedFiles: string[];
38
+ /** Files reverted by the file gate because they were outside the allow-list. */
39
+ gateViolations: string[];
40
+ error?: string;
41
+ }
42
+ export interface Verdict {
43
+ passed: boolean;
44
+ testOutput: string;
45
+ failingCriteria: string[];
46
+ regressions: string[];
47
+ notes: string;
48
+ skipped?: boolean;
49
+ }
50
+ export interface OrchestrationModels {
51
+ manager: string;
52
+ worker: string;
53
+ verifier: string;
54
+ fallback: string;
55
+ }
56
+ /** Fully resolved orchestration runtime settings (config + env overrides). */
57
+ export interface OrchestrationRuntimeConfig {
58
+ serverUrl: string;
59
+ models: OrchestrationModels;
60
+ maxParallel: number;
61
+ workDir: string;
62
+ username?: string;
63
+ password?: string;
64
+ }
65
+ export interface OrchestrationOutcome {
66
+ changeName: string;
67
+ goal: string;
68
+ executionMode: ExecutionMode;
69
+ tasksTotal: number;
70
+ tasksSucceeded: number;
71
+ results: SubtaskResult[];
72
+ verdict: Verdict;
73
+ warnings: string[];
74
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Core data models for the ultracode multi-agent orchestration pipeline.
3
+ *
4
+ * Internal models use camelCase. The manager emits a snake_case JSON contract
5
+ * (see `schema.ts`) which is normalized into these shapes before execution.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/orchestration/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Verifier step: run the breakdown test command, check acceptance criteria,
3
+ * and emit a structured verdict. `passed` is true only when the test command
4
+ * succeeds and all criteria are met. A missing test command fails the verdict
5
+ * without consulting the backend.
6
+ */
7
+ import type { OpenCodeApi } from './client.js';
8
+ import type { SubtaskResult, TaskBreakdown, Verdict } from './types.js';
9
+ export interface VerifierOptions {
10
+ model: string;
11
+ agentName: string;
12
+ workDirAbs: string;
13
+ }
14
+ export declare function runVerifier(api: OpenCodeApi, breakdown: TaskBreakdown, results: SubtaskResult[], opts: VerifierOptions): Promise<Verdict>;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Verifier step: run the breakdown test command, check acceptance criteria,
3
+ * and emit a structured verdict. `passed` is true only when the test command
4
+ * succeeds and all criteria are met. A missing test command fails the verdict
5
+ * without consulting the backend.
6
+ */
7
+ import { extractText } from './client.js';
8
+ import { VERIFIER_SYSTEM_PROMPT, renderVerifierPrompt } from './prompts.js';
9
+ import { saveArtifact } from './artifacts.js';
10
+ function coerceVerdict(raw) {
11
+ const obj = (raw && typeof raw === 'object' ? raw : {});
12
+ return {
13
+ passed: obj.passed === true,
14
+ testOutput: typeof obj.test_output === 'string' ? obj.test_output : '',
15
+ failingCriteria: Array.isArray(obj.failing_criteria) ? obj.failing_criteria : [],
16
+ regressions: Array.isArray(obj.regressions) ? obj.regressions : [],
17
+ notes: typeof obj.notes === 'string' ? obj.notes : '',
18
+ };
19
+ }
20
+ export async function runVerifier(api, breakdown, results, opts) {
21
+ if (!breakdown.testCommand.trim()) {
22
+ const verdict = {
23
+ passed: false,
24
+ testOutput: '',
25
+ failingCriteria: [],
26
+ regressions: [],
27
+ notes: 'No test command provided in the breakdown; cannot verify.',
28
+ };
29
+ await saveArtifact(opts.workDirAbs, 'verdict.json', verdict);
30
+ return verdict;
31
+ }
32
+ const payload = {
33
+ goal: breakdown.goal,
34
+ test_command: breakdown.testCommand,
35
+ subtask_results: results.map((r) => ({
36
+ id: r.subtaskId,
37
+ success: r.success,
38
+ summary_tail: r.summary.slice(-500),
39
+ error: r.error,
40
+ changed_files: r.changedFiles,
41
+ })),
42
+ };
43
+ const session = await api.createSession('spego-orchestrate-verifier');
44
+ try {
45
+ const response = await api.sendMessage(session.id, {
46
+ text: renderVerifierPrompt(payload),
47
+ model: opts.model,
48
+ agent: opts.agentName,
49
+ system: VERIFIER_SYSTEM_PROMPT,
50
+ });
51
+ let parsed;
52
+ try {
53
+ parsed = JSON.parse(extractText(response));
54
+ }
55
+ catch {
56
+ parsed = { passed: false, notes: 'Verifier returned non-JSON output.' };
57
+ }
58
+ const verdict = coerceVerdict(parsed);
59
+ await saveArtifact(opts.workDirAbs, 'verdict.json', verdict);
60
+ return verdict;
61
+ }
62
+ finally {
63
+ await api.deleteSession(session.id).catch(() => undefined);
64
+ }
65
+ }
66
+ //# sourceMappingURL=verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/orchestration/verifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Worker step: run one sub-task in an isolated session, parse the status
3
+ * marker, collect the session diff, and enforce the file gate. Out-of-scope
4
+ * edits are reverted and fail the sub-task.
5
+ */
6
+ import type { OpenCodeApi } from './client.js';
7
+ import type { SubTask, SubtaskResult, TaskBreakdown } from './types.js';
8
+ export interface WorkerOptions {
9
+ model: string;
10
+ agentName: string;
11
+ projectRoot: string;
12
+ workDirAbs: string;
13
+ /** Override for the revert mechanism (defaults to `git checkout --`). */
14
+ revert?: (path: string) => Promise<void> | void;
15
+ }
16
+ export declare function runWorker(api: OpenCodeApi, task: SubTask, breakdown: TaskBreakdown, opts: WorkerOptions): Promise<SubtaskResult>;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Worker step: run one sub-task in an isolated session, parse the status
3
+ * marker, collect the session diff, and enforce the file gate. Out-of-scope
4
+ * edits are reverted and fail the sub-task.
5
+ */
6
+ import { execFile as execFileCb } from 'node:child_process';
7
+ import { promisify } from 'node:util';
8
+ import { unlink } from 'node:fs/promises';
9
+ import { extractText } from './client.js';
10
+ import { renderWorkerPrompt } from './prompts.js';
11
+ import { enforceFileGate } from './file-gate.js';
12
+ import { saveArtifact } from './artifacts.js';
13
+ const execFile = promisify(execFileCb);
14
+ const SUCCESS_MARKER = 'ULTRAWORKER_STATUS: SUCCESS';
15
+ const FAILURE_MARKER = 'ULTRAWORKER_STATUS: FAILED';
16
+ function extractFailureReason(text) {
17
+ const idx = text.indexOf(FAILURE_MARKER);
18
+ if (idx === -1)
19
+ return 'unknown';
20
+ return text
21
+ .slice(idx + FAILURE_MARKER.length)
22
+ .replace(/^[\s—-]+/, '')
23
+ .trim()
24
+ .slice(0, 300);
25
+ }
26
+ async function revertFile(projectRoot, filePath) {
27
+ await execFile('git', ['checkout', 'HEAD', '--', filePath], { cwd: projectRoot }).catch(() => undefined);
28
+ try {
29
+ await execFile('git', ['ls-files', '--error-unmatch', filePath], { cwd: projectRoot });
30
+ }
31
+ catch {
32
+ await unlink(filePath).catch(() => undefined);
33
+ }
34
+ }
35
+ export async function runWorker(api, task, breakdown, opts) {
36
+ const session = await api.createSession(`spego-orchestrate-worker-${task.id}`);
37
+ const revert = opts.revert ?? ((p) => revertFile(opts.projectRoot, p));
38
+ let result;
39
+ try {
40
+ const response = await api.sendMessage(session.id, {
41
+ text: renderWorkerPrompt(task, breakdown),
42
+ model: task.modelOverride ?? opts.model,
43
+ agent: opts.agentName,
44
+ });
45
+ const text = extractText(response);
46
+ const reportedSuccess = text.includes(SUCCESS_MARKER);
47
+ const diff = await api.getSessionDiff(session.id);
48
+ const changedFiles = diff.map((d) => d.path).filter((p) => typeof p === 'string');
49
+ const { violations } = await enforceFileGate({ changedPaths: changedFiles, allowed: task.files, revert });
50
+ const success = reportedSuccess && violations.length === 0;
51
+ const error = success
52
+ ? undefined
53
+ : violations.length > 0
54
+ ? `file gate violations: ${violations.join(', ')}`
55
+ : extractFailureReason(text);
56
+ result = {
57
+ subtaskId: task.id,
58
+ sessionId: session.id,
59
+ success,
60
+ summary: text.slice(-2000),
61
+ changedFiles: changedFiles.filter((p) => !violations.includes(p)),
62
+ gateViolations: violations,
63
+ error,
64
+ };
65
+ }
66
+ catch (err) {
67
+ result = {
68
+ subtaskId: task.id,
69
+ sessionId: session.id,
70
+ success: false,
71
+ summary: '',
72
+ changedFiles: [],
73
+ gateViolations: [],
74
+ error: err instanceof Error ? err.message : String(err),
75
+ };
76
+ }
77
+ await saveArtifact(opts.workDirAbs, `result_${task.id}.json`, result);
78
+ return result;
79
+ }
80
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/orchestration/worker.ts"],"names":[],"mappings":"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"}
@@ -20,24 +20,91 @@ export declare const workspaceConfigSchema: z.ZodObject<{
20
20
  options?: Record<string, unknown> | undefined;
21
21
  name?: string | undefined;
22
22
  }>>;
23
+ /**
24
+ * Multi-agent orchestration backend (OpenCode). Model identifiers default
25
+ * to empty — they MUST be supplied here or via SPEGO_ORCHESTRATION_MODEL_*.
26
+ */
27
+ orchestration: z.ZodDefault<z.ZodObject<{
28
+ serverUrl: z.ZodDefault<z.ZodString>;
29
+ models: z.ZodDefault<z.ZodObject<{
30
+ manager: z.ZodDefault<z.ZodString>;
31
+ worker: z.ZodDefault<z.ZodString>;
32
+ verifier: z.ZodDefault<z.ZodString>;
33
+ fallback: z.ZodDefault<z.ZodString>;
34
+ }, "strip", z.ZodTypeAny, {
35
+ manager: string;
36
+ worker: string;
37
+ verifier: string;
38
+ fallback: string;
39
+ }, {
40
+ manager?: string | undefined;
41
+ worker?: string | undefined;
42
+ verifier?: string | undefined;
43
+ fallback?: string | undefined;
44
+ }>>;
45
+ maxParallel: z.ZodDefault<z.ZodNumber>;
46
+ workDir: z.ZodDefault<z.ZodString>;
47
+ }, "strip", z.ZodTypeAny, {
48
+ serverUrl: string;
49
+ models: {
50
+ manager: string;
51
+ worker: string;
52
+ verifier: string;
53
+ fallback: string;
54
+ };
55
+ maxParallel: number;
56
+ workDir: string;
57
+ }, {
58
+ serverUrl?: string | undefined;
59
+ models?: {
60
+ manager?: string | undefined;
61
+ worker?: string | undefined;
62
+ verifier?: string | undefined;
63
+ fallback?: string | undefined;
64
+ } | undefined;
65
+ maxParallel?: number | undefined;
66
+ workDir?: string | undefined;
67
+ }>>;
23
68
  }, "strict", z.ZodTypeAny, {
24
- version: 1;
25
69
  agents: string[];
26
70
  demo: boolean;
71
+ version: 1;
27
72
  extraArtifactTypes: string[];
28
73
  deliveryAdapter: {
29
74
  options: Record<string, unknown>;
30
75
  name: string;
31
76
  };
77
+ orchestration: {
78
+ serverUrl: string;
79
+ models: {
80
+ manager: string;
81
+ worker: string;
82
+ verifier: string;
83
+ fallback: string;
84
+ };
85
+ maxParallel: number;
86
+ workDir: string;
87
+ };
32
88
  }, {
33
- version?: 1 | undefined;
34
89
  agents?: string[] | undefined;
35
90
  demo?: boolean | undefined;
91
+ version?: 1 | undefined;
36
92
  extraArtifactTypes?: string[] | undefined;
37
93
  deliveryAdapter?: {
38
94
  options?: Record<string, unknown> | undefined;
39
95
  name?: string | undefined;
40
96
  } | undefined;
97
+ orchestration?: {
98
+ serverUrl?: string | undefined;
99
+ models?: {
100
+ manager?: string | undefined;
101
+ worker?: string | undefined;
102
+ verifier?: string | undefined;
103
+ fallback?: string | undefined;
104
+ } | undefined;
105
+ maxParallel?: number | undefined;
106
+ workDir?: string | undefined;
107
+ } | undefined;
41
108
  }>;
42
109
  export type WorkspaceConfig = z.infer<typeof workspaceConfigSchema>;
43
110
  export declare function defaultConfig(overrides?: Partial<WorkspaceConfig>): WorkspaceConfig;
@@ -20,6 +20,26 @@ export const workspaceConfigSchema = z
20
20
  name: z.string().default('openspec'),
21
21
  options: z.record(z.string(), z.unknown()).default({}),
22
22
  }).default({ name: 'openspec', options: {} }),
23
+ /**
24
+ * Multi-agent orchestration backend (OpenCode). Model identifiers default
25
+ * to empty — they MUST be supplied here or via SPEGO_ORCHESTRATION_MODEL_*.
26
+ */
27
+ orchestration: z.object({
28
+ serverUrl: z.string().default('http://127.0.0.1:4096'),
29
+ models: z.object({
30
+ manager: z.string().default(''),
31
+ worker: z.string().default(''),
32
+ verifier: z.string().default(''),
33
+ fallback: z.string().default(''),
34
+ }).default({ manager: '', worker: '', verifier: '', fallback: '' }),
35
+ maxParallel: z.number().int().positive().default(4),
36
+ workDir: z.string().default('.spego/orchestration'),
37
+ }).default({
38
+ serverUrl: 'http://127.0.0.1:4096',
39
+ models: { manager: '', worker: '', verifier: '', fallback: '' },
40
+ maxParallel: 4,
41
+ workDir: '.spego/orchestration',
42
+ }),
23
43
  })
24
44
  .strict();
25
45
  export function defaultConfig(overrides = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/workspace/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/workspace/config.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { BUILTIN_ARTIFACT_TYPES } from '../artifacts/types.js';
6
6
  import { SpegoError } from '../errors.js';
7
7
  import { openIndexDb, ensureIndexSchema, closeIndexDb } from '../index/db.js';
8
8
  import { generateAll } from '../generator/index.js';
9
+ import { emitOrchestrationAssets } from '../orchestration/emit.js';
9
10
  async function ensureDir(dir, created) {
10
11
  try {
11
12
  await fs.mkdir(dir, { recursive: false });
@@ -79,6 +80,7 @@ export async function initWorkspace(options = {}) {
79
80
  if (config.agents.length > 0) {
80
81
  generationReports = await generateAll(projectRoot, config.agents);
81
82
  }
83
+ generationReports.push(await emitOrchestrationAssets(projectRoot));
82
84
  return {
83
85
  projectRoot: paths.projectRoot,
84
86
  workspaceRoot: paths.workspaceRoot,
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/workspace/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/workspace/init.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhuk/spego",
3
- "version": "0.8.0",
3
+ "version": "0.10.1",
4
4
  "description": "Agent-first product orchestration: markdown-first artifact engine with SQLite indexing.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,7 +14,7 @@
14
14
  "CHANGELOG.md"
15
15
  ],
16
16
  "scripts": {
17
- "build": "tsc -p tsconfig.json",
17
+ "build": "tsc -p tsconfig.json && node scripts/make-cli-executable.mjs",
18
18
  "spego": "tsx src/cli.ts",
19
19
  "pretest": "npm run build",
20
20
  "test": "vitest run",