@arkvenai/cli 0.5.1 → 0.6.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/README.md +80 -242
- package/dist/befehle.js +138 -77
- package/dist/index.js +63 -334
- package/dist/projekt.js +121 -0
- package/dist/ruf.js +45 -0
- package/dist/uebertragen.js +185 -0
- package/dist/zugang.js +114 -0
- package/package.json +7 -39
- package/CHANGELOG.md +0 -105
- package/dist/agents.d.ts +0 -11
- package/dist/agents.d.ts.map +0 -1
- package/dist/agents.js +0 -76
- package/dist/agents.js.map +0 -1
- package/dist/auftrag.d.ts +0 -3
- package/dist/auftrag.d.ts.map +0 -1
- package/dist/auftrag.js +0 -45
- package/dist/auftrag.js.map +0 -1
- package/dist/bauplan.d.ts +0 -15
- package/dist/bauplan.d.ts.map +0 -1
- package/dist/bauplan.js +0 -219
- package/dist/bauplan.js.map +0 -1
- package/dist/befehle.d.ts +0 -12
- package/dist/befehle.d.ts.map +0 -1
- package/dist/befehle.js.map +0 -1
- package/dist/befund.d.ts +0 -21
- package/dist/befund.d.ts.map +0 -1
- package/dist/befund.js +0 -107
- package/dist/befund.js.map +0 -1
- package/dist/codeAblage.d.ts +0 -31
- package/dist/codeAblage.d.ts.map +0 -1
- package/dist/codeAblage.js +0 -80
- package/dist/codeAblage.js.map +0 -1
- package/dist/deklaration.d.ts +0 -3
- package/dist/deklaration.d.ts.map +0 -1
- package/dist/deklaration.js +0 -14
- package/dist/deklaration.js.map +0 -1
- package/dist/diff.d.ts +0 -10
- package/dist/diff.d.ts.map +0 -1
- package/dist/diff.js +0 -72
- package/dist/diff.js.map +0 -1
- package/dist/erkennung.d.ts +0 -26
- package/dist/erkennung.d.ts.map +0 -1
- package/dist/erkennung.js +0 -174
- package/dist/erkennung.js.map +0 -1
- package/dist/fix.d.ts +0 -26
- package/dist/fix.d.ts.map +0 -1
- package/dist/fix.js +0 -101
- package/dist/fix.js.map +0 -1
- package/dist/geteilt/bauplan/form.d.ts +0 -100
- package/dist/geteilt/bauplan/form.d.ts.map +0 -1
- package/dist/geteilt/bauplan/form.js +0 -21
- package/dist/geteilt/bauplan/form.js.map +0 -1
- package/dist/geteilt/bauplan/index.d.ts +0 -4
- package/dist/geteilt/bauplan/index.d.ts.map +0 -1
- package/dist/geteilt/bauplan/index.js +0 -4
- package/dist/geteilt/bauplan/index.js.map +0 -1
- package/dist/geteilt/bauplan/lesen.d.ts +0 -6
- package/dist/geteilt/bauplan/lesen.d.ts.map +0 -1
- package/dist/geteilt/bauplan/lesen.js +0 -344
- package/dist/geteilt/bauplan/lesen.js.map +0 -1
- package/dist/geteilt/bauplan/schreiben.d.ts +0 -3
- package/dist/geteilt/bauplan/schreiben.d.ts.map +0 -1
- package/dist/geteilt/bauplan/schreiben.js +0 -80
- package/dist/geteilt/bauplan/schreiben.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init.d.ts +0 -28
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -324
- package/dist/init.js.map +0 -1
- package/dist/login.d.ts +0 -45
- package/dist/login.d.ts.map +0 -1
- package/dist/login.js +0 -162
- package/dist/login.js.map +0 -1
- package/dist/mcp.d.ts +0 -18
- package/dist/mcp.d.ts.map +0 -1
- package/dist/mcp.js +0 -115
- package/dist/mcp.js.map +0 -1
- package/dist/neu.d.ts +0 -17
- package/dist/neu.d.ts.map +0 -1
- package/dist/neu.js +0 -118
- package/dist/neu.js.map +0 -1
- package/dist/npmrc.d.ts +0 -9
- package/dist/npmrc.d.ts.map +0 -1
- package/dist/npmrc.js +0 -49
- package/dist/npmrc.js.map +0 -1
- package/dist/projekte.d.ts +0 -23
- package/dist/projekte.d.ts.map +0 -1
- package/dist/projekte.js +0 -82
- package/dist/projekte.js.map +0 -1
- package/dist/pull.d.ts +0 -15
- package/dist/pull.d.ts.map +0 -1
- package/dist/pull.js +0 -301
- package/dist/pull.js.map +0 -1
- package/dist/push/bericht.d.ts +0 -8
- package/dist/push/bericht.d.ts.map +0 -1
- package/dist/push/bericht.js +0 -85
- package/dist/push/bericht.js.map +0 -1
- package/dist/push/form.d.ts +0 -67
- package/dist/push/form.d.ts.map +0 -1
- package/dist/push/form.js +0 -6
- package/dist/push/form.js.map +0 -1
- package/dist/push/medien.d.ts +0 -7
- package/dist/push/medien.d.ts.map +0 -1
- package/dist/push/medien.js +0 -154
- package/dist/push/medien.js.map +0 -1
- package/dist/push/sammeln.d.ts +0 -34
- package/dist/push/sammeln.d.ts.map +0 -1
- package/dist/push/sammeln.js +0 -112
- package/dist/push/sammeln.js.map +0 -1
- package/dist/push/verzeichnisse.d.ts +0 -40
- package/dist/push/verzeichnisse.d.ts.map +0 -1
- package/dist/push/verzeichnisse.js +0 -158
- package/dist/push/verzeichnisse.js.map +0 -1
- package/dist/push.d.ts +0 -8
- package/dist/push.d.ts.map +0 -1
- package/dist/push.js +0 -306
- package/dist/push.js.map +0 -1
- package/dist/starter.d.ts +0 -4
- package/dist/starter.d.ts.map +0 -1
- package/dist/starter.js +0 -587
- package/dist/starter.js.map +0 -1
- package/dist/tiefpruefung.d.ts +0 -39
- package/dist/tiefpruefung.d.ts.map +0 -1
- package/dist/tiefpruefung.js +0 -56
- package/dist/tiefpruefung.js.map +0 -1
- package/dist/vertrag.d.ts +0 -6
- package/dist/vertrag.d.ts.map +0 -1
- package/dist/vertrag.js +0 -267
- package/dist/vertrag.js.map +0 -1
- package/dist/vertragSpaet.d.ts +0 -4
- package/dist/vertragSpaet.d.ts.map +0 -1
- package/dist/vertragSpaet.js +0 -158
- package/dist/vertragSpaet.js.map +0 -1
- package/dist/vorlagen.d.ts +0 -7
- package/dist/vorlagen.d.ts.map +0 -1
- package/dist/vorlagen.js +0 -83
- package/dist/vorlagen.js.map +0 -1
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import * as ablage from './zugang.js';
|
|
2
|
+
import * as projekt from './projekt.js';
|
|
3
|
+
import { absage, ruf } from './ruf.js';
|
|
4
|
+
/**
|
|
5
|
+
* Holen, bringen, live schalten. Die drei Befehle, bei denen etwas passiert.
|
|
6
|
+
*
|
|
7
|
+
* Was sie gemeinsam haben: sie zeigen VORHER, was sie tun wuerden, und tun es erst
|
|
8
|
+
* danach. Das ist keine Hoeflichkeit - ein Push, der ohne Rueckfrage schreibt, hat in
|
|
9
|
+
* diesem Haus schon einmal eine routes.ts von 305 auf 39 Zeilen gebracht und alle
|
|
10
|
+
* Datenwege stillgelegt.
|
|
11
|
+
*/
|
|
12
|
+
const OK = { code: 0 };
|
|
13
|
+
const FEHLER = { code: 1 };
|
|
14
|
+
/**
|
|
15
|
+
* Welche App und welche Umgebung dieser Aufruf meint.
|
|
16
|
+
*
|
|
17
|
+
* Die Reihenfolge ist die der Absicht: was am Aufruf steht, schlaegt die arkven.json,
|
|
18
|
+
* und die schlaegt die aktive Umgebung. Fehlt alles, ist das ein Fehler mit Grund -
|
|
19
|
+
* geraten wird nichts, denn aus einem geratenen Projekt wird ein Push in die falsche App.
|
|
20
|
+
*/
|
|
21
|
+
async function bestimmen(wurzel, opts) {
|
|
22
|
+
const verweis = projekt.lesen(wurzel);
|
|
23
|
+
const wahl = ablage.waehlen(ablage.lesen(), opts.umgebung ?? verweis?.umgebung);
|
|
24
|
+
if (!wahl.ok) {
|
|
25
|
+
opts.sage(wahl.grund);
|
|
26
|
+
opts.sage(wahl.ausweg);
|
|
27
|
+
return { ok: false, lauf: FEHLER };
|
|
28
|
+
}
|
|
29
|
+
const app = opts.app ?? verweis?.app;
|
|
30
|
+
if (!app) {
|
|
31
|
+
opts.sage('Dieser Ordner gehoert zu keiner App.');
|
|
32
|
+
opts.sage('Nenn sie einmal: arkven pull --app=<kennung>. Danach steht sie in arkven.json.');
|
|
33
|
+
opts.sage('Welche es gibt, zeigt: arkven status');
|
|
34
|
+
return { ok: false, lauf: FEHLER };
|
|
35
|
+
}
|
|
36
|
+
return { ok: true, u: wahl.umgebung, app };
|
|
37
|
+
}
|
|
38
|
+
// ── pull ─────────────────────────────────────────────────────────────────────
|
|
39
|
+
export async function pull(wurzel, opts) {
|
|
40
|
+
const wer = await bestimmen(wurzel, opts);
|
|
41
|
+
if (!wer.ok)
|
|
42
|
+
return wer.lauf;
|
|
43
|
+
const antwort = await ruf(wer.u.server, `/api/apps/${encodeURIComponent(wer.app)}/code`, { token: wer.u.token });
|
|
44
|
+
if (!antwort.ok) {
|
|
45
|
+
opts.sage(absage(antwort));
|
|
46
|
+
return FEHLER;
|
|
47
|
+
}
|
|
48
|
+
const kommt = [...antwort.daten.oberflaeche, ...antwort.daten.server];
|
|
49
|
+
const { dateien: hier } = projekt.sammeln(wurzel);
|
|
50
|
+
const alt = new Map(hier.map((d) => [d.pfad, d.inhalt]));
|
|
51
|
+
const neu = kommt.filter((d) => !alt.has(d.pfad));
|
|
52
|
+
const anders = kommt.filter((d) => alt.has(d.pfad) && alt.get(d.pfad) !== d.inhalt);
|
|
53
|
+
opts.sage('');
|
|
54
|
+
opts.sage(`Aus Arkven: ${antwort.daten.oberflaeche.length} Datei(en) Oberflaeche, ${antwort.daten.server.length} Server` +
|
|
55
|
+
(antwort.daten.stand ? ` (Stand ${antwort.daten.stand.slice(0, 8)})` : ''));
|
|
56
|
+
opts.sage(` ${neu.length} neu, ${anders.length} geaendert, ${kommt.length - neu.length - anders.length} unveraendert`);
|
|
57
|
+
/**
|
|
58
|
+
* Die Warnung vor dem Ueberschreiben, und nur wenn es etwas zu ueberschreiben gibt.
|
|
59
|
+
* Ein Satz, der bei jedem Aufruf steht, wird beim dritten Mal nicht mehr gelesen.
|
|
60
|
+
*/
|
|
61
|
+
if (anders.length > 0) {
|
|
62
|
+
opts.sage('');
|
|
63
|
+
opts.sage(' Diese Dateien werden ueberschrieben:');
|
|
64
|
+
for (const d of anders.slice(0, 12))
|
|
65
|
+
opts.sage(` ${d.pfad}`);
|
|
66
|
+
if (anders.length > 12)
|
|
67
|
+
opts.sage(` ... und ${anders.length - 12} weitere`);
|
|
68
|
+
}
|
|
69
|
+
if (neu.length === 0 && anders.length === 0) {
|
|
70
|
+
opts.sage('');
|
|
71
|
+
opts.sage('Hier ist schon alles auf dem Stand von Arkven.');
|
|
72
|
+
return OK;
|
|
73
|
+
}
|
|
74
|
+
if (!opts.bestaetigt) {
|
|
75
|
+
opts.sage('');
|
|
76
|
+
opts.sage('Es wurde nichts geschrieben. Zum Holen: arkven pull --ja');
|
|
77
|
+
return OK;
|
|
78
|
+
}
|
|
79
|
+
const n = projekt.schreibenAufPlatte(wurzel, kommt);
|
|
80
|
+
projekt.schreiben(wurzel, { app: wer.app, umgebung: wer.u.name });
|
|
81
|
+
opts.sage('');
|
|
82
|
+
opts.sage(`${n} Datei(en) geschrieben. Die Zuordnung steht in ${projekt.DATEI}.`);
|
|
83
|
+
return OK;
|
|
84
|
+
}
|
|
85
|
+
function vorschauZeigen(v, sage) {
|
|
86
|
+
sage('');
|
|
87
|
+
sage(` ${v.neu.length} neu, ${v.geaendert.length} geaendert, ${v.unveraendert} unveraendert`);
|
|
88
|
+
for (const p of v.neu.slice(0, 10))
|
|
89
|
+
sage(` neu ${p}`);
|
|
90
|
+
for (const p of v.geaendert.slice(0, 10))
|
|
91
|
+
sage(` geaendert ${p}`);
|
|
92
|
+
const gezeigt = Math.min(v.neu.length, 10) + Math.min(v.geaendert.length, 10);
|
|
93
|
+
const alle = v.neu.length + v.geaendert.length;
|
|
94
|
+
if (alle > gezeigt)
|
|
95
|
+
sage(` ... und ${alle - gezeigt} weitere`);
|
|
96
|
+
/**
|
|
97
|
+
* "fehlen" bekommt eine eigene Zeile und einen eigenen Satz, weil es die einzige
|
|
98
|
+
* Spalte ist, die von etwas handelt, das der Mensch NICHT geschickt hat. Sie werden
|
|
99
|
+
* nicht geloescht -- aber wer einen Unterordner allein hochschickt, soll es hier
|
|
100
|
+
* sehen und nicht spaeter merken.
|
|
101
|
+
*/
|
|
102
|
+
if (v.fehlen.length > 0) {
|
|
103
|
+
sage('');
|
|
104
|
+
sage(` ${v.fehlen.length} Datei(en) liegen in Arkven und kamen nicht mit. Sie bleiben stehen.`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export async function push(wurzel, opts) {
|
|
108
|
+
const wer = await bestimmen(wurzel, opts);
|
|
109
|
+
if (!wer.ok)
|
|
110
|
+
return wer.lauf;
|
|
111
|
+
const { dateien, uebersprungen } = projekt.sammeln(wurzel);
|
|
112
|
+
if (dateien.length === 0) {
|
|
113
|
+
opts.sage('In diesem Ordner ist kein Quelltext, den Arkven annehmen wuerde.');
|
|
114
|
+
opts.sage('Bist du im richtigen Ordner?');
|
|
115
|
+
return FEHLER;
|
|
116
|
+
}
|
|
117
|
+
const koerper = {
|
|
118
|
+
dateien: dateien.filter((d) => !projekt.istServerDatei(d.pfad)),
|
|
119
|
+
serverDateien: dateien.filter((d) => projekt.istServerDatei(d.pfad)),
|
|
120
|
+
...(opts.betreff ? { betreff: opts.betreff } : {}),
|
|
121
|
+
};
|
|
122
|
+
const weg = `/api/apps/${encodeURIComponent(wer.app)}/import`;
|
|
123
|
+
// Erst ohne "uebernehmen": das ist die Vorschau, und der Server schreibt dabei nichts.
|
|
124
|
+
const schau = await ruf(wer.u.server, weg, { token: wer.u.token, koerper });
|
|
125
|
+
const vorschau = schau.daten.vorschau;
|
|
126
|
+
if (!vorschau) {
|
|
127
|
+
opts.sage(absage(schau));
|
|
128
|
+
return FEHLER;
|
|
129
|
+
}
|
|
130
|
+
opts.sage('');
|
|
131
|
+
opts.sage(`Nach ${wer.app} in "${wer.u.name}":`);
|
|
132
|
+
vorschauZeigen(vorschau, opts.sage);
|
|
133
|
+
if (schau.daten.achtung) {
|
|
134
|
+
opts.sage('');
|
|
135
|
+
opts.sage(` ACHTUNG: ${String(schau.daten.achtung)}`);
|
|
136
|
+
}
|
|
137
|
+
if (uebersprungen.length > 0) {
|
|
138
|
+
opts.sage('');
|
|
139
|
+
opts.sage(` ${uebersprungen.length} Datei(en) sind kein Text und gehen diesen Weg nicht mit.`);
|
|
140
|
+
}
|
|
141
|
+
if (vorschau.neu.length === 0 && vorschau.geaendert.length === 0) {
|
|
142
|
+
opts.sage('');
|
|
143
|
+
opts.sage('Arkven ist schon auf diesem Stand.');
|
|
144
|
+
return OK;
|
|
145
|
+
}
|
|
146
|
+
if (!opts.bestaetigt) {
|
|
147
|
+
opts.sage('');
|
|
148
|
+
opts.sage('Es wurde nichts geschrieben. Zum Uebertragen: arkven push --ja');
|
|
149
|
+
return OK;
|
|
150
|
+
}
|
|
151
|
+
const echt = await ruf(wer.u.server, weg, { token: wer.u.token, koerper: { ...koerper, uebernehmen: true } });
|
|
152
|
+
if (!echt.ok) {
|
|
153
|
+
opts.sage(absage(echt));
|
|
154
|
+
return FEHLER;
|
|
155
|
+
}
|
|
156
|
+
projekt.schreiben(wurzel, { app: wer.app, umgebung: wer.u.name });
|
|
157
|
+
opts.sage('');
|
|
158
|
+
opts.sage(`${echt.daten.geschrieben} Datei(en) uebertragen.`);
|
|
159
|
+
if (echt.daten.vorher) {
|
|
160
|
+
opts.sage(`Der Stand davor ist gesichert (${echt.daten.vorher.slice(0, 8)}).`);
|
|
161
|
+
}
|
|
162
|
+
opts.sage('');
|
|
163
|
+
opts.sage('Sieh dir die App in Arkven an. Wenn sie stimmt: arkven live');
|
|
164
|
+
return OK;
|
|
165
|
+
}
|
|
166
|
+
// ── live ─────────────────────────────────────────────────────────────────────
|
|
167
|
+
export async function live(wurzel, opts) {
|
|
168
|
+
const wer = await bestimmen(wurzel, opts);
|
|
169
|
+
if (!wer.ok)
|
|
170
|
+
return wer.lauf;
|
|
171
|
+
if (!opts.bestaetigt) {
|
|
172
|
+
opts.sage('');
|
|
173
|
+
opts.sage(`Das schaltet ${wer.app} in "${wer.u.name}" fuer alle frei, die die Adresse haben.`);
|
|
174
|
+
opts.sage('Zum Ausrollen: arkven live --ja');
|
|
175
|
+
return OK;
|
|
176
|
+
}
|
|
177
|
+
const antwort = await ruf(wer.u.server, `/api/apps/${encodeURIComponent(wer.app)}/live`, { token: wer.u.token, koerper: {} });
|
|
178
|
+
if (!antwort.ok) {
|
|
179
|
+
opts.sage(absage(antwort));
|
|
180
|
+
return FEHLER;
|
|
181
|
+
}
|
|
182
|
+
opts.sage('');
|
|
183
|
+
opts.sage(`Live: ${antwort.daten.adresse}`);
|
|
184
|
+
return OK;
|
|
185
|
+
}
|
package/dist/zugang.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
export const STANDARD_SERVER = 'https://app.arkven.de';
|
|
5
|
+
/**
|
|
6
|
+
* Der Name, den eine Adresse bekommt, wenn niemand einen nennt.
|
|
7
|
+
*
|
|
8
|
+
* Aus der Adresse abgeleitet und nicht durchnummeriert: "staging" sagt einem Menschen
|
|
9
|
+
* etwas, "umgebung-2" nicht. Wer zwei Adressen mit demselben abgeleiteten Namen hat,
|
|
10
|
+
* nennt einen davon selbst.
|
|
11
|
+
*/
|
|
12
|
+
export function namenVorschlag(server) {
|
|
13
|
+
const host = server.replace(/^https?:\/\//, '').replace(/\/.*$/, '');
|
|
14
|
+
if (host === 'app.arkven.de')
|
|
15
|
+
return 'produktion';
|
|
16
|
+
if (host === 'app.s.arkven.de')
|
|
17
|
+
return 'staging';
|
|
18
|
+
if (/^(localhost|127\.)/.test(host))
|
|
19
|
+
return 'lokal';
|
|
20
|
+
return host.split('.')[0] || 'arkven';
|
|
21
|
+
}
|
|
22
|
+
export function datei() {
|
|
23
|
+
return path.join(os.homedir(), '.arkven', 'zugang.json');
|
|
24
|
+
}
|
|
25
|
+
export function lesen() {
|
|
26
|
+
try {
|
|
27
|
+
const roh = JSON.parse(fs.readFileSync(datei(), 'utf8'));
|
|
28
|
+
if (Array.isArray(roh.umgebungen) && typeof roh.aktiv === 'string') {
|
|
29
|
+
return { aktiv: roh.aktiv, umgebungen: roh.umgebungen };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Keine Datei, kaputte Datei, keine Rechte: alles dasselbe fuer den Aufrufer, und
|
|
34
|
+
// alles heisst "hier ist noch niemand angemeldet". Ein Fehler waere hier falsch -
|
|
35
|
+
// der erste Aufruf auf einem frischen Rechner ist der Normalfall.
|
|
36
|
+
}
|
|
37
|
+
return { aktiv: '', umgebungen: [] };
|
|
38
|
+
}
|
|
39
|
+
export function schreiben(a) {
|
|
40
|
+
const ziel = datei();
|
|
41
|
+
fs.mkdirSync(path.dirname(ziel), { recursive: true });
|
|
42
|
+
fs.writeFileSync(ziel, JSON.stringify(a, null, 2) + '\n', { mode: 0o600 });
|
|
43
|
+
try {
|
|
44
|
+
fs.chmodSync(ziel, 0o600);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Windows kennt den Modus nicht; dort schuetzt das Benutzerverzeichnis.
|
|
48
|
+
}
|
|
49
|
+
return ziel;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Eine Umgebung eintragen oder ihren Token erneuern, und sie aktiv machen.
|
|
53
|
+
*
|
|
54
|
+
* Gleicher NAME heisst dieselbe Umgebung, auch wenn die Adresse sich geaendert hat:
|
|
55
|
+
* wer "staging" neu anmeldet, will seinen alten staging-Eintrag ersetzen und keinen
|
|
56
|
+
* zweiten daneben.
|
|
57
|
+
*/
|
|
58
|
+
export function eintragen(a, neu) {
|
|
59
|
+
const ohne = a.umgebungen.filter((u) => u.name !== neu.name);
|
|
60
|
+
return { aktiv: neu.name, umgebungen: [...ohne, neu] };
|
|
61
|
+
}
|
|
62
|
+
export function entfernen(a, name) {
|
|
63
|
+
const uebrig = a.umgebungen.filter((u) => u.name !== name);
|
|
64
|
+
return {
|
|
65
|
+
umgebungen: uebrig,
|
|
66
|
+
// Wer die aktive Umgebung entfernt, steht danach nicht im Leeren: die naechste
|
|
67
|
+
// vorhandene wird aktiv. Gibt es keine, ist die Ablage leer und der naechste
|
|
68
|
+
// Befehl sagt, dass eine Anmeldung fehlt.
|
|
69
|
+
aktiv: a.aktiv === name ? (uebrig[0]?.name ?? '') : a.aktiv,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Welche Umgebung gilt jetzt.
|
|
74
|
+
*
|
|
75
|
+
* Die Reihenfolge ist die Reihenfolge der Absicht: was am Aufruf steht, schlaegt die
|
|
76
|
+
* Umgebungsvariable, und die schlaegt die gespeicherte Wahl. Ein Vorgabewert, der eine
|
|
77
|
+
* Antwort erfindet, kommt hier nicht vor - fehlt alles, ist das ein Fehler mit Grund.
|
|
78
|
+
*/
|
|
79
|
+
export function waehlen(a, genannt) {
|
|
80
|
+
const name = genannt || process.env.ARKVEN_UMGEBUNG || a.aktiv;
|
|
81
|
+
if (!name) {
|
|
82
|
+
return {
|
|
83
|
+
ok: false,
|
|
84
|
+
grund: 'Auf diesem Rechner ist noch keine Umgebung angemeldet.',
|
|
85
|
+
ausweg: 'Melde dich an: arkven login',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const gefunden = a.umgebungen.find((u) => u.name === name);
|
|
89
|
+
if (!gefunden) {
|
|
90
|
+
const da = a.umgebungen.map((u) => u.name).join(', ');
|
|
91
|
+
return {
|
|
92
|
+
ok: false,
|
|
93
|
+
grund: `Eine Umgebung "${name}" ist hier nicht angemeldet.`,
|
|
94
|
+
ausweg: da
|
|
95
|
+
? `Angemeldet sind: ${da}. Waehl eine davon mit "arkven umgebung <name>", oder melde dich neu an.`
|
|
96
|
+
: 'Melde dich an: arkven login',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (gefunden.laeuftAbAm < Date.now()) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
grund: `Der Zugang fuer "${name}" ist abgelaufen.`,
|
|
103
|
+
ausweg: `Melde dich neu an: arkven login --umgebung=${name}`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return { ok: true, umgebung: gefunden };
|
|
107
|
+
}
|
|
108
|
+
/** Wieviele Tage der Zugang noch gilt, als Satz. */
|
|
109
|
+
export function restlaufzeit(u) {
|
|
110
|
+
const tage = Math.ceil((u.laeuftAbAm - Date.now()) / 86_400_000);
|
|
111
|
+
if (tage <= 0)
|
|
112
|
+
return 'abgelaufen';
|
|
113
|
+
return tage === 1 ? 'noch einen Tag' : `noch ${tage} Tage`;
|
|
114
|
+
}
|
package/package.json
CHANGED
|
@@ -1,28 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arkvenai/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Arkven auf deinem Rechner: arkven login, arkven pull, aendern, arkven push, arkven push --live.",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"bin": {
|
|
8
8
|
"arkven": "./dist/index.js"
|
|
9
9
|
},
|
|
10
10
|
"main": "./dist/index.js",
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"exports": {
|
|
13
|
-
".": {
|
|
14
|
-
"types": "./dist/index.d.ts",
|
|
15
|
-
"import": "./dist/index.js"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
11
|
"files": [
|
|
19
12
|
"dist",
|
|
20
|
-
"README.md"
|
|
21
|
-
"CHANGELOG.md"
|
|
13
|
+
"README.md"
|
|
22
14
|
],
|
|
23
15
|
"keywords": [
|
|
24
16
|
"arkven",
|
|
25
|
-
"deploy",
|
|
26
17
|
"cli",
|
|
27
18
|
"pull",
|
|
28
19
|
"push"
|
|
@@ -34,32 +25,9 @@
|
|
|
34
25
|
"registry": "https://registry.npmjs.org",
|
|
35
26
|
"access": "public"
|
|
36
27
|
},
|
|
37
|
-
"repository": {
|
|
38
|
-
"type": "git",
|
|
39
|
-
"url": "git+https://github.com/arkvenai/arkven-pakete.git",
|
|
40
|
-
"directory": "packages/cli"
|
|
41
|
-
},
|
|
42
28
|
"scripts": {
|
|
43
|
-
"build": "tsc -p
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
"verify:cli-login": "tsc -p tsconfig.json && node --test test/login.test.mjs",
|
|
48
|
-
"verify:starter": "tsc -p tsconfig.json && node --test test/starter.test.mjs",
|
|
49
|
-
"verify:cli-push": "tsc -p tsconfig.json && node --test test/push.test.mjs",
|
|
50
|
-
"verify:vertrag-check": "tsc -p tsconfig.json && node --test test/vertrag-check.test.mjs",
|
|
51
|
-
"verify:befund-ausgaben": "tsc -p tsconfig.json && node --test test/befund-ausgaben.test.mjs",
|
|
52
|
-
"verify:cli-herkunft": "node --test test/herkunftsnachweis.test.mjs",
|
|
53
|
-
"verify:cli-agents": "tsc -p tsconfig.json && node --test test/agents-md.test.mjs",
|
|
54
|
-
"verify:cli-rundlauf": "tsc -p tsconfig.json && node --test test/code-ablage.test.mjs",
|
|
55
|
-
"verify:cli-mcp": "tsc -p tsconfig.json && node --test test/mcp.test.mjs",
|
|
56
|
-
"verify": "npm run verify:cli-fix && npm run verify:init-erkennung && npm run verify:cli-login && npm run verify:starter && npm run verify:cli-push && npm run verify:vertrag-check && npm run verify:befund-ausgaben && npm run verify:cli-herkunft && npm run verify:cli-agents && npm run verify:cli-rundlauf && npm run verify:cli-mcp && npm run verify:cli-copy",
|
|
57
|
-
"veroeffentlichen": "node scripts/veroeffentlichen.mjs",
|
|
58
|
-
"verify:cli-copy": "node --test test/copy-em-dash.test.mjs"
|
|
59
|
-
},
|
|
60
|
-
"devDependencies": {
|
|
61
|
-
"@types/node": "^20.10.6",
|
|
62
|
-
"typescript": "^5.6.3"
|
|
63
|
-
},
|
|
64
|
-
"dependencies": {}
|
|
29
|
+
"build": "tsc -p .",
|
|
30
|
+
"pruefe": "node --import tsx ../pruefe-cli.mjs",
|
|
31
|
+
"veroeffentlichen": "npm run build && npm publish --access public"
|
|
32
|
+
}
|
|
65
33
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# Änderungen
|
|
2
|
-
|
|
3
|
-
## 0.5.1 - 2026-08-26
|
|
4
|
-
|
|
5
|
-
### Geändert
|
|
6
|
-
|
|
7
|
-
- **README und Paket-Beschreibung sagen jetzt zuerst, was zu tun ist.** Oben stehen die zwei
|
|
8
|
-
Wege als nummerierte Schritte: `login` → `pull` → ändern → `push` → `push --deploy` für eine
|
|
9
|
-
App, die es in Arkven schon gibt, und `login` → `init` → `push` → `push --deploy` für ein
|
|
10
|
-
Projekt vom eigenen Rechner. Die Befehlsteile darunter erklären die Schalter, nicht mehr den
|
|
11
|
-
Einstieg.
|
|
12
|
-
- **`arkven help` zeigt denselben Rundlauf** vor der Befehlsliste.
|
|
13
|
-
- Zwei veraltete Aussagen sind aus der README verschwunden: „angekündigt und noch nicht
|
|
14
|
-
enthalten: `mcp`" (`arkven mcp` gibt es seit 0.5.0) und „die Gates der Plattform laufen hier
|
|
15
|
-
nicht mit" (`check --tief` und `push` fahren sie).
|
|
16
|
-
|
|
17
|
-
## 0.5.0 — 2026-08-25
|
|
18
|
-
|
|
19
|
-
### Neu
|
|
20
|
-
|
|
21
|
-
- **`arkven pull` braucht keinen vorherigen `push` mehr.** Kennt der Ordner noch kein Projekt,
|
|
22
|
-
zeigt `pull` die Projekte deiner Teams und fragt, welches gemeint ist. `--projekt=<kennung>`
|
|
23
|
-
beantwortet die Frage vorweg. Ohne Terminal wird nicht geraten: die Liste wird ausgegeben und
|
|
24
|
-
der Schalter genannt.
|
|
25
|
-
|
|
26
|
-
Vorher las `pull` die Kennung aus `arkven.json`, und dorthin schrieb sie nur `push`. Wer seine
|
|
27
|
-
App **in** Arkven gebaut hat, haette also erst pushen muessen, um ziehen zu duerfen, und ein
|
|
28
|
-
`push` aus einem leeren Ordner ersetzt die lebende App durch nichts. Der Rueckweg braucht
|
|
29
|
-
keinen Hinweg.
|
|
30
|
-
|
|
31
|
-
- **Das Layout kommt aus dem Projekt.** Nach der Auswahl traegt `pull` die `arkven.json` des
|
|
32
|
-
Projekts nach und legt die darin genannten Ordner an, bevor er ablegt. Ein leeres Verzeichnis
|
|
33
|
-
bekommt damit den Baum, den ein spaeterer `push` wieder erwartet, statt eines flachen.
|
|
34
|
-
|
|
35
|
-
### Behoben
|
|
36
|
-
|
|
37
|
-
- **Die Deklaration landete im falschen Ordner.** `push` holt `arkven.json`,
|
|
38
|
-
`arkven/bauplan.json`, `arkven/auftrag.md` und `arkven/mails/*.md` aus der Projektwurzel;
|
|
39
|
-
`pull` legte sie in den Frontend-Ordner. In einem echten Projekt (487 Dateien) lagen dadurch
|
|
40
|
-
ein Bauplan und vier Mail-Vorlagen doppelt, mit verschiedenem Inhalt, und der naechste `push`
|
|
41
|
-
haette die gezogene Fassung an dieser Stelle nicht wieder eingesammelt. Jetzt gilt beidseitig
|
|
42
|
-
dieselbe Grenze.
|
|
43
|
-
|
|
44
|
-
### Bekannt und noch offen
|
|
45
|
-
|
|
46
|
-
- **Der Selbstabgleich am Ende von `npm run veroeffentlichen` misst die zweite Tuer nicht.** Er
|
|
47
|
-
ruft das Packument ohne Ausweis ab; GitHub Packages antwortet darauf nicht, und der Lauf liest
|
|
48
|
-
das als „keine Fassung da". Nach einem erfolgreichen Upload meldet er deshalb trotzdem einen
|
|
49
|
-
Fehlschlag.
|
|
50
|
-
|
|
51
|
-
- **Dokumente kommen nicht mit.** `pull` meldet dazu „dieser Zugang deckt den Bereich Dokumente
|
|
52
|
-
nicht ab". Der Server lehnt in Wahrheit ab, weil der Aufruf ohne Team-Angabe geht. Der Rest des
|
|
53
|
-
Laufs ist davon unberuehrt und vollstaendig geschrieben.
|
|
54
|
-
- **Bauplan und Mail-Vorlagen haben zwei Quellen** (Deklaration und Code-Stand). Sie kollidieren
|
|
55
|
-
jetzt sichtbar in der Vorschau, statt still auseinanderzulaufen; der Code-Stand gewinnt.
|
|
56
|
-
|
|
57
|
-
## 0.4.0 — 2026-08-03
|
|
58
|
-
|
|
59
|
-
Diese Fassung entstand beim ersten echten Live-Gang eines mitgebrachten Projekts. Jeder Punkt unten
|
|
60
|
-
ist ein gemessener Fehlschlag, kein Wunsch.
|
|
61
|
-
|
|
62
|
-
### Neu
|
|
63
|
-
|
|
64
|
-
- **Bilder, Videos und Schriften reisen mit.** Vorher liess `push` sie weg (Binaerdateien und alles
|
|
65
|
-
ueber 1 MB) und sagte das auch — und die App ging mit kaputten Bildern live. Sie gehen jetzt einen
|
|
66
|
-
eigenen Weg, einzeln, und nur was sich geaendert hat.
|
|
67
|
-
- **`arkven pull`** — der Rueckweg. Holt Bauplan und Auftrag aus Arkven ins Projekt. Zeigt erst, was
|
|
68
|
-
sich aendern wuerde, dann schreibt es.
|
|
69
|
-
- **`arkven check --tief`** — die ECHTEN Gates der Plattform laufen mit, dieselbe Pruefung wie beim
|
|
70
|
-
Ausrollen. Nicht nachgebaut: der Baum geht an Arkven, dort laeuft `verifyBackend`.
|
|
71
|
-
- **`push` faehrt sie ebenfalls.** Ein blockierender Punkt haelt die Uebertragung an, BEVOR eine
|
|
72
|
-
Datei reist.
|
|
73
|
-
- **Bauplan und Auftrag im Repo** (`arkven/bauplan.json`, `arkven/auftrag.md`). Sie reisen mit und
|
|
74
|
-
erscheinen im Cockpit; `check` prueft sie lokal, bevor sie reisen.
|
|
75
|
-
- **Eigene Mail-Vorlagen** (`arkven/mails/<key>.md`) — nur die geaenderten. Der Plattform-Standard
|
|
76
|
-
bleibt in Arkven.
|
|
77
|
-
- **`braucht`** in `arkven.json`: welche Dienste das Projekt benoetigt. Ergaenzt die Messung am Code,
|
|
78
|
-
ersetzt sie nicht.
|
|
79
|
-
- **Die Anker werden geprueft** — `arkven/anker-fehlt`, `anker-doppelt`, `anker-unbekannt`. Sie
|
|
80
|
-
beantworten „warum steht im Cockpit 0 von 9", bevor jemand fragen muss: mit Screen-Name, Adresse
|
|
81
|
-
und der exakten Kennung, die ins Wurzelelement gehoert. Die Kennungen kommen aus Arkven, sie werden
|
|
82
|
-
nicht nachgerechnet.
|
|
83
|
-
- **`arkven fix` setzt sie auch.** Anker halten nichts auf, deshalb fielen sie vorher aus dem
|
|
84
|
-
Agenten-Auftrag heraus — `fix` konnte genau das nicht beheben, wofuer die Regeln geschrieben
|
|
85
|
-
wurden. Sie stehen jetzt im Auftrag, getrennt von den blockierenden Punkten, samt dem Fallstrick:
|
|
86
|
-
gibt die Komponente ein Fragment zurueck, braucht der Traeger `display: contents`.
|
|
87
|
-
- **`arkven/mail-unbekannt`** — ein Tippfehler im Dateinamen erzeugte bisher eine Vorlage, die
|
|
88
|
-
niemand je verschickt. Sie lag im Repo, sah gepflegt aus, und die echte blieb auf dem
|
|
89
|
-
Plattform-Standard. Der Vorschlag rechnet echte Aehnlichkeit; ab zwei Zeichen Unterschied wird die
|
|
90
|
-
Liste genannt statt geraten.
|
|
91
|
-
- **`--sarif`** — dieselben Befunde in der Form, die GitHub Code-Scanning, VS Code und CI schon
|
|
92
|
-
lesen. Damit erscheint ein Befund an der Zeile im Pull-Request. `ungeprueft` wird dabei NICHT zu
|
|
93
|
-
einem kleinen Mangel verkleinert, sondern steht als `kind: open` da: gelaufen, kein Urteil.
|
|
94
|
-
|
|
95
|
-
### Behoben
|
|
96
|
-
|
|
97
|
-
- `push --deploy` tat nichts, wenn es nichts zu uebertragen gab — genau der haeufigste Fall nach
|
|
98
|
-
einem gescheiterten Deploy.
|
|
99
|
-
- Das Ausrollen scheiterte mit 401, obwohl die Uebertragung mit demselben Token gelang.
|
|
100
|
-
|
|
101
|
-
### Hinweis
|
|
102
|
-
|
|
103
|
-
Der Bauplan bestimmt, was im Cockpit als „gebaut" gilt. Damit ein Screen zaehlt, traegt sein
|
|
104
|
-
Wurzelelement `data-arkven-screen="scr-N"`. Ohne diesen Anker bleibt er offen, auch wenn er laengst
|
|
105
|
-
funktioniert.
|
package/dist/agents.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare const MARKE_START = "<!-- arkven:start \u00B7 dieser Block wird von `arkven init` gepflegt -->";
|
|
2
|
-
export declare const MARKE_START_ALT = "<!-- arkven:start \u2014 dieser Block wird von `arkven init` gepflegt -->";
|
|
3
|
-
export declare const MARKE_ENDE = "<!-- arkven:ende -->";
|
|
4
|
-
export interface AgentsLage {
|
|
5
|
-
eigenerServer: boolean;
|
|
6
|
-
eigenerFrontendBau: boolean;
|
|
7
|
-
eigenesSchema: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare function agentsBlock(lage: AgentsLage): string;
|
|
10
|
-
export declare function agentsNachher(vorher: string | undefined, lage: AgentsLage): string | undefined;
|
|
11
|
-
//# sourceMappingURL=agents.d.ts.map
|
package/dist/agents.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,8EAAyE,CAAA;AAEjG,eAAO,MAAM,eAAe,8EAAyE,CAAA;AACrG,eAAO,MAAM,UAAU,yBAAyB,CAAA;AAEhD,MAAM,WAAW,UAAU;IAEzB,aAAa,EAAE,OAAO,CAAA;IAEtB,kBAAkB,EAAE,OAAO,CAAA;IAE3B,aAAa,EAAE,OAAO,CAAA;CACvB;AAsBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA4CpD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAiB9F"}
|
package/dist/agents.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
export const MARKE_START = '<!-- arkven:start · dieser Block wird von `arkven init` gepflegt -->';
|
|
2
|
-
export const MARKE_START_ALT = '<!-- arkven:start — dieser Block wird von `arkven init` gepflegt -->';
|
|
3
|
-
export const MARKE_ENDE = '<!-- arkven:ende -->';
|
|
4
|
-
function herkunftsZeilen(lage) {
|
|
5
|
-
const zeilen = [];
|
|
6
|
-
zeilen.push(lage.eigenerServer
|
|
7
|
-
? '- **Der Server gehört diesem Projekt.** Arkven erzeugt hier nichts nach und überschreibt nichts. Was im Server-Verzeichnis steht, hast du geschrieben.'
|
|
8
|
-
: '- **Den Server stellt Arkven.** Er wird bei jedem Ausrollen neu erzeugt. Änderungen daran gehen beim nächsten Lauf verloren, ohne Meldung.');
|
|
9
|
-
zeilen.push(lage.eigenerFrontendBau
|
|
10
|
-
? '- **Den Frontend-Bau führt dieses Projekt selbst.** Deine Bau-Konfiguration bleibt unberührt.'
|
|
11
|
-
: '- **Den Frontend-Bau stellt Arkven** (vite). Eine eigene Bau-Konfiguration hier wirkt nicht.');
|
|
12
|
-
zeilen.push(lage.eigenesSchema
|
|
13
|
-
? '- **Die Migrationen gehören diesem Projekt.** Sie gewinnen gegen erzeugte. `drizzle/meta/_journal.json` muss mitreisen, sonst läuft keine einzige SQL-Datei.'
|
|
14
|
-
: '- **Die Migrationen erzeugt Arkven** aus dem Schema. Handgeschriebenes SQL hier wird nicht ausgeführt.');
|
|
15
|
-
return zeilen;
|
|
16
|
-
}
|
|
17
|
-
export function agentsBlock(lage) {
|
|
18
|
-
return [
|
|
19
|
-
MARKE_START,
|
|
20
|
-
'',
|
|
21
|
-
'## Diese App läuft auf Arkven',
|
|
22
|
-
'',
|
|
23
|
-
'Arkven baut die App in einen Container und prüft sie vor dem Veröffentlichen. Was diese Prüfung',
|
|
24
|
-
'nicht besteht, geht nicht live. Die Regeln unten sind deshalb keine Empfehlungen.',
|
|
25
|
-
'',
|
|
26
|
-
'### Was dir gehört und was Arkven stellt',
|
|
27
|
-
'',
|
|
28
|
-
...herkunftsZeilen(lage),
|
|
29
|
-
'',
|
|
30
|
-
'### Die Befehle',
|
|
31
|
-
'',
|
|
32
|
-
'```bash',
|
|
33
|
-
'arkven check # prüft dieses Verzeichnis gegen den Container-Vertrag (kein Netz nötig)',
|
|
34
|
-
'arkven check --json # dasselbe maschinenlesbar, mit stabilen Regel-Kennungen',
|
|
35
|
-
'arkven check --tief # zusätzlich die echten Tore der Plattform (braucht `arkven login`)',
|
|
36
|
-
'arkven push # zeigt erst, was passieren würde, und überträgt es dann',
|
|
37
|
-
'```',
|
|
38
|
-
'',
|
|
39
|
-
'`arkven check` ist die Abnahme. Wenn du eine Änderung für fertig hältst, ist sie es, sobald',
|
|
40
|
-
'dieser Lauf grün ist, nicht vorher und nicht, weil sie plausibel aussieht.',
|
|
41
|
-
'',
|
|
42
|
-
'### Was du nicht anfassen darfst',
|
|
43
|
-
'',
|
|
44
|
-
'- **`.env`**: sie verlässt diesen Rechner nie und steht in keinem Push. Trage nichts hinein,',
|
|
45
|
-
' was die App zum Laufen braucht; dafür gibt es die Umgebungsvariablen in Arkven.',
|
|
46
|
-
'- **`arkven/nachweis.md`**: ein gerechneter Bericht, keine Quelle. Er kommt beim Holen herunter',
|
|
47
|
-
' und geht nie zurück. Ihn zu bearbeiten ändert nichts und täuscht einen Stand vor.',
|
|
48
|
-
'- **`arkven.spec.json`**: der Prüf-Vertrag. Arkven schreibt ihn fort. Wer einen Bereich baut,',
|
|
49
|
-
' ohne ihn dort zu nennen, bekommt für ihn **keine** Prüfung: die Fläche geht ungeprüft live.',
|
|
50
|
-
'',
|
|
51
|
-
'### Zwei Fallstricke, die still bleiben',
|
|
52
|
-
'',
|
|
53
|
-
'1. **Eine Wahrheit, ein Pfad.** Lege keinen zweiten Speicher für dieselbe Sache an und keinen',
|
|
54
|
-
' zweiten Weg, dieselbe Frage zu beantworten. Zwei Quellen laufen auseinander, und niemand',
|
|
55
|
-
' merkt es, bis die Antworten sich widersprechen.',
|
|
56
|
-
'2. **Kein Zustand, der wie Erfolg aussieht.** Kein leerer `catch`, kein Vorgabewert für etwas,',
|
|
57
|
-
' das nicht gemessen werden konnte. Was sich nicht messen lässt, wird gemeldet, nicht geraten.',
|
|
58
|
-
'',
|
|
59
|
-
MARKE_ENDE,
|
|
60
|
-
].join('\n');
|
|
61
|
-
}
|
|
62
|
-
export function agentsNachher(vorher, lage) {
|
|
63
|
-
const block = agentsBlock(lage);
|
|
64
|
-
if (vorher === undefined) {
|
|
65
|
-
return ['# Hinweise für Agenten', '', block, ''].join('\n');
|
|
66
|
-
}
|
|
67
|
-
const start = vorher.includes(MARKE_START) ? vorher.indexOf(MARKE_START) : vorher.indexOf(MARKE_START_ALT);
|
|
68
|
-
const ende = vorher.indexOf(MARKE_ENDE);
|
|
69
|
-
if (start >= 0 && ende > start) {
|
|
70
|
-
const neu = vorher.slice(0, start) + block + vorher.slice(ende + MARKE_ENDE.length);
|
|
71
|
-
return neu === vorher ? undefined : neu;
|
|
72
|
-
}
|
|
73
|
-
const basis = vorher.endsWith('\n') || vorher === '' ? vorher : `${vorher}\n`;
|
|
74
|
-
return `${basis}\n${block}\n`;
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=agents.js.map
|
package/dist/agents.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,WAAW,GAAG,sEAAsE,CAAA;AAEjG,MAAM,CAAC,MAAM,eAAe,GAAG,sEAAsE,CAAA;AACrG,MAAM,CAAC,MAAM,UAAU,GAAG,sBAAsB,CAAA;AAWhD,SAAS,eAAe,CAAC,IAAgB;IACvC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,aAAa;QAChB,CAAC,CAAC,wJAAwJ;QAC1J,CAAC,CAAC,4IAA4I,CACjJ,CAAA;IACD,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,kBAAkB;QACrB,CAAC,CAAC,+FAA+F;QACjG,CAAC,CAAC,8FAA8F,CACnG,CAAA;IACD,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,aAAa;QAChB,CAAC,CAAC,8JAA8J;QAChK,CAAC,CAAC,wGAAwG,CAC7G,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,OAAO;QACL,WAAW;QACX,EAAE;QACF,+BAA+B;QAC/B,EAAE;QACF,iGAAiG;QACjG,mFAAmF;QACnF,EAAE;QACF,0CAA0C;QAC1C,EAAE;QACF,GAAG,eAAe,CAAC,IAAI,CAAC;QACxB,EAAE;QACF,iBAAiB;QACjB,EAAE;QACF,SAAS;QACT,gGAAgG;QAChG,gFAAgF;QAChF,2FAA2F;QAC3F,gFAAgF;QAChF,KAAK;QACL,EAAE;QACF,6FAA6F;QAC7F,4EAA4E;QAC5E,EAAE;QACF,kCAAkC;QAClC,EAAE;QACF,8FAA8F;QAC9F,mFAAmF;QACnF,iGAAiG;QACjG,qFAAqF;QACrF,+FAA+F;QAC/F,+FAA+F;QAC/F,EAAE;QACF,yCAAyC;QACzC,EAAE;QACF,+FAA+F;QAC/F,6FAA6F;QAC7F,oDAAoD;QACpD,gGAAgG;QAChG,iGAAiG;QACjG,EAAE;QACF,UAAU;KACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA0B,EAAE,IAAgB;IACxE,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAE/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,wBAAwB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1G,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAEvC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QACnF,OAAO,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAA;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAA;IAC7E,OAAO,GAAG,KAAK,KAAK,KAAK,IAAI,CAAA;AAC/B,CAAC"}
|
package/dist/auftrag.d.ts
DELETED
package/dist/auftrag.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auftrag.d.ts","sourceRoot":"","sources":["../src/auftrag.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CA+C/C"}
|
package/dist/auftrag.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { fuerAgenten, fuerAgentenZusaetzlich } from './befund.js';
|
|
2
|
-
export function baueAuftrag(e) {
|
|
3
|
-
const zuTun = fuerAgenten(e.befunde);
|
|
4
|
-
const kuer = fuerAgentenZusaetzlich(e.befunde);
|
|
5
|
-
if (zuTun.length === 0 && kuer.length === 0)
|
|
6
|
-
return '';
|
|
7
|
-
const punkte = zuTun
|
|
8
|
-
.map((b, i) => {
|
|
9
|
-
const zeilen = [`${i + 1}. [${b.regel}]${b.ort ? ` (${b.ort})` : ''}`, ` Was gilt: ${b.titel}`, ` Ziel: ${b.ausweg}`];
|
|
10
|
-
return zeilen.join('\n');
|
|
11
|
-
})
|
|
12
|
-
.join('\n\n');
|
|
13
|
-
const kuerZeilen = kuer.map((b, i) => [`${i + 1}. [${b.regel}]${b.ort ? ` (${b.ort})` : ''}`, ` Was gilt: ${b.titel}`, ` Ziel: ${b.ausweg}`].join('\n'));
|
|
14
|
-
const kuerText = kuer.length
|
|
15
|
-
? ['', '', `Außerdem ${kuer.length} Punkt(e), die NICHTS aufhalten und die App trotzdem besser machen:`, '', kuerZeilen.join('\n\n'), '', 'Diese zuletzt, nach den Punkten oben.'].join('\n')
|
|
16
|
-
: '';
|
|
17
|
-
if (zuTun.length === 0) {
|
|
18
|
-
return `Dieses Projekt läuft auf Arkven, und der Container-Vertrag hält.${kuerText}
|
|
19
|
-
|
|
20
|
-
Bitte arbeite die Punkte im Projektverzeichnis ab. Regeln für diese Arbeit:
|
|
21
|
-
|
|
22
|
-
- Ändere so wenig wie nötig. Kein Umbau, der über die genannten Punkte hinausgeht.
|
|
23
|
-
- Erhalte das Verhalten der Anwendung.
|
|
24
|
-
- Committe nichts und pushe nichts. Die Änderungen bleiben als Arbeitsstand stehen.
|
|
25
|
-
`;
|
|
26
|
-
}
|
|
27
|
-
return `Dieses Projekt soll auf Arkven laufen. Arkven baut jede App in einen Container, der
|
|
28
|
-
\`src/index.ts\` mit tsx startet, den Port über PORT und die Datenbank über DATABASE_URL
|
|
29
|
-
hereingibt, und nur die \`dependencies\` der Wurzel-package.json installiert.
|
|
30
|
-
|
|
31
|
-
Gegen diesen Vertrag halten ${zuTun.length} Punkt(e) nicht:
|
|
32
|
-
|
|
33
|
-
${punkte}${kuerText}
|
|
34
|
-
|
|
35
|
-
Bitte behebe sie im Projektverzeichnis. Regeln für diese Arbeit:
|
|
36
|
-
|
|
37
|
-
- Ändere so wenig wie nötig. Kein Umbau, der über die genannten Punkte hinausgeht.
|
|
38
|
-
- Erhalte das Verhalten der Anwendung. Wo eine Umgebungsvariable neu gelesen wird, bleibt der
|
|
39
|
-
bisherige Wert der Rückfall für lokale Läufe.
|
|
40
|
-
- Committe nichts und pushe nichts. Die Änderungen bleiben als Arbeitsstand stehen.
|
|
41
|
-
- Wenn ein Punkt eine Entscheidung verlangt, die nur ein Mensch treffen kann, lass ihn liegen und
|
|
42
|
-
sage am Ende, welcher und warum.
|
|
43
|
-
- Behaupte am Ende NICHT, alles sei behoben. Das misst \`arkven check\` gleich selbst.`;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=auftrag.js.map
|
package/dist/auftrag.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auftrag.js","sourceRoot":"","sources":["../src/auftrag.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAGjE,MAAM,UAAU,WAAW,CAAC,CAAW;IACrC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEtD,MAAM,MAAM,GAAG,KAAK;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACzH,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAA;IAEf,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtH,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;QAC1B,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,IAAI,CAAC,MAAM,qEAAqE,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,uCAAuC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7L,CAAC,CAAC,EAAE,CAAA;IAEN,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,mEAAmE,QAAQ;;;;;;;CAOrF,CAAA;IACC,CAAC;IAED,OAAO;;;;8BAIqB,KAAK,CAAC,MAAM;;EAExC,MAAM,GAAG,QAAQ;;;;;;;;;;uFAUoE,CAAA;AACvF,CAAC"}
|
package/dist/bauplan.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Befund } from './befund.js';
|
|
2
|
-
import { BAUPLAN_DATEI, AUFTRAG_DATEI } from './geteilt/bauplan/index.js';
|
|
3
|
-
export { BAUPLAN_DATEI, AUFTRAG_DATEI };
|
|
4
|
-
export declare function pruefeBauplan(wurzel: string): Befund[];
|
|
5
|
-
export declare function pruefeBraucht(wurzel: string, braucht: Record<string, boolean>, teile: string[]): Befund[];
|
|
6
|
-
export declare function pruefeMailArten(wurzel: string, arten: readonly string[]): Befund[];
|
|
7
|
-
export declare function pruefeAnker(dateien: ReadonlyArray<{
|
|
8
|
-
pfad: string;
|
|
9
|
-
inhalt: string;
|
|
10
|
-
}>, screens: ReadonlyArray<{
|
|
11
|
-
id: string;
|
|
12
|
-
name: string;
|
|
13
|
-
slug?: string;
|
|
14
|
-
}>): Befund[];
|
|
15
|
-
//# sourceMappingURL=bauplan.d.ts.map
|
package/dist/bauplan.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bauplan.d.ts","sourceRoot":"","sources":["../src/bauplan.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAkC,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEzG,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,CAAA;AAEvC,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BtD;AA+CD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAsBzG;AA+BD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CA0BlF;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,OAAO,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAClE,MAAM,EAAE,CAyDV"}
|