@anchrd/intel-ui 0.18.0 → 0.19.0
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/package.json +2 -9
- package/src/app/app-tree/app-tree.tsx +59 -147
- package/src/app/settings-dialog/settings-dialog.tsx +10 -32
- package/src/data/intel-data-provider/intel-data-provider.ts +0 -163
- package/src/data/intel-data-provider/intel-data-provider.types.ts +0 -100
- package/src/entry-picker/entry-picker.tsx +6 -6
- package/src/i18n/de.json +6 -217
- package/src/i18n/en.json +6 -217
- package/src/i18n/es.json +6 -217
- package/src/import-bundle/import-bundle.tsx +152 -0
- package/src/kind-icon.ts +1 -15
- package/src/main.tsx +7 -10
- package/src/node-table/node-table.tsx +2 -2
- package/src/nodes/nodes.tsx +0 -34
- package/src/resource-menu/resource-menu.tsx +42 -14
- package/src/section-hint/section-hint.tsx +2 -2
- package/src/title-row/title-row.tsx +5 -22
- package/src/tools/tools.tsx +0 -2
- package/vite.config.ts +0 -4
- package/src/agent/agent-avatar/agent-avatar.tsx +0 -34
- package/src/agent/agent-calendar/agent-calendar.tsx +0 -160
- package/src/agent/agent-chat/agent-chat.tsx +0 -118
- package/src/agent/agent-costs/agent-costs.ts +0 -95
- package/src/agent/agent-cron/agent-cron.ts +0 -68
- package/src/agent/agent-definition/agent-definition.ts +0 -96
- package/src/agent/agent-delegation-notice/agent-delegation-notice.ts +0 -48
- package/src/agent/agent-entry-title/agent-entry-title.ts +0 -72
- package/src/agent/agent-log/agent-log.tsx +0 -308
- package/src/agent/agent-models/agent-models.ts +0 -166
- package/src/agent/agent-models/agent-models.types.ts +0 -24
- package/src/agent/agent-profile/agent-profile.tsx +0 -1006
- package/src/agent/agent-state/agent-state.ts +0 -85
- package/src/agent/agent-status-dot/agent-status-dot.ts +0 -73
- package/src/agent/agent.tsx +0 -507
- package/src/board/board-calendar/board-calendar.tsx +0 -89
- package/src/board/board-card/board-card.tsx +0 -106
- package/src/board/board-data/board-data.ts +0 -241
- package/src/board/board-data/board-data.types.ts +0 -63
- package/src/board/board-detail/board-detail.tsx +0 -629
- package/src/board/board-gantt/board-gantt.ts +0 -545
- package/src/board/board-gantt/board-gantt.tsx +0 -286
- package/src/board/board-graph/board-graph.ts +0 -174
- package/src/board/board-graph/board-graph.tsx +0 -168
- package/src/board/board-items/board-items.ts +0 -183
- package/src/board/board-kanban/board-kanban.ts +0 -137
- package/src/board/board-kanban/board-kanban.tsx +0 -257
- package/src/board/board-status/board-status.ts +0 -59
- package/src/board/board-statuses/board-statuses.ts +0 -63
- package/src/board/board-statuses/board-statuses.tsx +0 -228
- package/src/board/board-table/board-table.ts +0 -33
- package/src/board/board-table/board-table.tsx +0 -413
- package/src/board/board-views/board-views.tsx +0 -68
- package/src/board/board-views/board-views.types.ts +0 -29
- package/src/board/board.tsx +0 -251
- package/src/components/ui/item-calendar.tsx +0 -181
- package/src/components/ui/item-gantt.tsx +0 -463
- package/src/components/ui/kanban.tsx +0 -282
- package/src/data/agent-runtime/agent-runtime.ts +0 -131
- package/src/hooks/use-capabilities.ts +0 -22
- package/src/hooks/use-model-catalog.ts +0 -26
- package/src/timezone/timezone-combobox/timezone-combobox.tsx +0 -149
- package/src/timezone/timezone-context.tsx +0 -65
- package/src/timezone/timezone.ts +0 -174
|
@@ -1,24 +1,13 @@
|
|
|
1
1
|
import type {
|
|
2
|
-
AddBoardTaskInput,
|
|
3
|
-
AgentCosts,
|
|
4
|
-
AgentKeyRotated,
|
|
5
|
-
AgentScheduleTarget,
|
|
6
2
|
AppendTableRowsInput,
|
|
7
3
|
AppendTableRowsResult,
|
|
8
4
|
ArchiveFlowInput,
|
|
9
5
|
ArchiveNodeInput,
|
|
10
|
-
BoardTaskResult,
|
|
11
6
|
BundleImportResult,
|
|
12
7
|
CompleteFlowRunStepInput,
|
|
13
|
-
ConfigureBoardInput,
|
|
14
|
-
ConfigureBoardResult,
|
|
15
|
-
CreateAgentInput,
|
|
16
|
-
CreatedAgent,
|
|
17
8
|
CreateFlowInput,
|
|
18
9
|
CreateNodeInput,
|
|
19
10
|
DefineTableInput,
|
|
20
|
-
DeleteBoardTaskInput,
|
|
21
|
-
DeleteBoardTaskResult,
|
|
22
11
|
Flow,
|
|
23
12
|
FlowDocument,
|
|
24
13
|
FlowList,
|
|
@@ -28,15 +17,10 @@ import type {
|
|
|
28
17
|
FlowRunList,
|
|
29
18
|
FlowRunStep,
|
|
30
19
|
FlowValidation,
|
|
31
|
-
IntelCapabilities,
|
|
32
20
|
ListFlowRunsInput,
|
|
33
21
|
ListFlowsInput,
|
|
34
22
|
ListNodesInput,
|
|
35
|
-
ModelCatalog,
|
|
36
|
-
MoveBoardTaskInput,
|
|
37
23
|
Node,
|
|
38
|
-
NodeAgent,
|
|
39
|
-
NodeBoard,
|
|
40
24
|
NodeDocument,
|
|
41
25
|
NodeGraph,
|
|
42
26
|
NodeKind,
|
|
@@ -53,7 +37,6 @@ import type {
|
|
|
53
37
|
ResourceGrantList,
|
|
54
38
|
RevokeGrantInput,
|
|
55
39
|
RevokeGrantResult,
|
|
56
|
-
SaveAgentDefinitionInput,
|
|
57
40
|
SaveAttachmentInput,
|
|
58
41
|
SaveFlowVersionInput,
|
|
59
42
|
SaveNodeVersionInput,
|
|
@@ -65,16 +48,9 @@ import type {
|
|
|
65
48
|
StartFlowRunInput,
|
|
66
49
|
ToolCatalog,
|
|
67
50
|
ToolServerCatalog,
|
|
68
|
-
UpdateBoardTaskInput,
|
|
69
51
|
UpdateFlowInput,
|
|
70
52
|
UpdateNodeInput,
|
|
71
53
|
} from "@anchrd/intel-contract";
|
|
72
|
-
import type {
|
|
73
|
-
AgentManualRun,
|
|
74
|
-
AgentRunDetail,
|
|
75
|
-
AgentRunList,
|
|
76
|
-
AgentState,
|
|
77
|
-
} from "@/data/agent-runtime/agent-runtime.ts";
|
|
78
54
|
|
|
79
55
|
// One row of the shared tree. Nodes and Flows share the folder, not their nature (ADR-0004), so
|
|
80
56
|
// this is a union that keeps each side's record whole — never a merged "node" that is a bit of both.
|
|
@@ -94,17 +70,6 @@ export type TreeEntry =
|
|
|
94
70
|
|
|
95
71
|
export interface IntelDataProvider {
|
|
96
72
|
getSession(): Promise<SessionUser>;
|
|
97
|
-
// What this installation is equipped to do (#190) — deployment facts, not the caller's
|
|
98
|
-
// permissions. `/session` stays identity only on purpose; this is the separate question.
|
|
99
|
-
getCapabilities(): Promise<IntelCapabilities>;
|
|
100
|
-
/**
|
|
101
|
-
* What the offered models cost and how much they hold (#257).
|
|
102
|
-
*
|
|
103
|
-
* ⚠️ Answered by intel, which asks Cloudflare with a token this page never sees. Each entry says
|
|
104
|
-
* whether its figures were read live or came off intel's written-out table, and the select says so
|
|
105
|
-
* too — a silently stale price is the state this replaced, with more code.
|
|
106
|
-
*/
|
|
107
|
-
listModels(): Promise<ModelCatalog>;
|
|
108
73
|
listNodes(input?: Partial<ListNodesInput>): Promise<NodeList>;
|
|
109
74
|
// One level of the shared tree: the documents and the flows filed in the same folder, in one
|
|
110
75
|
// sorted list. Per level rather than recursive, so opening a folder is what costs a request.
|
|
@@ -137,27 +102,6 @@ export interface IntelDataProvider {
|
|
|
137
102
|
defineTable(input: DefineTableInput): Promise<NodeTable>;
|
|
138
103
|
appendTableRows(input: AppendTableRowsInput): Promise<AppendTableRowsResult>;
|
|
139
104
|
|
|
140
|
-
// A board's whole document — the status list and every task — as one read (#285). There is no
|
|
141
|
-
// per-task GET and there is not meant to be: the file IS the board, and every view of it
|
|
142
|
-
// (anchrd/intel#286) draws the same list.
|
|
143
|
-
getBoard(nodeId: string): Promise<NodeBoard>;
|
|
144
|
-
// The status list, written whole and in the order it should be drawn. Adding, renaming and
|
|
145
|
-
// reordering are all this one call.
|
|
146
|
-
configureBoard(input: ConfigureBoardInput): Promise<ConfigureBoardResult>;
|
|
147
|
-
// ⚠️ The five task operations answer with the ONE task that was written, never the whole board.
|
|
148
|
-
// A board holds up to five thousand tasks, and a one-card edit that answered with all of them
|
|
149
|
-
// would make every write pay for a full read — so the cache is patched from the answer here
|
|
150
|
-
// (`board-data.ts`) rather than refetched.
|
|
151
|
-
addBoardTask(input: AddBoardTaskInput): Promise<BoardTaskResult>;
|
|
152
|
-
updateBoardTask(input: UpdateBoardTaskInput): Promise<BoardTaskResult>;
|
|
153
|
-
// Where a task sits: its column, its parent, its place among its neighbours. ⚠️ A move names
|
|
154
|
-
// its NEIGHBOURS and never an index — the server mints the order key, so one drag writes one
|
|
155
|
-
// task and renumbers nothing.
|
|
156
|
-
moveBoardTask(input: MoveBoardTaskInput): Promise<BoardTaskResult>;
|
|
157
|
-
// ⚠️ Deleting cascades to every descendant and `deleted` counts them, so a surface can say what
|
|
158
|
-
// it is about to do before it does it rather than afterwards.
|
|
159
|
-
deleteBoardTask(input: DeleteBoardTaskInput): Promise<DeleteBoardTaskResult>;
|
|
160
|
-
|
|
161
105
|
// Walks the browser through the portal's OAuth flow without asking anybody anything: Gate is the
|
|
162
106
|
// identity provider Cloudflare Access consumes, so a signed-in person is already known there
|
|
163
107
|
// (#60). It navigates away — the caller renders no button for it and gets no answer back.
|
|
@@ -209,49 +153,5 @@ export interface IntelDataProvider {
|
|
|
209
153
|
listTools(): Promise<ToolCatalog>;
|
|
210
154
|
listToolServers(): Promise<ToolServerCatalog>;
|
|
211
155
|
|
|
212
|
-
// An agent node and the definition its current version carries. `definition` is `null` in the one
|
|
213
|
-
// window where the node exists and no version has been written — the same window a document's
|
|
214
|
-
// content is `null` in.
|
|
215
|
-
getAgent(nodeId: string): Promise<NodeAgent>;
|
|
216
|
-
// ⚠️ `CreatedAgent`: the create answer carries the Gate application key ONCE (#182). Nothing in
|
|
217
|
-
// the UI stores or displays it yet — showing it is its own ticket — but the type has to be honest
|
|
218
|
-
// about what comes back, or the strict read schema would reject the response.
|
|
219
|
-
createAgent(input: CreateAgentInput): Promise<CreatedAgent>;
|
|
220
|
-
// ⚠️ Every change to references, schedules or the model writes a NEW definition version; nothing
|
|
221
|
-
// is edited in place (ADR-0005). `baseVersionId` is the version the editor read, so a parallel
|
|
222
|
-
// change is refused rather than silently overwritten.
|
|
223
|
-
saveAgentDefinition(input: SaveAgentDefinitionInput): Promise<NodeAgent>;
|
|
224
|
-
// Replace the key of the Gate Application an agent runs as (D29). The repair path an agent that
|
|
225
|
-
// answers `agent_key_missing` has, and the only one — Gate keeps a key hashed. ⚠️ No key comes
|
|
226
|
-
// back: intel hands the new one to the agent runtime itself.
|
|
227
|
-
rotateAgentKey(nodeId: string): Promise<AgentKeyRotated>;
|
|
228
|
-
|
|
229
|
-
// ⚠️ The seven below are answered by the agent RUNTIME, a separate Worker — but they are asked of
|
|
230
|
-
// intel, which proxies them with the caller's own Gate token (#178). One origin, one cookie, no
|
|
231
|
-
// CORS. What that costs is that a 403 here means "you may not drive agents", which is a state the
|
|
232
|
-
// agent page renders as an answer rather than as a failure.
|
|
233
|
-
listAgentRuns(agentId: string): Promise<AgentRunList>;
|
|
234
|
-
/**
|
|
235
|
-
* What this agent has actually cost, out of Cloudflare's AI Gateway log (#251).
|
|
236
|
-
*
|
|
237
|
-
* ⚠️ Unlike its neighbours this one is answered by INTEL and not forwarded to the runtime, which
|
|
238
|
-
* knows nothing about money. ⚠️ Read `status` before the numbers: empty with `not_configured` or
|
|
239
|
-
* `unreadable` means "not known", and rendering it like "cost nothing" turns an outage into a
|
|
240
|
-
* saving.
|
|
241
|
-
*/
|
|
242
|
-
getAgentCosts(agentId: string): Promise<AgentCosts>;
|
|
243
|
-
getAgentRun(agentId: string, runId: string): Promise<AgentRunDetail>;
|
|
244
|
-
// Whether the agent is switched off. Runtime state, deliberately not part of the definition: a
|
|
245
|
-
// definition is versioned, shared and read into model context (#179).
|
|
246
|
-
getAgentState(agentId: string): Promise<AgentState>;
|
|
247
|
-
pauseAgent(agentId: string): Promise<AgentState>;
|
|
248
|
-
resumeAgent(agentId: string): Promise<AgentState>;
|
|
249
|
-
// Fires one of the agent's own schedules now. The target must be one it already schedules — a run
|
|
250
|
-
// acts with the AGENT's grants, so naming any node here would be borrowing them.
|
|
251
|
-
runAgentNow(agentId: string, target: AgentScheduleTarget): Promise<AgentManualRun>;
|
|
252
|
-
// Where assistant-ui posts. A URL rather than a method: the chat is an SSE stream the transport
|
|
253
|
-
// owns end to end, and handing it a string is the whole of what it needs from this layer.
|
|
254
|
-
agentChatApi(agentId: string): string;
|
|
255
|
-
|
|
256
156
|
logout(): Promise<void>;
|
|
257
157
|
}
|
|
@@ -33,13 +33,13 @@ export function EntryPicker({
|
|
|
33
33
|
}: {
|
|
34
34
|
// Which kind of node may be chosen. `null` offers every kind — what the Flow step uses.
|
|
35
35
|
//
|
|
36
|
-
// ⚠️ A list is not a convenience (#255).
|
|
37
|
-
//
|
|
38
|
-
// and refuses afterwards —
|
|
39
|
-
// picked has to be the same question the caller can answer in one place.
|
|
36
|
+
// ⚠️ A list is not a convenience (#255). A caller that accepts a folder, a document OR a table
|
|
37
|
+
// has one question to ask, and the alternatives — one picker per kind, or a picker that offers
|
|
38
|
+
// everything and refuses afterwards — are either three dialogs or a rejection after the fact.
|
|
39
|
+
// What may be picked has to be the same question the caller can answer in one place.
|
|
40
40
|
kind: NodeKind | NodeKind[] | null;
|
|
41
|
-
// ⚠️ Flows are a second list, not a kind of node, so they are asked for rather than assumed.
|
|
42
|
-
//
|
|
41
|
+
// ⚠️ Flows are a second list, not a kind of node, so they are asked for rather than assumed. A
|
|
42
|
+
// caller that may aim at either says so; every other caller wants nodes only and pays for no
|
|
43
43
|
// second request.
|
|
44
44
|
flows?: boolean;
|
|
45
45
|
value: string;
|
package/src/i18n/de.json
CHANGED
|
@@ -39,7 +39,6 @@
|
|
|
39
39
|
"tree.new.table": "Neue Tabelle",
|
|
40
40
|
"tree.new.upload": "Datei hochladen",
|
|
41
41
|
"tree.new.flow": "Neuer Flow",
|
|
42
|
-
"tree.new.agent": "Neuer Agent",
|
|
43
42
|
"tree.upload": "Datei zum Hochladen",
|
|
44
43
|
"tree.table.columns": "Spalten",
|
|
45
44
|
"tree.table.columnsHint": "Trenne die Spaltennamen mit Kommas. Sie sind die Kopfzeile, und jede später angehängte Zeile muss dazu passen.",
|
|
@@ -49,8 +48,6 @@
|
|
|
49
48
|
"tree.kind.document": "Dokument",
|
|
50
49
|
"tree.kind.attachment": "Datei",
|
|
51
50
|
"tree.kind.table": "Tabelle",
|
|
52
|
-
"tree.kind.agent": "Agent",
|
|
53
|
-
"tree.kind.board": "Board",
|
|
54
51
|
"tree.kind.flow": "Flow",
|
|
55
52
|
"tree.move.action": "Verschieben nach …",
|
|
56
53
|
"tree.move.title": "{title} verschieben",
|
|
@@ -76,9 +73,12 @@
|
|
|
76
73
|
"resource.rename": "Umbenennen",
|
|
77
74
|
"resource.renameTitle": "{title} umbenennen",
|
|
78
75
|
"resource.archive": "Archivieren",
|
|
79
|
-
"resource.export": "
|
|
76
|
+
"resource.export": "Export",
|
|
77
|
+
"resource.import": "Import",
|
|
80
78
|
"tree.new.importZip": "ZIP-Bündel importieren",
|
|
81
79
|
"tree.new.importFolder": "Ordner importieren",
|
|
80
|
+
"tree.importZipInto": "ZIP-Bündel in {where} importieren",
|
|
81
|
+
"tree.importFolderInto": "Ordner in {where} importieren",
|
|
82
82
|
"tree.importFailed": "Der Import wurde nicht übernommen. Es wurde nichts angelegt — prüfe das Bündel und versuche es erneut.",
|
|
83
83
|
"resource.exportFailed": "Der Export konnte nicht heruntergeladen werden. Prüfe deinen Zugriff und versuche es erneut.",
|
|
84
84
|
"archive.title": "Archiv",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"node.attachmentHelp": "Die kanonische Datei liegt privat in Intel. Ihre KI-lesbare Projektion wird getrennt indexiert.",
|
|
98
98
|
"node.table.summary": "{rows} Zeilen, {columns} Spalten",
|
|
99
99
|
"node.table.download": "CSV herunterladen",
|
|
100
|
-
"node.table.empty": "Noch keine Zeilen. Zeilen werden von Flows
|
|
100
|
+
"node.table.empty": "Noch keine Zeilen. Zeilen werden von Flows angehängt.",
|
|
101
101
|
"node.table.undefined": "Diese Tabelle hat noch keine Spalten.",
|
|
102
102
|
"node.select": "Wähle ein Dokument oder einen Ordner, um damit zu arbeiten.",
|
|
103
103
|
"node.folderEmpty": "In diesem Ordner ist noch nichts. Lege etwas über das Plus in der Seitenleiste an.",
|
|
@@ -108,8 +108,6 @@
|
|
|
108
108
|
"node.kind.document": "Dokument",
|
|
109
109
|
"node.kind.attachment": "Upload",
|
|
110
110
|
"node.kind.table": "Tabelle",
|
|
111
|
-
"node.kind.agent": "Agent",
|
|
112
|
-
"node.kind.board": "Board",
|
|
113
111
|
"node.kind.flow": "Flow",
|
|
114
112
|
"node.share": "Freigeben",
|
|
115
113
|
"node.shareAction": "Zugriff geben",
|
|
@@ -122,7 +120,6 @@
|
|
|
122
120
|
"node.verbHint.read": "Alles hier drin sehen",
|
|
123
121
|
"node.verbHint.write": "Dinge ändern und hinzufügen",
|
|
124
122
|
"node.verbHint.execute": "Die Flows hier drin starten",
|
|
125
|
-
"node.verbHint.execute.agent": "Diesen Agenten nutzen — seinen Chat, seine Zeitpläne und seine MCP-Adresse",
|
|
126
123
|
"node.verbHint.share": "Anderen Zugriff geben",
|
|
127
124
|
"node.organization": "Alle in der Organisation",
|
|
128
125
|
"node.revokeShare": "Zugriff entziehen",
|
|
@@ -279,120 +276,6 @@
|
|
|
279
276
|
"runs.trigger.subflow": "von einem anderen Flow aufgerufen",
|
|
280
277
|
"runs.outcome.completed": "fertig",
|
|
281
278
|
"runs.outcome.failed": "fehlgeschlagen",
|
|
282
|
-
"agent.tabs": "Agenten-Ansichten",
|
|
283
|
-
"agent.tab.profile": "Profil",
|
|
284
|
-
"agent.tab.chat": "Chat",
|
|
285
|
-
"agent.tab.calendar": "Kalender",
|
|
286
|
-
"agent.tab.log": "Protokoll",
|
|
287
|
-
"agent.status.running": "Läuft",
|
|
288
|
-
"agent.status.waiting": "Wartet auf den nächsten Lauf",
|
|
289
|
-
"agent.status.failed": "Letzter Lauf fehlgeschlagen",
|
|
290
|
-
"agent.status.paused": "Pausiert",
|
|
291
|
-
"agent.status.unknown": "Laufzeit nicht erreichbar",
|
|
292
|
-
"agent.nextRun": "nächster Lauf {when} ({zone})",
|
|
293
|
-
"agent.lastRun": "letzter Lauf {when}",
|
|
294
|
-
"agent.pausedNoRuns": "kein Zeitplan feuert, keine Aufgabe und keine Mail wird angenommen; der Chat antwortet weiter",
|
|
295
|
-
"agent.pause": "Pausieren",
|
|
296
|
-
"agent.resume": "Fortsetzen",
|
|
297
|
-
"agent.runNow": "Jetzt ausführen",
|
|
298
|
-
"agent.runNowNoTarget": "Dieser Agent hat keinen Zeitplan, es gibt also nichts auszuführen.",
|
|
299
|
-
"agent.runNowPaused": "Setze den Agenten fort, bevor du ihn ausführst.",
|
|
300
|
-
"agent.actionFailed": "Das hat nicht funktioniert. Versuche es erneut.",
|
|
301
|
-
"agent.keyMissing": "Dieser Agent hat keinen Application-Key, deshalb kann kein Lauf starten. Ersetze seinen Key unter „Identität“ im Profil.",
|
|
302
|
-
"agent.createdBy": "von {name}",
|
|
303
|
-
"agent.notPermitted": "Du darfst diesen Agenten lesen, aber nicht steuern. Dafür braucht es die Berechtigung „Agenten ausführen“.",
|
|
304
|
-
"agent.noRuntime": "Diese Installation betreibt keine Agenten-Laufzeit, deshalb kann dieser Agent hier weder chatten noch laufen. Seine Definition bleibt erhalten und funktioniert wieder auf einer Installation, die eine hat.",
|
|
305
|
-
"agent.loadFailed": "Dieser Agent konnte nicht geladen werden. Prüfe deinen Zugriff und versuche es erneut.",
|
|
306
|
-
"agent.saveFailed": "Die Änderung wurde nicht gespeichert. Vielleicht hat jemand anderes diesen Agenten zuerst geändert — lade neu und versuche es erneut.",
|
|
307
|
-
"agent.noDefinition": "Dieser Agent hat noch keine Definition, hier gibt es also nichts zu ändern.",
|
|
308
|
-
"agent.identity": "Identität",
|
|
309
|
-
"agent.identityHint": "Die Gate-Application, als die dieser Agent handelt. Ihre Rechte im Baum entscheiden, was ein Lauf lesen und schreiben darf, und ihr Key liegt verschlüsselt in der Agenten-Laufzeit — nie hier und nie in der Definition.",
|
|
310
|
-
"agent.principal": "Gate-Application",
|
|
311
|
-
"agent.principalNone": "Keine",
|
|
312
|
-
"agent.principalNoneHint": "Dieser Agent hat keine Gate-Application, es gibt also keinen Key zu ersetzen. Agenten, die vor dieser Funktion angelegt, importiert oder aus einem Bündel wiederhergestellt wurden, bekommen eine in Gate.",
|
|
313
|
-
"agent.rotateKey": "Key ersetzen",
|
|
314
|
-
"agent.rotateKeyConfirm": "Ein neuer Key wird ausgestellt und an die Agenten-Laufzeit übergeben. Der bisherige Key hört sofort auf zu funktionieren, und kein Key wird hier je angezeigt.",
|
|
315
|
-
"agent.rotateKeyDone": "Der Key wurde ersetzt. Ab dem nächsten Lauf arbeitet der Agent mit dem neuen.",
|
|
316
|
-
"agent.rotateKeyFailed": "Der Key wurde nicht ersetzt. Versuche es erneut — und bleib dran, bis es klappt: Wenn Gate den neuen Key bereits ausgestellt hat, kann dieser Agent erst wieder laufen, wenn die Agenten-Laufzeit ihn hat.",
|
|
317
|
-
"agent.contact": "Erreichbarkeit",
|
|
318
|
-
"agent.contactHint": "Wie dieser Agent erreicht wird. Der eingebaute Chat gehört zur Laufzeit und ist immer da.",
|
|
319
|
-
"agent.contactChat": "Eingebauter Chat",
|
|
320
|
-
"agent.contactChatBuiltIn": "Eingebaut, immer da",
|
|
321
|
-
"agent.contactMcp": "MCP-Adresse",
|
|
322
|
-
"agent.copy": "Kopieren",
|
|
323
|
-
"agent.copied": "Kopiert",
|
|
324
|
-
"agent.contactAdd": "Erreichbarkeit hinzufügen",
|
|
325
|
-
"agent.contactAddReason": "Eine Mail-Adresse gehört der Installation, nicht der Definition des Agenten — sie wird dort konfiguriert, wo die Laufzeit betrieben wird.",
|
|
326
|
-
"agent.knows": "Was er weiß",
|
|
327
|
-
"agent.knowsHint": "Was dieser Agent liest, und wofür jeder Eintrag zählt. Eine Systemnachricht weist ihn an — ein Ordner, ein Dokument oder eine Tabelle. Semantischer Kontext wird durchsucht, und in das Gedächtnis wird zurückgeschrieben und es wird ebenso durchsucht, deshalb sind beide Ordner. Der Name verspricht weniger als die Rolle: Was der Agent sich im Gedächtnis notiert, kommt ihm bei jeder späteren Suche wieder entgegen.",
|
|
328
|
-
"agent.addReference": "Etwas zum Lesen hinzufügen",
|
|
329
|
-
"agent.removeReferenceOf": "{title} nicht mehr lesen",
|
|
330
|
-
"agent.pickEntry": "Was gelesen wird",
|
|
331
|
-
"agent.roleFor": "Wofür {title} zählt",
|
|
332
|
-
"agent.role.system-message": "Systemnachricht",
|
|
333
|
-
"agent.role.semantic-context": "Semantischer Kontext",
|
|
334
|
-
"agent.role.memory": "Gedächtnis",
|
|
335
|
-
"agent.unknownEntry": "Für dich nicht verfügbar",
|
|
336
|
-
"agent.tools": "Werkzeuge",
|
|
337
|
-
"agent.toolsHint": "Die MCP-Server, die du diesem Agenten gibst, aus denen, die du selbst erreichst. Intel speichert die Auswahl, nie die Berechtigung — die Werkzeuge hinter einem Server werden bei jedem Lauf live mit deinem Portal-Zugriff gelesen.",
|
|
338
|
-
"agent.addTool": "Werkzeug hinzufügen",
|
|
339
|
-
"agent.removeToolServerOf": "{name} diesem Agenten wegnehmen",
|
|
340
|
-
"agent.toolServerUnavailable": "Du erreichst diesen Server nicht mehr",
|
|
341
|
-
"agent.toolsDelegationNotice": "Wer diesen Agenten ausführen darf, handelt auf deiner Verbindung.",
|
|
342
|
-
"agent.toolsDelegationNoticeBy": "Wer diesen Agenten ausführen darf, handelt auf der Verbindung von {name}.",
|
|
343
|
-
"agent.toolsDelegationNoticeSomebody": "Wer diesen Agenten ausführen darf, handelt auf der Verbindung dessen, der ihm diese Werkzeuge gegeben hat — nicht auf deiner.",
|
|
344
|
-
"agent.toolsNotConnected": "Du bist noch nicht am Firmenportal angemeldet, es gibt also nichts abzugeben. Öffne „Werkzeuge“, um dich zu verbinden.",
|
|
345
|
-
"agent.toolsNoneLeft": "Jeder Server, den du erreichst, ist diesem Agenten bereits gegeben.",
|
|
346
|
-
"agent.schedule": "Zeitplan",
|
|
347
|
-
"agent.scheduleHint": "Wann dieser Agent von sich aus handelt und was er ausführt. Jeder Zeitplan behält die Zeitzone, die er bekommen hat — er meint damit für alle Lesenden dieselbe Stunde.",
|
|
348
|
-
"agent.addSchedule": "Zeitplan hinzufügen",
|
|
349
|
-
"agent.removeSchedule": "Diesen Zeitplan entfernen",
|
|
350
|
-
"agent.scheduleTarget": "Was ausgeführt wird",
|
|
351
|
-
"agent.cron": "Wann",
|
|
352
|
-
"agent.scheduleTimezone": "Zeitzone",
|
|
353
|
-
"agent.scheduleTimezoneHint": "Worin der Ausdruck darüber gelesen wird. Vorgeschlagen aus deiner eigenen Einstellung und beim Zeitplan gespeichert — wenn du deine Einstellung später änderst, bleibt dieser hier unberührt.",
|
|
354
|
-
"agent.cronHint": "Fünf Felder: Minute, Stunde, Tag des Monats, Monat, Wochentag. „0 8 * * *“ ist täglich um 08:00 in der Zeitzone darunter.",
|
|
355
|
-
"agent.model": "Modell",
|
|
356
|
-
"agent.modelHint": "Welches Modell denkt. Eine Änderung übernimmt die Laufzeit innerhalb einer Minute.",
|
|
357
|
-
"agent.modelFigures": "{context} Kontext · {input} $ rein / {output} $ raus je 1 Mio. Token",
|
|
358
|
-
"agent.usage": "{input} rein · {output} raus · {cacheRead} Cache gelesen · {cacheWrite} Cache geschrieben",
|
|
359
|
-
"agent.usageUnknown": "Für diesen Lauf sind keine Verbrauchszahlen erfasst",
|
|
360
|
-
"agent.usageNotReported": "Dieser Anbieter meldet keinen Verbrauch",
|
|
361
|
-
"agent.costMissing": "Kosten stehen nicht im Gateway-Log",
|
|
362
|
-
"agent.costNotConfigured": "Keine Kostenangabe: Diese Installation hat kein Lese-Token für das AI Gateway.",
|
|
363
|
-
"agent.costUnreadable": "Keine Kostenangabe: Das AI-Gateway-Log war nicht lesbar.",
|
|
364
|
-
"agent.costPartial": "Das Gateway-Log wurde bis zur Seitengrenze gelesen — diese Summen sind eine Untergrenze.",
|
|
365
|
-
"agent.costWindow": "Letzte {days} Tage",
|
|
366
|
-
"agent.costWindowCalls": "{count} Modellaufrufe",
|
|
367
|
-
"agent.costs": "Kosten",
|
|
368
|
-
"agent.costsSpent": "{amount} in den letzten {days} Tagen",
|
|
369
|
-
"agent.costsSpentPast": "Bereits ausgegeben, für vergangene Läufe — keine Vorhersage für das oben gewählte Modell.",
|
|
370
|
-
"agent.costsSpentWith": "mit {models}",
|
|
371
|
-
"agent.modelFiguresStale": "Diese Angaben stammen aus einer eingebauten Tabelle und können veraltet sein.",
|
|
372
|
-
"agent.calendar": "Kommende Läufe",
|
|
373
|
-
"agent.calendarZones": "Jede Zeit steht in der Zeitzone ihres eigenen Zeitplans, denn dann läuft der Agent. Weicht deine eigene Zeitzone ab, steht sie daneben.",
|
|
374
|
-
"agent.calendarYourTime": "{when} bei dir",
|
|
375
|
-
"agent.calendarUnreadable": "Keiner der Zeitpläne dieses Agenten lässt sich als Cron-Ausdruck lesen, es ist also nichts geplant.",
|
|
376
|
-
"agent.calendarPaused": "Dieser Agent ist pausiert, keiner dieser Läufe findet statt. Sie zeigen, was er täte, sobald er fortgesetzt wird.",
|
|
377
|
-
"agent.log": "Läufe",
|
|
378
|
-
"agent.logEmpty": "Dieser Agent ist noch nicht gelaufen.",
|
|
379
|
-
"agent.logFailed": "Die Läufe konnten nicht gelesen werden. Vielleicht ist die Agenten-Laufzeit von hier aus nicht erreichbar.",
|
|
380
|
-
"agent.runFailed": "Dieser Lauf konnte nicht gelesen werden.",
|
|
381
|
-
"agent.runLog": "Was dieser Lauf getan hat",
|
|
382
|
-
"agent.runLogEmpty": "Dieser Lauf hat nichts aufgezeichnet.",
|
|
383
|
-
"agent.runAnswer": "Was dieser Lauf geantwortet hat",
|
|
384
|
-
"agent.runAnswerEmpty": "Dieser Lauf hat keine Antwort aufgezeichnet.",
|
|
385
|
-
"agent.steps": "{count} Schritte",
|
|
386
|
-
"agent.trigger.chat": "aus dem Chat",
|
|
387
|
-
"agent.trigger.schedule": "nach Zeitplan",
|
|
388
|
-
"agent.trigger.mail": "aus einer E-Mail",
|
|
389
|
-
"agent.trigger.task": "über MCP gefragt",
|
|
390
|
-
"agent.trigger.manual": "von Hand gestartet",
|
|
391
|
-
"agent.chatEmpty": "Schreib diesem Agenten. Er antwortet mit dem, was er weiß, und den Werkzeugen, die er erreichen darf.",
|
|
392
|
-
"agent.chatInput": "Nachricht an diesen Agenten",
|
|
393
|
-
"agent.chatPlaceholder": "Frag etwas …",
|
|
394
|
-
"agent.chatSend": "Senden",
|
|
395
|
-
"agent.chatScrollDown": "Zur neuesten Nachricht springen",
|
|
396
279
|
"settings.title": "Einstellungen",
|
|
397
280
|
"settings.description": "Sprache, Erscheinungsbild und Zeitzone. Alle drei gelten sofort und werden auf diesem Gerät gemerkt.",
|
|
398
281
|
"settings.language": "Sprache",
|
|
@@ -400,12 +283,6 @@
|
|
|
400
283
|
"settings.appearance.system": "Dem System folgen",
|
|
401
284
|
"settings.appearance.light": "Hell",
|
|
402
285
|
"settings.appearance.dark": "Dunkel",
|
|
403
|
-
"settings.timezone": "Zeitzone",
|
|
404
|
-
"settings.timezoneHint": "Zum Lesen von Zeiten, und als Vorschlag, wenn du einem Agenten einen Zeitplan gibst. Ein Zeitplan behält die Zeitzone, die er bekommen hat — eine Reise verschiebt also keine Läufe, die du bereits gesetzt hast.",
|
|
405
|
-
"settings.timezoneSearch": "Stadt, Zone oder Versatz suchen …",
|
|
406
|
-
"settings.timezoneNoMatch": "Keine Zeitzone passt.",
|
|
407
|
-
"settings.timezoneOwn": "Dein Gerät",
|
|
408
|
-
"settings.timezoneAll": "Alle Zeitzonen",
|
|
409
286
|
"auth.signOut": "Abmelden",
|
|
410
287
|
"auth.signOutFailed": "Das Abmelden ist fehlgeschlagen. Prüfe deine Verbindung und versuche es erneut.",
|
|
411
288
|
"signIn.refusedTitle": "Angemeldet, aber nicht angenommen",
|
|
@@ -425,93 +302,5 @@
|
|
|
425
302
|
"common.loading": "Wird geladen …",
|
|
426
303
|
"common.retry": "Erneut versuchen",
|
|
427
304
|
"common.close": "Schließen",
|
|
428
|
-
"common.unavailable": "Intel ist derzeit nicht verfügbar."
|
|
429
|
-
"board.summary": "{tasks} Aufgaben in {statuses} Status",
|
|
430
|
-
"board.views": "Ansichten dieses Boards",
|
|
431
|
-
"board.view.kanban": "Board",
|
|
432
|
-
"board.view.table": "Tabelle",
|
|
433
|
-
"board.view.calendar": "Kalender",
|
|
434
|
-
"board.view.graph": "Graph",
|
|
435
|
-
"board.view.gantt": "Gantt",
|
|
436
|
-
"board.statuses": "Status",
|
|
437
|
-
"board.statusLabel": "Statusname",
|
|
438
|
-
"board.statusUp": "Status nach oben",
|
|
439
|
-
"board.statusDown": "Status nach unten",
|
|
440
|
-
"board.statusRemove": "Status {label} entfernen",
|
|
441
|
-
"board.addStatus": "Neuer Status",
|
|
442
|
-
"board.shelfFixed": "Immer der letzte",
|
|
443
|
-
"board.showArchived": "Archivierte zeigen",
|
|
444
|
-
"board.addTask": "Neue Aufgabe",
|
|
445
|
-
"board.empty": "Auf diesem Board steht noch nichts. Lege oben die erste Aufgabe an.",
|
|
446
|
-
"board.noTasks": "Hier passt nichts.",
|
|
447
|
-
"board.laneEmpty": "Leer",
|
|
448
|
-
"board.archivedEmpty": "Nichts archiviert.",
|
|
449
|
-
"board.blocked": "Blockiert",
|
|
450
|
-
"board.open": "Offen",
|
|
451
|
-
"board.subtaskCount": "{done}/{total} Teilaufgaben",
|
|
452
|
-
"board.unassigned": "Nicht zugewiesen",
|
|
453
|
-
"board.assignee.me": "Ich",
|
|
454
|
-
"board.assignee.unnamed": "Zugewiesen",
|
|
455
|
-
"board.unknownTask": "Aufgabe für dich nicht verfügbar",
|
|
456
|
-
"board.column.title": "Titel",
|
|
457
|
-
"board.column.status": "Status",
|
|
458
|
-
"board.column.assignee": "Zuständig",
|
|
459
|
-
"board.column.startDate": "Startdatum",
|
|
460
|
-
"board.column.dueDate": "Fällig am",
|
|
461
|
-
"board.column.labels": "Labels",
|
|
462
|
-
"board.columns": "Spalten",
|
|
463
|
-
"board.filterTitle": "Nach Titel filtern",
|
|
464
|
-
"board.groupBy": "Gruppieren nach",
|
|
465
|
-
"board.groupBy.none": "Nichts",
|
|
466
|
-
"board.groupBy.status": "Status",
|
|
467
|
-
"board.groupBy.assignee": "Zuständig",
|
|
468
|
-
"board.toggleSubtasks": "Teilaufgaben von {task} ein- oder ausblenden",
|
|
469
|
-
"board.calendar.previous": "Vorheriger Monat",
|
|
470
|
-
"board.calendar.next": "Nächster Monat",
|
|
471
|
-
"board.calendar.today": "Heute",
|
|
472
|
-
"board.calendar.more": "+{count} weitere",
|
|
473
|
-
"board.calendar.undated": "{count} ohne Fälligkeitsdatum — nicht im Raster, aber auf dem Board und in der Tabelle.",
|
|
474
|
-
"board.gantt.scale": "Maßstab",
|
|
475
|
-
"board.gantt.scale.days": "Tage",
|
|
476
|
-
"board.gantt.scale.weeks": "Wochen",
|
|
477
|
-
"board.gantt.scale.months": "Monate",
|
|
478
|
-
"board.gantt.today": "Heute",
|
|
479
|
-
"board.gantt.move": "{task} verschieben",
|
|
480
|
-
"board.gantt.resizeStart": "Beginn von {task} ändern",
|
|
481
|
-
"board.gantt.resizeEnd": "Fälligkeit von {task} ändern",
|
|
482
|
-
"board.gantt.spanLabel": "{start} bis {end}",
|
|
483
|
-
"board.gantt.waitsFor": "wartet auf {tasks}",
|
|
484
|
-
"board.gantt.hiddenLinks": "{count} Abhängigkeiten sind nicht gezeichnet: die erwartete Aufgabe hat hier keinen Balken.",
|
|
485
|
-
"board.gantt.undated": "Ohne Datum",
|
|
486
|
-
"board.gantt.undatedCount": "{count} ohne Datum — auf dem Board, aber auf keiner Zeitachse.",
|
|
487
|
-
"board.gantt.nothingDated": "Nichts auf diesem Board hat ein Datum. Gib einer Aufgabe ein Fälligkeitsdatum, dann erscheint sie hier.",
|
|
488
|
-
"board.graph.subtree": "Teilbaum",
|
|
489
|
-
"board.graph.wholeBoard": "Ganzes Board",
|
|
490
|
-
"board.graph.parentEdge": "enthält",
|
|
491
|
-
"board.graph.dependsEdge": "wartet auf",
|
|
492
|
-
"board.detail": "Aufgabe",
|
|
493
|
-
"board.description": "Beschreibung",
|
|
494
|
-
"board.subtasks": "Teilaufgaben",
|
|
495
|
-
"board.addSubtask": "Neue Teilaufgabe",
|
|
496
|
-
"board.dependencies": "Wartet auf",
|
|
497
|
-
"board.addDependency": "Abhängigkeit hinzufügen",
|
|
498
|
-
"board.removeDependency": "Diese Abhängigkeit entfernen",
|
|
499
|
-
"board.references": "Referenzen",
|
|
500
|
-
"board.addReference": "Referenz hinzufügen",
|
|
501
|
-
"board.removeReference": "Diese Referenz entfernen",
|
|
502
|
-
"board.addLabel": "Neues Label",
|
|
503
|
-
"board.removeLabel": "Label {label} entfernen",
|
|
504
|
-
"board.deleteTask": "Aufgabe löschen",
|
|
505
|
-
"board.deleteConfirm": "„{task}“ zu löschen entfernt die Aufgabe und alles darunter: insgesamt {count}. Abhängigkeiten darauf werden entfernt.",
|
|
506
|
-
"board.deleted": "Gelöscht: {count}.",
|
|
507
|
-
"board.archivedHint": "Diese Aufgabe liegt im Archiv. Ein Wechsel in einen anderen Status holt sie zurück.",
|
|
508
|
-
"board.dnd.start": "{task} aufgenommen",
|
|
509
|
-
"board.dnd.over": "{task} über {lane}",
|
|
510
|
-
"board.dnd.end": "{task} in {lane} abgelegt",
|
|
511
|
-
"board.dnd.endUnchanged": "{task} wurde nicht verschoben und steht weiterhin in {lane}",
|
|
512
|
-
"board.dnd.endRefused": "{lane} nimmt keine Karten mehr auf, {task} wurde nicht verschoben und steht weiterhin in {from}",
|
|
513
|
-
"board.dnd.cancel": "Ablegen von {task} abgebrochen",
|
|
514
|
-
"board.dnd.instructions": "Mit der Eingabetaste diese Aufgabe öffnen. Zum Verschieben stattdessen die Leertaste darauf drücken und sie mit den Pfeiltasten an eine andere Position oder in eine andere Spalte bringen, dann mit Leertaste, Eingabetaste oder Tabulator ablegen oder mit Escape dort lassen, wo sie war.",
|
|
515
|
-
"board.card.roleDescription": "Aufgabe, verschiebbar",
|
|
516
|
-
"board.statusTerminal": "Gilt als erledigt"
|
|
305
|
+
"common.unavailable": "Intel ist derzeit nicht verfügbar."
|
|
517
306
|
}
|