agentic-orchestrator 0.2.0 → 0.2.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.
- package/apps/control-plane/src/cli/dashboard-command-handler.ts +1 -0
- package/dist/apps/control-plane/cli/dashboard-command-handler.js +1 -0
- package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
- package/package.json +1 -1
- package/packages/web-dashboard/src/app/launch/page.tsx +6 -1
- package/packages/web-dashboard/src/components/launch/launch-draft-card.tsx +90 -67
- package/packages/web-dashboard/src/lib/launch-contracts.ts +1 -1
- package/packages/web-dashboard/src/lib/launch-markdown.ts +0 -4
- package/packages/web-dashboard/src/lib/orchestrator-tools.ts +36 -1
- package/packages/web-dashboard/test/components/launch-draft-card.spec.tsx +60 -0
- package/packages/web-dashboard/test/lib/launch-markdown.spec.ts +1 -1
|
@@ -100,6 +100,7 @@ export class DashboardCommandHandler {
|
|
|
100
100
|
PORT: String(port),
|
|
101
101
|
HOSTNAME: '0.0.0.0',
|
|
102
102
|
AOP_ROOT: projectRoot,
|
|
103
|
+
AOP_PACKAGE_ROOT: repoRoot,
|
|
103
104
|
AOP_DASHBOARD_RUNTIME_INSTANCE_ID: instanceId,
|
|
104
105
|
};
|
|
105
106
|
await ensureDashboardDependencies(repoRoot, env);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-command-handler.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/cli/dashboard-command-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dashboard-command-handler.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/cli/dashboard-command-handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -51,15 +51,20 @@ function createDraftId(): string {
|
|
|
51
51
|
return `launch-draft-${draftSequence}`;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
function stripMarkdownExtension(filename: string): string {
|
|
55
|
+
return filename.endsWith('.md') ? filename.slice(0, -3) : filename;
|
|
56
|
+
}
|
|
57
|
+
|
|
54
58
|
function createDraft(
|
|
55
59
|
name: string,
|
|
56
60
|
markdown = '',
|
|
57
61
|
sourceType: 'upload' | 'paste' = 'paste',
|
|
58
62
|
): LaunchDraftCardState {
|
|
63
|
+
const displayName = sourceType === 'upload' ? stripMarkdownExtension(name) : name;
|
|
59
64
|
return {
|
|
60
65
|
draft_id: createDraftId(),
|
|
61
66
|
source_type: sourceType,
|
|
62
|
-
name,
|
|
67
|
+
name: displayName,
|
|
63
68
|
markdown,
|
|
64
69
|
source_path: name,
|
|
65
70
|
feature_id: null,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import React from 'react';
|
|
3
|
+
import React, { useState } from 'react';
|
|
4
4
|
import styles from '@/styles/dashboard.module.css';
|
|
5
5
|
|
|
6
6
|
export interface LaunchDraftCardState {
|
|
@@ -21,6 +21,7 @@ export interface LaunchDraftCardState {
|
|
|
21
21
|
interface LaunchDraftCardProps {
|
|
22
22
|
draft: LaunchDraftCardState;
|
|
23
23
|
submitting: boolean;
|
|
24
|
+
defaultExpanded?: boolean;
|
|
24
25
|
onChange: (draftId: string, field: 'name' | 'markdown', value: string) => void;
|
|
25
26
|
onRemove: (draftId: string) => void;
|
|
26
27
|
onSubmit: (draftId: string) => void;
|
|
@@ -29,26 +30,41 @@ interface LaunchDraftCardProps {
|
|
|
29
30
|
export function LaunchDraftCard({
|
|
30
31
|
draft,
|
|
31
32
|
submitting,
|
|
33
|
+
defaultExpanded = false,
|
|
32
34
|
onChange,
|
|
33
35
|
onRemove,
|
|
34
36
|
onSubmit,
|
|
35
37
|
}: LaunchDraftCardProps) {
|
|
38
|
+
const [expanded, setExpanded] = useState(defaultExpanded);
|
|
36
39
|
const canSubmit = draft.errors.length === 0 && draft.markdown.trim().length > 0 && !submitting;
|
|
40
|
+
const issueCount = draft.errors.length + draft.warnings.length;
|
|
37
41
|
|
|
38
42
|
return (
|
|
39
43
|
<article className={styles.launchDraftCard}>
|
|
40
|
-
<div className={styles.
|
|
41
|
-
<div>
|
|
42
|
-
<h2 className={styles.
|
|
43
|
-
<
|
|
44
|
-
{
|
|
45
|
-
|
|
44
|
+
<div className={styles.collapsibleSummary} onClick={() => setExpanded((prev) => !prev)}>
|
|
45
|
+
<div className={styles.collapsibleSummaryTitleGroup}>
|
|
46
|
+
<h2 className={styles.collapsibleSummaryHeading}>{draft.name}</h2>
|
|
47
|
+
<div className={styles.collapsibleSummaryMeta}>
|
|
48
|
+
{issueCount > 0 ? (
|
|
49
|
+
<span className={`${styles.badge} ${styles.badgeFail}`}>
|
|
50
|
+
{issueCount} issue{issueCount === 1 ? '' : 's'}
|
|
51
|
+
</span>
|
|
52
|
+
) : (
|
|
53
|
+
<span className={`${styles.badge} ${styles.badgePass}`}>Ready</span>
|
|
54
|
+
)}
|
|
55
|
+
{draft.feature_id ? (
|
|
56
|
+
<span className={`${styles.badge} ${styles.badgeNeutral}`}>{draft.feature_id}</span>
|
|
57
|
+
) : null}
|
|
58
|
+
</div>
|
|
46
59
|
</div>
|
|
47
60
|
<div className={styles.inlineActions}>
|
|
48
61
|
<button
|
|
49
62
|
type="button"
|
|
50
63
|
className={styles.button}
|
|
51
|
-
onClick={() =>
|
|
64
|
+
onClick={(event) => {
|
|
65
|
+
event.stopPropagation();
|
|
66
|
+
onSubmit(draft.draft_id);
|
|
67
|
+
}}
|
|
52
68
|
disabled={!canSubmit}
|
|
53
69
|
>
|
|
54
70
|
{submitting ? 'Submitting...' : 'Submit Draft'}
|
|
@@ -56,76 +72,83 @@ export function LaunchDraftCard({
|
|
|
56
72
|
<button
|
|
57
73
|
type="button"
|
|
58
74
|
className={`${styles.button} ${styles.buttonGhost}`}
|
|
59
|
-
onClick={() =>
|
|
75
|
+
onClick={(event) => {
|
|
76
|
+
event.stopPropagation();
|
|
77
|
+
onRemove(draft.draft_id);
|
|
78
|
+
}}
|
|
60
79
|
>
|
|
61
80
|
Remove
|
|
62
81
|
</button>
|
|
63
82
|
</div>
|
|
64
83
|
</div>
|
|
65
84
|
|
|
66
|
-
|
|
67
|
-
<div className={styles.
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
85
|
+
{expanded ? (
|
|
86
|
+
<div className={styles.collapsibleBody}>
|
|
87
|
+
<div className={styles.launchDraftGrid}>
|
|
88
|
+
<div className={styles.section}>
|
|
89
|
+
<label className={styles.label} htmlFor={`launch-name-${draft.draft_id}`}>
|
|
90
|
+
Draft name
|
|
91
|
+
</label>
|
|
92
|
+
<input
|
|
93
|
+
id={`launch-name-${draft.draft_id}`}
|
|
94
|
+
className={styles.input}
|
|
95
|
+
value={draft.name}
|
|
96
|
+
onChange={(event) => onChange(draft.draft_id, 'name', event.target.value)}
|
|
97
|
+
/>
|
|
77
98
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
<label className={styles.label} htmlFor={`launch-markdown-${draft.draft_id}`}>
|
|
100
|
+
Markdown
|
|
101
|
+
</label>
|
|
102
|
+
<textarea
|
|
103
|
+
id={`launch-markdown-${draft.draft_id}`}
|
|
104
|
+
className={styles.textarea}
|
|
105
|
+
rows={18}
|
|
106
|
+
value={draft.markdown}
|
|
107
|
+
onChange={(event) => onChange(draft.draft_id, 'markdown', event.target.value)}
|
|
108
|
+
placeholder="# Feature name"
|
|
109
|
+
/>
|
|
110
|
+
</div>
|
|
90
111
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
112
|
+
<div className={styles.section}>
|
|
113
|
+
<div className={styles.badgeRow}>
|
|
114
|
+
<span className={`${styles.badge} ${styles.badgeNeutral}`}>
|
|
115
|
+
{draft.preview_mode === 'fallback' ? 'Fallback Preview' : 'Rendered Preview'}
|
|
116
|
+
</span>
|
|
117
|
+
{draft.canonical_spec_path ? (
|
|
118
|
+
<span className={`${styles.badge} ${styles.badgeNeutral}`}>
|
|
119
|
+
{draft.canonical_spec_path}
|
|
120
|
+
</span>
|
|
121
|
+
) : null}
|
|
122
|
+
{draft.last_request_id ? (
|
|
123
|
+
<span className={`${styles.badge} ${styles.badgePass}`}>
|
|
124
|
+
Request {draft.last_request_id}
|
|
125
|
+
</span>
|
|
126
|
+
) : null}
|
|
127
|
+
</div>
|
|
107
128
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
129
|
+
{draft.errors.length > 0 ? (
|
|
130
|
+
<div className={styles.banner}>
|
|
131
|
+
{draft.errors.map((error) => (
|
|
132
|
+
<p key={error}>{error}</p>
|
|
133
|
+
))}
|
|
134
|
+
</div>
|
|
135
|
+
) : null}
|
|
136
|
+
{draft.warnings.length > 0 ? (
|
|
137
|
+
<div className={styles.banner}>
|
|
138
|
+
{draft.warnings.map((warning) => (
|
|
139
|
+
<p key={warning}>{warning}</p>
|
|
140
|
+
))}
|
|
141
|
+
</div>
|
|
142
|
+
) : null}
|
|
122
143
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
144
|
+
<div
|
|
145
|
+
className={`${styles.launchPreview} ${styles.markdownPreview}`}
|
|
146
|
+
dangerouslySetInnerHTML={{ __html: draft.preview_html }}
|
|
147
|
+
/>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
127
150
|
</div>
|
|
128
|
-
|
|
151
|
+
) : null}
|
|
129
152
|
</article>
|
|
130
153
|
);
|
|
131
154
|
}
|
|
@@ -57,7 +57,7 @@ export function validateLaunchDraftInput(draft: LaunchDraftInput): string[] {
|
|
|
57
57
|
errors.push('Draft markdown is required.');
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
if (draft.source_type === 'upload' && !hasSupportedExtension(draft.name)) {
|
|
60
|
+
if (draft.source_type === 'upload' && !hasSupportedExtension(draft.source_path ?? draft.name)) {
|
|
61
61
|
errors.push('Only .md draft uploads are supported.');
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -86,10 +86,6 @@ export interface MarkdownPreviewResult {
|
|
|
86
86
|
export function renderLaunchMarkdown(markdown: string): MarkdownPreviewResult {
|
|
87
87
|
const warnings: string[] = [];
|
|
88
88
|
|
|
89
|
-
if (markdown.includes('<') || markdown.includes('>')) {
|
|
90
|
-
warnings.push('Raw HTML was escaped in preview.');
|
|
91
|
-
}
|
|
92
|
-
|
|
93
89
|
const fenceCount = (markdown.match(/```/g) ?? []).length;
|
|
94
90
|
if (fenceCount % 2 !== 0) {
|
|
95
91
|
return {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { pathToFileURL } from 'node:url';
|
|
4
5
|
import { getAopRoot } from '@/lib/aop-client.js';
|
|
@@ -329,13 +330,47 @@ function resolveBlockedRetryStatus(mode: string): 'building' | 'qa' | 'ready_to_
|
|
|
329
330
|
return null;
|
|
330
331
|
}
|
|
331
332
|
|
|
333
|
+
function resolveControlPlaneModulePath(): string {
|
|
334
|
+
const distRelative = path.join('dist', 'apps', 'control-plane', 'index.js');
|
|
335
|
+
|
|
336
|
+
// Strategy 1: Explicit package root env var (set by `aop dashboard`)
|
|
337
|
+
const packageRoot = process.env.AOP_PACKAGE_ROOT;
|
|
338
|
+
if (packageRoot) {
|
|
339
|
+
const candidate = path.join(packageRoot, distRelative);
|
|
340
|
+
if (existsSync(candidate)) {
|
|
341
|
+
return candidate;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Strategy 2: AOP_ROOT / cwd (works when run from the monorepo directly)
|
|
346
|
+
const fromAopRoot = path.join(getAopRoot(), distRelative);
|
|
347
|
+
if (existsSync(fromAopRoot)) {
|
|
348
|
+
return fromAopRoot;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// Strategy 3: Resolve from globally installed package
|
|
352
|
+
try {
|
|
353
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
354
|
+
const pkgJson = require.resolve('agentic-orchestrator/package.json');
|
|
355
|
+
const candidate = path.join(path.dirname(pkgJson), distRelative);
|
|
356
|
+
if (existsSync(candidate)) {
|
|
357
|
+
return candidate;
|
|
358
|
+
}
|
|
359
|
+
} catch {
|
|
360
|
+
// package not resolvable via require — continue
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Fallback: return the AOP_ROOT-based path (will fail at import time with a clear error)
|
|
364
|
+
return fromAopRoot;
|
|
365
|
+
}
|
|
366
|
+
|
|
332
367
|
async function loadRuntimeBridge(): Promise<RuntimeBridge> {
|
|
333
368
|
if (runtimeBridgePromise) {
|
|
334
369
|
return runtimeBridgePromise;
|
|
335
370
|
}
|
|
336
371
|
|
|
337
372
|
runtimeBridgePromise = (async () => {
|
|
338
|
-
const modulePath =
|
|
373
|
+
const modulePath = resolveControlPlaneModulePath();
|
|
339
374
|
const moduleUrl = pathToFileURL(modulePath).href;
|
|
340
375
|
const loaded = (await import(/* webpackIgnore: true */ moduleUrl)) as Partial<RuntimeBridge>;
|
|
341
376
|
if (
|
|
@@ -39,6 +39,7 @@ across lines.
|
|
|
39
39
|
last_request_id: null,
|
|
40
40
|
}}
|
|
41
41
|
submitting={false}
|
|
42
|
+
defaultExpanded
|
|
42
43
|
onChange={vi.fn()}
|
|
43
44
|
onRemove={vi.fn()}
|
|
44
45
|
onSubmit={vi.fn()}
|
|
@@ -51,4 +52,63 @@ across lines.
|
|
|
51
52
|
expect(markup).toContain('<ol>');
|
|
52
53
|
expect(markup).toContain('<code>const x = 1;</code>');
|
|
53
54
|
});
|
|
55
|
+
|
|
56
|
+
it('renders collapsed by default showing only name and issue count', () => {
|
|
57
|
+
const markup = renderToStaticMarkup(
|
|
58
|
+
<LaunchDraftCard
|
|
59
|
+
draft={{
|
|
60
|
+
draft_id: 'draft-2',
|
|
61
|
+
source_type: 'paste',
|
|
62
|
+
name: 'Collapsed Draft',
|
|
63
|
+
markdown: '# Draft',
|
|
64
|
+
source_path: 'Collapsed Draft',
|
|
65
|
+
feature_id: null,
|
|
66
|
+
canonical_spec_path: null,
|
|
67
|
+
preview_html: '<p>Preview</p>',
|
|
68
|
+
preview_mode: 'rendered',
|
|
69
|
+
warnings: [],
|
|
70
|
+
errors: ['Some validation error'],
|
|
71
|
+
last_request_id: null,
|
|
72
|
+
}}
|
|
73
|
+
submitting={false}
|
|
74
|
+
onChange={vi.fn()}
|
|
75
|
+
onRemove={vi.fn()}
|
|
76
|
+
onSubmit={vi.fn()}
|
|
77
|
+
/>,
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
expect(markup).toContain('Collapsed Draft');
|
|
81
|
+
expect(markup).toContain('1 issue');
|
|
82
|
+
expect(markup).not.toContain('launchPreview');
|
|
83
|
+
expect(markup).not.toContain('<textarea');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('shows Ready badge when no issues and collapsed', () => {
|
|
87
|
+
const markup = renderToStaticMarkup(
|
|
88
|
+
<LaunchDraftCard
|
|
89
|
+
draft={{
|
|
90
|
+
draft_id: 'draft-3',
|
|
91
|
+
source_type: 'paste',
|
|
92
|
+
name: 'Clean Draft',
|
|
93
|
+
markdown: '# Draft',
|
|
94
|
+
source_path: 'Clean Draft',
|
|
95
|
+
feature_id: 'clean_draft',
|
|
96
|
+
canonical_spec_path: '.aop/features/clean_draft/spec.md',
|
|
97
|
+
preview_html: '<p>Preview</p>',
|
|
98
|
+
preview_mode: 'rendered',
|
|
99
|
+
warnings: [],
|
|
100
|
+
errors: [],
|
|
101
|
+
last_request_id: null,
|
|
102
|
+
}}
|
|
103
|
+
submitting={false}
|
|
104
|
+
onChange={vi.fn()}
|
|
105
|
+
onRemove={vi.fn()}
|
|
106
|
+
onSubmit={vi.fn()}
|
|
107
|
+
/>,
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
expect(markup).toContain('Clean Draft');
|
|
111
|
+
expect(markup).toContain('Ready');
|
|
112
|
+
expect(markup).not.toContain('launchPreview');
|
|
113
|
+
});
|
|
54
114
|
});
|
|
@@ -28,7 +28,7 @@ across two lines.
|
|
|
28
28
|
'<script>alert(1)</script>\n\n[Docs](https://example.com/docs)',
|
|
29
29
|
);
|
|
30
30
|
|
|
31
|
-
expect(rendered.warnings).
|
|
31
|
+
expect(rendered.warnings).toHaveLength(0);
|
|
32
32
|
expect(rendered.html).toContain('<script>alert(1)</script>');
|
|
33
33
|
expect(rendered.html).toContain('href="https://example.com/docs"');
|
|
34
34
|
expect(rendered.html).toContain('target="_blank"');
|