diff --git a/apps/web/src/styles/home/tasks.css b/apps/web/src/styles/home/tasks.css
index ed47f4255d..90dd59ace7 100644
--- a/apps/web/src/styles/home/tasks.css
+++ b/apps/web/src/styles/home/tasks.css
@@ -567,139 +567,6 @@
cursor: progress;
}
-/* ---------- Source ingestion ---------- */
-
-.automations-ingest {
- display: flex;
- flex-direction: column;
- gap: 10px;
-}
-
-.automation-ingest-panel {
- display: flex;
- flex-direction: column;
- gap: 10px;
- padding: 12px;
- border: 1px solid var(--border);
- border-radius: 8px;
- background: var(--bg-panel);
- box-shadow: var(--shadow-xs);
-}
-
-.automation-ingest-controls,
-.automation-ingest-fields {
- display: grid;
- gap: 10px;
-}
-
-.automation-ingest-controls {
- grid-template-columns: repeat(4, minmax(0, 1fr));
-}
-
-.automation-ingest-fields {
- grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
-}
-
-.automation-ingest-field {
- display: flex;
- min-width: 0;
- flex-direction: column;
- gap: 5px;
- color: var(--text-muted);
- font-size: 11px;
- font-weight: 750;
- letter-spacing: 0;
- text-transform: uppercase;
-}
-
-.automation-ingest-field input,
-.automation-ingest-field select,
-.automation-ingest-field textarea {
- width: 100%;
- min-width: 0;
- border: 1px solid var(--border);
- border-radius: 8px;
- background-color: var(--bg-subtle);
- color: var(--text);
- font: 12.5px/1.4 var(--font, system-ui);
-}
-
-.automation-ingest-field input,
-.automation-ingest-field select {
- height: 34px;
- padding: 0 10px;
-}
-
-.automation-ingest-field textarea {
- min-height: 116px;
- padding: 10px;
- resize: vertical;
-}
-
-.automation-ingest-field input:focus,
-.automation-ingest-field select:focus,
-.automation-ingest-field textarea:focus {
- outline: none;
- border-color: color-mix(in srgb, var(--accent, #79a8ff) 44%, var(--border));
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #79a8ff) 14%, transparent);
-}
-
-.automation-ingest-field--body {
- text-transform: none;
-}
-
-.automation-ingest-field--body > span {
- text-transform: uppercase;
-}
-
-.automation-ingest-footer {
- display: grid;
- grid-template-columns: minmax(0, 1fr) auto;
- gap: 12px;
- align-items: end;
-}
-
-.automation-ingest-recent {
- display: flex;
- flex-wrap: wrap;
- gap: 6px;
- min-width: 0;
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-.automation-ingest-recent li {
- display: flex;
- max-width: 260px;
- min-width: 0;
- flex-direction: column;
- gap: 2px;
- padding: 7px 9px;
- border: 1px solid var(--border-soft);
- border-radius: 8px;
- background: color-mix(in srgb, var(--bg-subtle) 72%, transparent);
-}
-
-.automation-ingest-recent span,
-.automation-ingest-recent small {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.automation-ingest-recent span {
- color: var(--text);
- font-size: 12px;
- font-weight: 650;
-}
-
-.automation-ingest-recent small,
-.automation-ingest-empty {
- color: var(--text-muted);
- font-size: 11.5px;
-}
-
/* ---------- Template gallery ---------- */
.automations-templates {
@@ -1676,10 +1543,6 @@
}
@media (max-width: 960px) {
- .automation-ingest-controls {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
-
.automations-templates__grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
@@ -1705,12 +1568,6 @@
grid-template-columns: repeat(3, minmax(0, 1fr));
}
- .automation-ingest-controls,
- .automation-ingest-fields,
- .automation-ingest-footer {
- grid-template-columns: 1fr;
- }
-
.automations-templates__grid {
grid-template-columns: 1fr;
}
diff --git a/apps/web/tests/components/TasksView.templates.test.tsx b/apps/web/tests/components/TasksView.templates.test.tsx
index 14090ad6d6..41a5a1ee2b 100644
--- a/apps/web/tests/components/TasksView.templates.test.tsx
+++ b/apps/web/tests/components/TasksView.templates.test.tsx
@@ -162,113 +162,6 @@ describe('TasksView automation templates', () => {
});
});
- it('ingests pasted source content into source packets and proposals', async () => {
- const postBodies: unknown[] = [];
- let proposals: AutomationEvolutionProposal[] = [];
- let packets = [] as Array<{
- id: string;
- sourceKind: string;
- title: string;
- capturedAt: string;
- tokenStats: { originalTokens: number };
- }>;
- globalThis.fetch = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => {
- const url = input.toString();
- if (url === '/api/routines' && (!init || init.method === undefined)) {
- return new Response(JSON.stringify({ routines: [] }), {
- status: 200,
- headers: { 'content-type': 'application/json' },
- });
- }
- if (url === '/api/projects' && (!init || init.method === undefined)) {
- return new Response(JSON.stringify({ projects: [] }), {
- status: 200,
- headers: { 'content-type': 'application/json' },
- });
- }
- if (url === '/api/automation-templates' && (!init || init.method === undefined)) {
- return new Response(JSON.stringify({ templates: [daemonTemplate] }), {
- status: 200,
- headers: { 'content-type': 'application/json' },
- });
- }
- if (url === '/api/automation-proposals?status=pending-review' && (!init || init.method === undefined)) {
- return new Response(JSON.stringify({ proposals }), {
- status: 200,
- headers: { 'content-type': 'application/json' },
- });
- }
- if (url === '/api/automation-source-packets?limit=3' && (!init || init.method === undefined)) {
- return new Response(JSON.stringify({ packets }), {
- status: 200,
- headers: { 'content-type': 'application/json' },
- });
- }
- if (url === '/api/automation-ingestions' && init?.method === 'POST') {
- postBodies.push(JSON.parse(String(init.body)));
- const packet = {
- id: 'packet-1',
- sourceKind: 'repo',
- sourceRef: 'https://github.com/acme/design',
- title: 'Acme source',
- capturedAt: '2026-05-18T00:00:00.000Z',
- bodyMarkdown: 'Primary color #335CFF',
- provenance: [],
- attachments: [],
- sensitivity: 'workspace',
- capabilityHints: [],
- tokenStats: { originalTokens: 6 },
- candidateSinks: ['memory', 'design-system'],
- };
- proposals = [{ ...memoryProposal, id: 'proposal-ingested-1', title: 'Memory: Acme source' }];
- packets = [packet];
- return new Response(JSON.stringify({
- packet,
- compressionReport: {
- mode: 'balanced',
- status: 'skipped',
- beforeTokens: 6,
- afterTokens: 6,
- summary: 'Already compact',
- preservedSourcePacketId: 'packet-1',
- },
- proposals,
- }), {
- status: 200,
- headers: { 'content-type': 'application/json' },
- });
- }
- return new Response(JSON.stringify({}), { status: 404 });
- }) as typeof fetch;
-
- render();
-
- await screen.findByText('Ingest source');
- fireEvent.change(screen.getByLabelText('Title'), {
- target: { value: 'Acme source' },
- });
- fireEvent.change(screen.getByLabelText('Source ref'), {
- target: { value: 'https://github.com/acme/design' },
- });
- fireEvent.change(screen.getByLabelText('Content'), {
- target: { value: 'Primary color #335CFF' },
- });
- fireEvent.click(screen.getByRole('button', { name: /^Ingest$/i }));
-
- await waitFor(() => {
- expect(postBodies).toHaveLength(1);
- expect(postBodies[0]).toMatchObject({
- templateId: 'ingest-source-memory-tree',
- sourceKind: 'connector',
- title: 'Acme source',
- sourceRef: 'https://github.com/acme/design',
- bodyMarkdown: 'Primary color #335CFF',
- });
- expect(screen.getByText('Memory: Acme source')).toBeTruthy();
- expect(screen.getByText('Acme source')).toBeTruthy();
- });
- });
-
it('crystallizes a successful automation run into reviewable proposals', async () => {
const crystallizeCalls: string[] = [];
let proposals: AutomationEvolutionProposal[] = [];
@@ -404,7 +297,6 @@ describe('TasksView automation templates', () => {
'/api/routines/routine-1/runs/run-succeeded-1/crystallize',
]);
expect(screen.getByText('Skill: Artifact polish loop run')).toBeTruthy();
- expect(screen.getByText('Artifact polish loop run')).toBeTruthy();
});
});
});