kimal3 0.2.10 → 0.3.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 +135 -0
- package/dist/api.js +16 -7
- package/dist/arbeitsplatz-dateien.js +23 -19
- package/dist/argumente.js +25 -97
- package/dist/befehle/arbeitsplatz.js +50 -68
- package/dist/befehle/firma-daten.js +24 -26
- package/dist/befehle/kontext-fragen.js +57 -47
- package/dist/befehle/kontext-gemeinsam.js +84 -40
- package/dist/befehle/kontext-hoch.js +40 -46
- package/dist/befehle/kontext-runter.js +70 -51
- package/dist/befehle/login.js +23 -9
- package/dist/befehle/logout.js +9 -4
- package/dist/befehle/projekt-liste.js +24 -29
- package/dist/befehle/projekt-neu.js +25 -31
- package/dist/befehle/skill-install.js +78 -49
- package/dist/befehle/skill-tausch.js +28 -0
- package/dist/befehle/wache.js +12 -6
- package/dist/befehle/werkbank.js +98 -87
- package/dist/befehle-katalog-en.js +185 -0
- package/dist/befehle-katalog.js +10 -49
- package/dist/befehlswoerter.js +69 -0
- package/dist/einstellungen-mischen.js +2 -2
- package/dist/einstellungen-schreiben.js +8 -5
- package/dist/fehler.js +5 -5
- package/dist/firmen-liste.js +8 -5
- package/dist/format.js +41 -0
- package/dist/fragen-lesen.js +3 -3
- package/dist/hilfe.js +24 -0
- package/dist/kimal3.js +77 -71
- package/dist/kontext-dateien.js +30 -23
- package/dist/kontext-hoch-zeile.js +5 -3
- package/dist/kontext-rat.js +151 -0
- package/dist/kontext-stand.js +64 -210
- package/dist/nachricht.js +39 -15
- package/dist/projekt-neu-firma.js +9 -9
- package/dist/projekt-zeilen.js +40 -54
- package/dist/slash-befehle.js +36 -0
- package/dist/sprache.js +114 -0
- package/dist/texte/allgemein.js +99 -0
- package/dist/texte/arbeitsplatz.js +135 -0
- package/dist/texte/kontext-hoch.js +128 -0
- package/dist/texte/kontext.js +171 -0
- package/dist/texte/projekte.js +126 -0
- package/dist/texte/skill.js +87 -0
- package/dist/texte/wache.js +36 -0
- package/dist/texte/werkbank.js +161 -0
- package/dist/wache-rechnung.js +27 -40
- package/dist/werkbank-name.js +28 -10
- package/dist/wort.js +98 -0
- package/package.json +2 -2
- package/skill/SKILL.md +9 -9
- package/skill/commands/k3.md +1 -1
- package/skill/commands/k3feierabend.md +99 -97
- package/skill/commands/k3kontext.md +1 -1
- package/skill/commands/k3kurs.md +6 -5
- package/skill/commands/k3start.md +2 -1
- package/skill/en/SKILL.md +451 -0
- package/skill/en/commands/k3.md +106 -0
- package/skill/en/commands/k3analyse.md +59 -0
- package/skill/en/commands/k3context.md +92 -0
- package/skill/en/commands/k3course.md +54 -0
- package/skill/en/commands/k3list.md +26 -0
- package/skill/en/commands/k3project.md +50 -0
- package/skill/en/commands/k3start.md +47 -0
- package/skill/en/commands/k3wrapup.md +99 -0
- package/dist/zz-kaputt.js +0 -1
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
const de = {
|
|
2
|
+
// ── Hilfe ──
|
|
3
|
+
help: `
|
|
4
|
+
kimal3 werkbank neu [dein-vorname] [--firma "Name" | --firma-id "…"]
|
|
5
|
+
|
|
6
|
+
Legt eine eigene Werkbank in einem bestehenden Firmen-Ordner an.
|
|
7
|
+
Die Firmenebene (kontext/ bzw. context/, CLAUDE.md, README.md) wird
|
|
8
|
+
NICHT angefasst.
|
|
9
|
+
|
|
10
|
+
dein-vorname Optional. Der Ordner traegt deinen Namen -- aus "sabine"
|
|
11
|
+
wird "werkbank-sabine" (bei englischem Konto
|
|
12
|
+
"workbench-sabine"). Ohne Angabe steht dort der Name,
|
|
13
|
+
den der Server aus deiner Anmelde-Adresse gebildet hat.
|
|
14
|
+
|
|
15
|
+
--firma "Name" Nur noetig, wenn du zu mehreren Firmen gehoerst UND dieser
|
|
16
|
+
Ordner seine Firma nicht eindeutig nennt -- sonst nehme
|
|
17
|
+
ich die Firma des Ordners und sage dir das.
|
|
18
|
+
Die Absage nennt dir die Namen als fertige Befehle.
|
|
19
|
+
|
|
20
|
+
--firma-id "…" Fuer den Fall, dass zwei deiner Firmen GLEICH heissen.
|
|
21
|
+
Auch diese Absage nennt dir fertige Befehle.
|
|
22
|
+
|
|
23
|
+
🔴 Bricht ab, wenn der Zielordner schon existiert und NICHT leer ist.
|
|
24
|
+
|
|
25
|
+
Du hast noch gar keinen Firmen-Ordner?
|
|
26
|
+
kimal3 arbeitsplatz neu <dein-vorname>
|
|
27
|
+
`,
|
|
28
|
+
// ── der Rat in der Absage "Ordner nicht leer" ──
|
|
29
|
+
adviceOwnWorkbench: (ziel, befehl) => " Ist das DEINE Werkbank? Dann steht sie schon -- geh einfach hinein:\n" +
|
|
30
|
+
` cd ${ziel}\n` +
|
|
31
|
+
" Bist du es nicht, nimm deinen eigenen Vornamen:\n" +
|
|
32
|
+
` kimal3 ${befehl} <dein-vorname>`,
|
|
33
|
+
// ── Absagen vor dem Holen ──
|
|
34
|
+
emptyName: "Ein leerer Name ist kein gueltiger Name.\n",
|
|
35
|
+
nameSuggestion: (befehl, zusammen, optionen) => `Besteht dein Name aus mehreren Woertern? Dann schreib ihn zusammen:\n` +
|
|
36
|
+
` kimal3 ${befehl} ${zusammen}${optionen}\n`,
|
|
37
|
+
onlyOneName: (wort) => `Mit „${wort}" kann ich hier nichts anfangen -- nur EIN Name ist erlaubt.\n`,
|
|
38
|
+
unusableName1: (name) => `Aus „${name}" kann ich keinen Ordnernamen machen -- es bleiben nur`,
|
|
39
|
+
unusableName2: "Zeichen uebrig, die in keinem Ordnernamen stehen duerfen.",
|
|
40
|
+
unusableName3: (befehl) => ` Nimm deinen Vornamen: kimal3 ${befehl} sabine`,
|
|
41
|
+
// ── Absagen nach dem Holen ──
|
|
42
|
+
unsafeFolderName: (name) => `Die Antwort enthaelt einen unsicheren Ordnernamen: „${name}". Bitte melden.`,
|
|
43
|
+
noWorkbank1: "In der Vorlage steckt kein Werkbank-Ordner -- damit kann ich hier nichts anlegen.",
|
|
44
|
+
noWorkbank2: "Bitte melden.",
|
|
45
|
+
noCompanyLevel1: "Die Vorlage vom Server nennt gar keine Firmenebene -- damit kann ich",
|
|
46
|
+
noCompanyLevel2: "nicht pruefen, ob du an der richtigen Stelle stehst.",
|
|
47
|
+
noCompanyLevel3: "Das liegt nicht an dir. Bitte melden.",
|
|
48
|
+
// ── Absage "hier steht kein Firmen-Ordner" ──
|
|
49
|
+
noCompanyFolder1: (fehlend) => "Hier steht kein Firmen-Ordner -- ich sehe kein " + fehlend + ".",
|
|
50
|
+
noCompanyFolder2: "Eine Werkbank braucht die Firmenebene daneben; ohne sie findet Claude",
|
|
51
|
+
noCompanyFolder3: "euren Firmenkontext nicht.",
|
|
52
|
+
noCompanyFolder4: " Steht er woanders? Geh dorthin und versuch es dort noch einmal.",
|
|
53
|
+
noCompanyFolder5: " Bist du der ERSTE in deiner Firma?",
|
|
54
|
+
noCompanyFolder6: (befehl) => ` kimal3 ${befehl} <dein-vorname>`,
|
|
55
|
+
noCompanyFolder7: " Hat deine Firma schon einen? Dann hol dir DEN -- z. B. als Kopie",
|
|
56
|
+
noCompanyFolder8: " oder ueber euer Repo. Leg keinen neuen an, sonst habt ihr zwei",
|
|
57
|
+
noCompanyFolder9: " verschiedene Firmenordner mit verschiedenen Regeln darin.",
|
|
58
|
+
// ── Teil-2-Rest Minor 7: der Ordner steht da, nur in der Sprache von frueher ──
|
|
59
|
+
folderInOtherLanguage: (ordner, befehl) => `Dieser Firmen-Ordner ist ${ordner === "de" ? "deutsch (kontext/)" : "englisch (context/)"}, ` +
|
|
60
|
+
`deine Firma hat aber inzwischen\n${ordner === "de" ? "Englisch" : "Deutsch"} als Firmensprache. ` +
|
|
61
|
+
"Eine Werkbank hier faende euren\nFirmenkontext nicht.\n\n" +
|
|
62
|
+
" Hol dir in einem NEUEN Ordner einen frischen Arbeitsplatz:\n" +
|
|
63
|
+
` ${befehl}`,
|
|
64
|
+
// ── der Abgleich der Firma im Ordner mit der gelieferten ──
|
|
65
|
+
doubt1: (hier) => `Achtung: Dieser Ordner nennt als Firma „${hier}",`,
|
|
66
|
+
doubt2: (gewaehlt) => `du hast aber „${gewaehlt}" gewaehlt.`,
|
|
67
|
+
doubt3: "Ich lege die Werkbank trotzdem an -- vielleicht heisst die Firma bei euch",
|
|
68
|
+
doubt4: "nur anders geschrieben. Stimmt es nicht, loesch den neuen Ordner wieder.",
|
|
69
|
+
otherCompany1: "Dieser Ordner gehoert zu einer anderen Firma als der, zu der du gehoerst.",
|
|
70
|
+
otherCompany2: "Ich lege hier keine Werkbank an, die einen fremden Firmennamen traegt --",
|
|
71
|
+
otherCompany3: "sie wuerde Claude bei jedem Start die falsche Firma nennen.",
|
|
72
|
+
otherCompany4: " Deine Werkbank gehoert in den Ordner DEINER Firma. Geh dorthin und",
|
|
73
|
+
otherCompany5: " versuch es dort noch einmal.",
|
|
74
|
+
otherNamedCompany1: (genannt) => `Dieser Ordner gehoert zu einer ANDEREN Firma als „${genannt}".`,
|
|
75
|
+
otherNamedCompany2: "Ich lege hier keine Werkbank an, die einen fremden Firmennamen traegt --",
|
|
76
|
+
otherNamedCompany3: "sie wuerde Claude bei jedem Start die falsche Firma nennen.",
|
|
77
|
+
otherNamedCompany4: (genannt) => ` Soll die Werkbank fuer „${genannt}" sein? Dann gehoert sie in DEREN Ordner.`,
|
|
78
|
+
otherNamedCompany5: " Soll sie fuer die Firma hier sein? Dann nimm deren Namen.",
|
|
79
|
+
// ── Erfolg (die Zeile "N Dateien angelegt" und der Rat darunter kommen aus arbeitsplatz.ts) ──
|
|
80
|
+
companyUntouched: " Die Firmenebene ist unberuehrt geblieben.",
|
|
81
|
+
companyFromFolder: (gewaehlt) => ` Die Firma kam aus diesem Ordner${gewaehlt ? `: „${gewaehlt}"` : ""}.`,
|
|
82
|
+
companyFromFolderHint: (schalter) => ` Sollte es eine andere sein: Ordner wieder loeschen und mit --${schalter} "Name" neu anlegen.`,
|
|
83
|
+
};
|
|
84
|
+
const en = {
|
|
85
|
+
help: `
|
|
86
|
+
kimal3 workbench new [your-first-name] [--company "Name" | --company-id "…"]
|
|
87
|
+
|
|
88
|
+
Creates your own workbench in an existing company folder.
|
|
89
|
+
The company level (context/ or kontext/, CLAUDE.md, README.md) is
|
|
90
|
+
NOT touched.
|
|
91
|
+
|
|
92
|
+
your-first-name Optional. The folder is named after you — "sabine"
|
|
93
|
+
becomes "workbench-sabine" ("werkbank-sabine" with a
|
|
94
|
+
German account). Without it, the folder uses the name
|
|
95
|
+
the server built from your sign-in address.
|
|
96
|
+
|
|
97
|
+
--company "Name" Only needed if you belong to several companies AND this
|
|
98
|
+
folder doesn't name its company clearly — otherwise I use
|
|
99
|
+
the folder's company and tell you so.
|
|
100
|
+
The error message lists the names as ready-to-run commands.
|
|
101
|
+
|
|
102
|
+
--company-id "…" For when two of your companies have the SAME name.
|
|
103
|
+
This error message also lists ready-to-run commands.
|
|
104
|
+
|
|
105
|
+
The German option names (--firma, --firma-id) work too.
|
|
106
|
+
|
|
107
|
+
🔴 Stops if the target folder already exists and is NOT empty.
|
|
108
|
+
|
|
109
|
+
You don't have a company folder yet?
|
|
110
|
+
kimal3 workplace new <your-first-name>
|
|
111
|
+
`,
|
|
112
|
+
adviceOwnWorkbench: (ziel, befehl) => " Is this YOUR workbench? Then it's already there — just go into it:\n" +
|
|
113
|
+
` cd ${ziel}\n` +
|
|
114
|
+
" If it isn't, use your own first name:\n" +
|
|
115
|
+
` kimal3 ${befehl} <your-first-name>`,
|
|
116
|
+
emptyName: "A name can't be empty.\n",
|
|
117
|
+
nameSuggestion: (befehl, zusammen, optionen) => "Does your name have several words? Then write it as one:\n" +
|
|
118
|
+
` kimal3 ${befehl} ${zusammen}${optionen}\n`,
|
|
119
|
+
onlyOneName: (wort) => `“${wort}” won't work here — only ONE name is allowed.\n`,
|
|
120
|
+
unusableName1: (name) => `I can't make a folder name out of “${name}” — all that's left are`,
|
|
121
|
+
unusableName2: "characters that aren't allowed in any folder name.",
|
|
122
|
+
unusableName3: (befehl) => ` Use your first name: kimal3 ${befehl} sabine`,
|
|
123
|
+
unsafeFolderName: (name) => `The reply contains an unsafe folder name: “${name}”. Please report this.`,
|
|
124
|
+
noWorkbank1: "The template has no workbench folder — I can't create anything here without one.",
|
|
125
|
+
noWorkbank2: "Please report this.",
|
|
126
|
+
noCompanyLevel1: "The template from the server names no company level at all — so I can't",
|
|
127
|
+
noCompanyLevel2: "check whether you're in the right place.",
|
|
128
|
+
noCompanyLevel3: "That isn't down to you. Please report this.",
|
|
129
|
+
noCompanyFolder1: (fehlend) => "There's no company folder here — I can't see " + fehlend + ".",
|
|
130
|
+
noCompanyFolder2: "A workbench needs the company level next to it; without it Claude",
|
|
131
|
+
noCompanyFolder3: "won't find your company context.",
|
|
132
|
+
noCompanyFolder4: " Is it somewhere else? Go there and try again.",
|
|
133
|
+
noCompanyFolder5: " Are you the first person in your company to set this up?",
|
|
134
|
+
noCompanyFolder6: (befehl) => ` kimal3 ${befehl} <your-first-name>`,
|
|
135
|
+
noCompanyFolder7: " Does your company already have one? Then get THAT one — for example as a copy",
|
|
136
|
+
noCompanyFolder8: " or through your repo. Don't create a new one, or you'll have two",
|
|
137
|
+
noCompanyFolder9: " different company folders with different rules in them.",
|
|
138
|
+
folderInOtherLanguage: (ordner, befehl) => `This company folder is ${ordner === "de" ? "German (kontext/)" : "English (context/)"}, ` +
|
|
139
|
+
`but your company now\nworks in ${ordner === "de" ? "English" : "German"}. ` +
|
|
140
|
+
"A workbench here wouldn't find your\ncompany context.\n\n" +
|
|
141
|
+
" Get a fresh workplace in a NEW folder:\n" +
|
|
142
|
+
` ${befehl}`,
|
|
143
|
+
doubt1: (hier) => `Note: this folder names its company as “${hier}”,`,
|
|
144
|
+
doubt2: (gewaehlt) => `but you chose “${gewaehlt}”.`,
|
|
145
|
+
doubt3: "I'll create the workbench anyway — perhaps your company is just",
|
|
146
|
+
doubt4: "spelled differently. If it's wrong, delete the new folder again.",
|
|
147
|
+
otherCompany1: "This folder belongs to a different company from the one you belong to.",
|
|
148
|
+
otherCompany2: "I won't create a workbench here that carries someone else's company name —",
|
|
149
|
+
otherCompany3: "it would tell Claude the wrong company every time it starts.",
|
|
150
|
+
otherCompany4: " Your workbench belongs in YOUR company's folder. Go there and",
|
|
151
|
+
otherCompany5: " try again.",
|
|
152
|
+
otherNamedCompany1: (genannt) => `This folder belongs to a DIFFERENT company from “${genannt}”.`,
|
|
153
|
+
otherNamedCompany2: "I won't create a workbench here that carries someone else's company name —",
|
|
154
|
+
otherNamedCompany3: "it would tell Claude the wrong company every time it starts.",
|
|
155
|
+
otherNamedCompany4: (genannt) => ` Should the workbench be for “${genannt}”? Then it belongs in THEIR folder.`,
|
|
156
|
+
otherNamedCompany5: " Should it be for the company here? Then use its name.",
|
|
157
|
+
companyUntouched: " The company level has been left untouched.",
|
|
158
|
+
companyFromFolder: (gewaehlt) => ` The company was taken from this folder${gewaehlt ? `: “${gewaehlt}”` : ""}.`,
|
|
159
|
+
companyFromFolderHint: (schalter) => ` If it should be a different company: delete the folder again and re-create it with --${schalter} "Name".`,
|
|
160
|
+
};
|
|
161
|
+
export const WERKBANK_TEXTE = { de, en };
|
package/dist/wache-rechnung.js
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { istAelter, istVersionsstand } from "./nachricht.js";
|
|
2
|
-
import {
|
|
2
|
+
import { befehlIn, erkenneBefehl } from "./befehlswoerter.js";
|
|
3
|
+
import { WACHE_TEXTE } from "./texte/wache.js";
|
|
3
4
|
/**
|
|
4
5
|
* Den Befehl in der Schreibweise holen, in der man ihn dort eintippt, wo man
|
|
5
6
|
* ihn liest -- die Wache spricht immer durch Claude Code, also mit `!`.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* ein Fehler beim Bauen und keiner, den der Kunde ausbaden soll; check:wache
|
|
9
|
-
* faengt ihn, weil die Zeile dann den erwarteten Text nicht enthaelt.
|
|
7
|
+
* 🌐 Das Befehlswort kommt in der Sprache des Satzes (`befehlIn`), die
|
|
8
|
+
* Wortpaare stehen in `befehlswoerter.ts`.
|
|
10
9
|
*/
|
|
11
|
-
function tippen(
|
|
12
|
-
|
|
13
|
-
return eintrag ? eintrag.tippen : befehl;
|
|
10
|
+
function tippen(name, s) {
|
|
11
|
+
return `! kimal3 ${befehlIn(name, s)}`; // kein-anzeigetext: Befehlszeile zum Tippen in Claude
|
|
14
12
|
}
|
|
15
|
-
export function wacheBefunde(lage) {
|
|
13
|
+
export function wacheBefunde(lage, s) {
|
|
14
|
+
const T = WACHE_TEXTE[s];
|
|
16
15
|
// 🔴 Ausgeloggt: NUR dieser eine Befund. Die anderen beiden waeren durchaus
|
|
17
16
|
// beantwortbar (npm fragt ohne Anmeldung, der Skill-Stempel liegt auf der
|
|
18
17
|
// Platte) -- sie werden trotzdem unterdrueckt. Wer ausgeloggt ist, hat genau
|
|
@@ -36,13 +35,12 @@ export function wacheBefunde(lage) {
|
|
|
36
35
|
// ihren Absender schon im Wort "Nachricht von kimal3" und ist keine
|
|
37
36
|
// Aufgabe. Die zwei Leerzeichen vor den Punkten halten sie vom Befehl
|
|
38
37
|
// fern, derselbe Grund wie beim Leerzeichen vor "! kimal3 login".
|
|
39
|
-
zeile: "
|
|
40
|
-
`oder einer längeren Pause. Melde dich neu an mit: ${tippen("kimal3 login")} 🔴🔴🔴`,
|
|
38
|
+
zeile: T.accessExpired(tippen("login", s)),
|
|
41
39
|
}];
|
|
42
40
|
}
|
|
43
41
|
const befunde = [];
|
|
44
42
|
if (lage.nachricht !== null) {
|
|
45
|
-
befunde.push({ art: "nachricht", zeile:
|
|
43
|
+
befunde.push({ art: "nachricht", zeile: T.messageFromKimal3(lage.nachricht) });
|
|
46
44
|
}
|
|
47
45
|
// Beide Nummern muessen da UND gueltig sein. Fehlt eine, wird geschwiegen --
|
|
48
46
|
// nicht geraten.
|
|
@@ -51,22 +49,20 @@ export function wacheBefunde(lage) {
|
|
|
51
49
|
istAelter(lage.eigeneVersion, lage.neuesteVersion)) {
|
|
52
50
|
befunde.push({
|
|
53
51
|
art: "version",
|
|
54
|
-
zeile:
|
|
55
|
-
`Holen mit: ! npm install -g kimal3@${lage.neuesteVersion} 🟡🟡🟡`,
|
|
52
|
+
zeile: T.newVersion(lage.neuesteVersion, lage.eigeneVersion),
|
|
56
53
|
});
|
|
57
54
|
}
|
|
58
55
|
if (lage.skillVeraltet) {
|
|
59
56
|
befunde.push({
|
|
60
57
|
art: "skill",
|
|
61
|
-
zeile: "
|
|
62
|
-
`Auffrischen: ${tippen("kimal3 skill install")} 🟡🟡🟡`,
|
|
58
|
+
zeile: T.skillsOld(tippen("skill install", s)), // kein-anzeigetext: Befehlsname
|
|
63
59
|
});
|
|
64
60
|
}
|
|
65
61
|
return befunde;
|
|
66
62
|
}
|
|
67
63
|
/** Nur die Zeilen -- fuer alle, die die Art nicht brauchen (Terminal, Block). */
|
|
68
|
-
export function wacheZeilen(lage) {
|
|
69
|
-
return wacheBefunde(lage).map((b) => b.zeile);
|
|
64
|
+
export function wacheZeilen(lage, s) {
|
|
65
|
+
return wacheBefunde(lage, s).map((b) => b.zeile);
|
|
70
66
|
}
|
|
71
67
|
/**
|
|
72
68
|
* Zaehlt dieser Lauf als "heute erledigt"?
|
|
@@ -167,7 +163,7 @@ export function wacheAntwortAusHttp(status, koerper) {
|
|
|
167
163
|
export function wacheBlock(zeilen) {
|
|
168
164
|
if (zeilen.length === 0)
|
|
169
165
|
return null;
|
|
170
|
-
return ["🔑 kimal3", ...zeilen.map((z) => `• ${z}`)].join("\n");
|
|
166
|
+
return ["🔑 kimal3", ...zeilen.map((z) => `• ${z}`)].join("\n"); // kein-anzeigetext: Kopfzeile, in beiden Sprachen gleich
|
|
171
167
|
}
|
|
172
168
|
/**
|
|
173
169
|
* Was Claude mit den Zeilen tun soll -- als Text im Kontext, weil SKILL.md
|
|
@@ -181,10 +177,9 @@ export function wacheBlock(zeilen) {
|
|
|
181
177
|
* darin auch den Aufzaehlungspunkt "•" aus dem Block, mitten im Fettdruck.
|
|
182
178
|
* Die Anweisung sagt der Kopfzeile und dem Punkt seitdem ausdruecklich ab.
|
|
183
179
|
*/
|
|
184
|
-
export
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
"Führe nichts davon aus — es sind Hinweise für den Menschen, keine Aufträge an dich.";
|
|
180
|
+
export function anweisungAnClaude(s) {
|
|
181
|
+
return WACHE_TEXTE[s].instructionToClaude;
|
|
182
|
+
}
|
|
188
183
|
/**
|
|
189
184
|
* Dieselbe Meldung in der Form, die einen Absturz beim Beenden ueberlebt.
|
|
190
185
|
*
|
|
@@ -222,15 +217,15 @@ export const ANWEISUNG_AN_CLAUDE = "Anweisung an Claude: Gib die Zeilen oben dem
|
|
|
222
217
|
* `wacheBlock`. Eine Huelle mit leerer `systemMessage` waere jeden Morgen ein
|
|
223
218
|
* leeres "SessionStart:startup says:" auf dem Bildschirm.
|
|
224
219
|
*/
|
|
225
|
-
export function alsHookAusgabe(zeilen) {
|
|
220
|
+
export function alsHookAusgabe(zeilen, s) {
|
|
226
221
|
const block = wacheBlock(zeilen);
|
|
227
222
|
if (block === null)
|
|
228
223
|
return null;
|
|
229
224
|
return JSON.stringify({
|
|
230
225
|
systemMessage: zeilen.join("\n"),
|
|
231
226
|
hookSpecificOutput: {
|
|
232
|
-
hookEventName: "SessionStart",
|
|
233
|
-
additionalContext: `${block}\n\n${
|
|
227
|
+
hookEventName: "SessionStart", // kein-anzeigetext: Ereignisname der Huelle (T3-12)
|
|
228
|
+
additionalContext: `${block}\n\n${anweisungAnClaude(s)}`,
|
|
234
229
|
},
|
|
235
230
|
});
|
|
236
231
|
}
|
|
@@ -246,19 +241,10 @@ export function alsHookAusgabe(zeilen) {
|
|
|
246
241
|
* sie wird ja nur gezeigt, wenn eine Sitzungsnummer da ist. Wer sie liest,
|
|
247
242
|
* sitzt in dem Fenster, in dem `!` der richtige Anfang ist.
|
|
248
243
|
*/
|
|
249
|
-
export function ausfallMeldung() {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
🔴 `kimal3 wache aus` steht NICHT im Katalog -- dort steht nur
|
|
254
|
-
`kimal3 wache`. `tippen()` gibt bei einem unbekannten Befehl den Text
|
|
255
|
-
unveraendert zurueck, also OHNE das Ausrufezeichen: Der Mensch tippt in
|
|
256
|
-
Claude etwas ab, das dort nicht laeuft. Gefunden am 2026-09-08 in der
|
|
257
|
-
Live-Messung, NICHT von der Pruefung -- die fragte nur, ob irgendwo ein
|
|
258
|
-
`! kimal3` vorkommt, und das stimmte wegen der Zeile darueber.
|
|
259
|
-
Deshalb: die Schreibweise vom Katalog holen, das Wort `aus` anhaengen.
|
|
260
|
-
*/
|
|
261
|
-
` · Dauerhaft abstellen: ${tippen("kimal3 wache")} aus`);
|
|
244
|
+
export function ausfallMeldung(s) {
|
|
245
|
+
// 🔴 `wache aus` steht in `befehlswoerter.ts` als eigener Name -- die Schreibweise
|
|
246
|
+
// kommt von dort, nicht aus einem angehaengten Wort (Fund vom 2026-09-08).
|
|
247
|
+
return WACHE_TEXTE[s].checkDidNotRun(tippen("skill install", s), tippen("wache aus", s)); // kein-anzeigetext: Befehlsnamen
|
|
262
248
|
}
|
|
263
249
|
/**
|
|
264
250
|
* Soll der allgemeine Update-Hinweis an diesen Befehl angehaengt werden?
|
|
@@ -281,5 +267,6 @@ export function ausfallMeldung() {
|
|
|
281
267
|
* richtigen Schreibweise und mit besserem Wortlaut.
|
|
282
268
|
*/
|
|
283
269
|
export function hinweisAnhaengen(argv) {
|
|
284
|
-
|
|
270
|
+
const name = erkenneBefehl(argv)?.name;
|
|
271
|
+
return name !== "wache" && name !== "wache an" && name !== "wache aus";
|
|
285
272
|
}
|
package/dist/werkbank-name.js
CHANGED
|
@@ -22,8 +22,21 @@
|
|
|
22
22
|
* (`kontext/`, `KI-Arbeitsplatz/`), gehoert er allen. *Ein Nutzer muss diese
|
|
23
23
|
* Regel nicht lernen — er sieht sie im Baum.*
|
|
24
24
|
*/
|
|
25
|
-
/**
|
|
26
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Die Präfixe beider Sprachen (Spec Teil 2, T2-3). Eine Werkbank heißt in der Kontosprache
|
|
27
|
+
* ihres Menschen; erkannt werden BEIDE, abgeschnitten höchstens EINES (T2-9: nach einem Sprachwechsel wird nichts
|
|
28
|
+
* umbenannt, und wer nach einer alten Anleitung `werkbank-jens` tippt, bekommt nie
|
|
29
|
+
* `workbench-werkbank-jens`). Das deutsche bewacht `check:arbeitsplatz` (11b).
|
|
30
|
+
*/
|
|
31
|
+
export const WERKBANK_PRAEFIXE = { de: "werkbank-", en: "workbench-" };
|
|
32
|
+
/** In welcher Sprache ein Werkbank-Ordner heißt -- `null`, wenn er keiner ist. */
|
|
33
|
+
export function werkbankSpracheAus(ordner) {
|
|
34
|
+
if (ordner.startsWith(WERKBANK_PRAEFIXE.de))
|
|
35
|
+
return "de";
|
|
36
|
+
if (ordner.startsWith(WERKBANK_PRAEFIXE.en))
|
|
37
|
+
return "en";
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
27
40
|
/**
|
|
28
41
|
* Wie lang der Namensteil hoechstens werden darf.
|
|
29
42
|
*
|
|
@@ -36,6 +49,8 @@ const MAX_LAENGE = 40;
|
|
|
36
49
|
/**
|
|
37
50
|
* Aus dem, was ein Mensch eingibt (oder aus seiner Adresse kommt), ein Ordnername.
|
|
38
51
|
*
|
|
52
|
+
* Das Praefix kommt aus der Kontosprache (`sprache`); die Beispiele hier sind deutsch:
|
|
53
|
+
*
|
|
39
54
|
* "Sabine" → "werkbank-sabine"
|
|
40
55
|
* "Sabine Müller" → "werkbank-sabine-mueller"
|
|
41
56
|
* "werkbank-sabine" → "werkbank-sabine" (nicht doppelt)
|
|
@@ -59,7 +74,7 @@ const MAX_LAENGE = 40;
|
|
|
59
74
|
* absagt (die CLI, wo ein Mensch etwas getippt hat) oder still beim Vordruck
|
|
60
75
|
* bleibt (der Server, wo niemand gefragt wurde).
|
|
61
76
|
*/
|
|
62
|
-
export function werkbankOrdnerAus(roh) {
|
|
77
|
+
export function werkbankOrdnerAus(roh, sprache) {
|
|
63
78
|
/*
|
|
64
79
|
🔴 **Spitze Klammern sind eine ABSAGE, keine Zeichen zum Wegwerfen**
|
|
65
80
|
(Review-Runde 5 zu PR #25). Gemessen: `"<dein-vorname>"` wurde zu
|
|
@@ -87,7 +102,7 @@ export function werkbankOrdnerAus(roh) {
|
|
|
87
102
|
.replaceAll("ü", "ue")
|
|
88
103
|
.replaceAll("ß", "ss")
|
|
89
104
|
// Alles andere mit Akzent auf den Grundbuchstaben zurueck (é → e, ç → c).
|
|
90
|
-
.normalize("NFD")
|
|
105
|
+
.normalize("NFD") // kein-anzeigetext: Unicode-Normalform
|
|
91
106
|
.replace(/[\u0300-\u036f]/g, "")
|
|
92
107
|
// Was jetzt noch kein a–z oder 0–9 ist, wird zum Trennstrich -- und
|
|
93
108
|
// mehrere Trennstriche werden einer.
|
|
@@ -97,16 +112,19 @@ export function werkbankOrdnerAus(roh) {
|
|
|
97
112
|
// werden. Das ist kein Sonderfall fuer Feinschmecker: Die Hilfe von
|
|
98
113
|
// `werkbank neu` hat bis heute genau diese Schreibweise beigebracht
|
|
99
114
|
// (`kimal3 werkbank neu werkbank-sabine`), und alte Anleitungen ueberleben
|
|
100
|
-
// laenger als der Code, den sie beschreiben.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
115
|
+
// laenger als der Code, den sie beschreiben. Erkannt wird das Praefix BEIDER
|
|
116
|
+
// Sprachen, egal in welcher der neue Name entsteht (T2-9) -- abgeschnitten wird eines.
|
|
117
|
+
// ⚠️ Hoechstens EINES, und welches, haengt nicht an der Reihenfolge der Liste: Bis Task 15
|
|
118
|
+
// schnitt eine Schleife nacheinander ab -- `werkbank-workbench-jens` verlor beide,
|
|
119
|
+
// `workbench-werkbank-jens` nur eines. Gleiche Eingabeform, verschiedene Antwort.
|
|
120
|
+
const praefix = Object.values(WERKBANK_PRAEFIXE).find((p) => grundform.startsWith(p));
|
|
121
|
+
const ohnePraefix = praefix === undefined ? grundform : grundform.slice(praefix.length);
|
|
104
122
|
// ⚠️ Erst kuerzen, DANN den Trennstrich am Ende wegnehmen: Faellt der Schnitt
|
|
105
123
|
// mitten in „sabine-mueller", bliebe sonst ein „werkbank-sabine-" stehen.
|
|
106
124
|
const gekuerzt = ohnePraefix.slice(0, MAX_LAENGE).replace(/-+$/g, "");
|
|
107
125
|
if (gekuerzt === "")
|
|
108
126
|
return null;
|
|
109
|
-
return `${
|
|
127
|
+
return `${WERKBANK_PRAEFIXE[sprache]}${gekuerzt}`;
|
|
110
128
|
}
|
|
111
129
|
/**
|
|
112
130
|
* Die Vorlage auf einen anderen Werkbank-Namen umschreiben — **Pfade und Texte**.
|
|
@@ -142,7 +160,7 @@ export function werkbankOrdnerAus(roh) {
|
|
|
142
160
|
* *„traegt seinen Namen: `werkbank-jonas`, `werkbank-jonas`"*.
|
|
143
161
|
*
|
|
144
162
|
* 🔑 Geschuetzt sind Beispiele deshalb nicht hier, sondern in der VORLAGE: Sie
|
|
145
|
-
* heissen `werkbank-<vorname>`, und diese Form kann kein echter Ordner tragen —
|
|
163
|
+
* heissen `werkbank-<vorname>` oder `workbench-<vorname>`, und diese Form kann kein echter Ordner tragen —
|
|
146
164
|
* `<` und `>` ueberleben `werkbankOrdnerAus` nicht. `check:arbeitsplatz` (11d)
|
|
147
165
|
* haelt das fest. *Eine Zusicherung, die nur fuer einen der beiden Aufrufer
|
|
148
166
|
* gilt, ist keine Zusicherung dieser Funktion.*
|
package/dist/wort.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EIN Wort fuer eine Befehlszeile setzen (`alsWort`) -- herausgeloest aus `argumente.ts`
|
|
3
|
+
* (Teil 3, Preflight-Befund 1), weil die APP es liest (`src/lib/cli/sprach-absage.ts`) und
|
|
4
|
+
* `argumente.ts` seit Teil 3 andere Programm-Dateien importiert.
|
|
5
|
+
* ⚠️ DIESE DATEI IMPORTIERT NICHTS: Die App liest sie ueber den Bundler, der `.js`-Endungen
|
|
6
|
+
* nicht aufloest (wie `befehle-katalog.ts`, `befehlswoerter.ts`).
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* EIN Wort so in eine Befehlszeile setzen, dass es beim Kopieren wieder genau
|
|
10
|
+
* dieses Wort ergibt.
|
|
11
|
+
*
|
|
12
|
+
* 🔴 **Gegen Befund 4 der zweiten Review-Runde (2026-08-27).** An NEUN Stellen
|
|
13
|
+
* stand dieselbe Zeile — `wert.includes(" ") ? `"${wert}"` : wert` — und alle
|
|
14
|
+
* neun hatten dieselbe Lücke: Ein Wert, der selbst ein Anführungszeichen
|
|
15
|
+
* enthält, sprengt die Anführungszeichen, die man um ihn herum setzt.
|
|
16
|
+
*
|
|
17
|
+
* Der Fall: `kimal3 arbeitsplatz neu sabine --firma 'Blume "Nord" GmbH'`. Der
|
|
18
|
+
* angebotene Rat lautete danach `--firma "Blume "Nord" GmbH"`. Wer ihn
|
|
19
|
+
* kopiert, gibt seiner Kommandozeile **drei** Wörter statt einem und bekommt
|
|
20
|
+
* eine andere, verwirrendere Absage als die, die er gerade gelesen hat.
|
|
21
|
+
* *Ein Rat, der beim Kopieren zerfällt, ist ein Rat in eine zweite Absage* —
|
|
22
|
+
* genau die Lehre, gegen die `alsBefehlszeile` (in `argumente.ts`) gebaut wurde.
|
|
23
|
+
*
|
|
24
|
+
* 🔑 **Warum einfache Anführungszeichen und keine Maskierung mit `\`:**
|
|
25
|
+
* `'…'` bedeutet in beiden Kommandozeilen dasselbe, die auf den Rechnern
|
|
26
|
+
* unserer Kunden laufen — in der von Mac/Linux (`sh`) wie in der von Windows
|
|
27
|
+
* (PowerShell). Eine Maskierung mit `\"` gilt nur in der ersten; in
|
|
28
|
+
* PowerShell müsste man das Zeichen verdoppeln. *Eine Bauform, die nur auf
|
|
29
|
+
* einem der beiden Rechner hält, ist in einem Produkt für beide keine
|
|
30
|
+
* Bauform.*
|
|
31
|
+
*
|
|
32
|
+
* 🔑 **`immer` heisst „setz die Anfuehrungszeichen auch dann, wenn es ohne
|
|
33
|
+
* ginge".** Die Zeilen unter „Deine Firmen:" haben sie seit jeher, und dort
|
|
34
|
+
* gehoeren sie hin: Sie sind zum Kopieren UND zum Weitertippen gedacht -- wer
|
|
35
|
+
* „Suedwind" durch „Blume & Co" ersetzt, hat die Anfuehrungszeichen dann schon
|
|
36
|
+
* stehen. Beim Zusammenbauen einer getippten Zeile (`alsBefehlszeile`) und
|
|
37
|
+
* beim `cd` waere das umgekehrt eine Aenderung an dem, was der Kunde bisher
|
|
38
|
+
* sieht -- deshalb dort die Vorgabe `false`.
|
|
39
|
+
*
|
|
40
|
+
* ⚠️ **Die eine Lage, die offen bleibt:** ein Wert mit BEIDEN Sorten
|
|
41
|
+
* Anführungszeichen. Dafür gibt es keine Schreibweise, die in beiden
|
|
42
|
+
* Kommandozeilen dasselbe heißt. Der Rückfall maskiert nach `sh`-Regeln — und
|
|
43
|
+
* für genau diesen Fall gibt es ohnehin `--firma-id`, das ohne jedes
|
|
44
|
+
* Sonderzeichen auskommt.
|
|
45
|
+
*/
|
|
46
|
+
export function alsWort(wert, immer = false) {
|
|
47
|
+
if (wert === "")
|
|
48
|
+
return '""';
|
|
49
|
+
/*
|
|
50
|
+
Was eine Kommandozeile nicht wörtlich stehen lässt: Leerzeichen (trennen),
|
|
51
|
+
Anführungszeichen beider Sorten (zitieren) -- und `$` wie ````
|
|
52
|
+
(rechnen).
|
|
53
|
+
|
|
54
|
+
⚠️ Der Rückwärtsstrich ist bewusst NICHT dabei: In einem Firmennamen
|
|
55
|
+
kommt er nicht vor, und ihn mitzunehmen hieße, ihn auch maskieren zu
|
|
56
|
+
müssen -- was in PowerShell wieder falsch wäre.
|
|
57
|
+
*/
|
|
58
|
+
/*
|
|
59
|
+
🔴 **EINE ERLAUBNISLISTE, KEINE VERBOTSLISTE** (Befund 1 der FÜNFTEN
|
|
60
|
+
Review-Runde, 2026-08-27) -- und die Verbotsliste hatte drei Runden
|
|
61
|
+
gebraucht, um dreimal zu lecken: erst fehlten die Anführungszeichen, dann
|
|
62
|
+
`$` und das Akzent-Zeichen, dann `&`, `;`, `|`, Klammern, `<`, `>`.
|
|
63
|
+
|
|
64
|
+
Der Fall, der es aufgedeckt hat: eine Firma namens `Blume&Co` -- **ohne**
|
|
65
|
+
Leerzeichen, also fiel sie durch jede Prüfung. Die angebotene Zeile hieß
|
|
66
|
+
`--firma Blume&Co`; in PowerShell ist das ein Syntaxfehler, in `sh`
|
|
67
|
+
startet es `--firma Blume` im Hintergrund und führt danach `Co` aus.
|
|
68
|
+
|
|
69
|
+
🔑 *Eine Liste dessen, was gefährlich ist, ist immer unvollständig -- die
|
|
70
|
+
Liste dessen, was harmlos ist, kann man zu Ende schreiben.* Also
|
|
71
|
+
umgekehrt: Buchstaben (auch Umlaute), Ziffern und eine Handvoll
|
|
72
|
+
unverfänglicher Satzzeichen bleiben unangetastet, **alles andere wird
|
|
73
|
+
zitiert**. Ein Anführungszeichen zu viel ist folgenlos; eines zu wenig
|
|
74
|
+
hat jetzt dreimal einen Rat zerlegt.
|
|
75
|
+
*/
|
|
76
|
+
if (!immer && /^[A-Za-z0-9À-ÿ._\/@:+-]+$/.test(wert))
|
|
77
|
+
return wert;
|
|
78
|
+
/*
|
|
79
|
+
🔴 **`$` UND ```` MÜSSEN AUS DEN DOPPELTEN ANFÜHRUNGSZEICHEN HERAUS**
|
|
80
|
+
(Befund 4 der dritten Review-Runde, 2026-08-27). Doppelte Anführungszeichen
|
|
81
|
+
halten Leerzeichen zusammen, aber sie schützen NICHT vor dem Rechnen: Eine
|
|
82
|
+
Firma namens `Cash$$ GmbH` ergab die Zeile
|
|
83
|
+
`--firma "Cash$$ GmbH"`, und `$$` ist in `sh` die Nummer des laufenden
|
|
84
|
+
Programms. Der Kunde kopiert den angebotenen Befehl und liest danach
|
|
85
|
+
*„Zu ‚Cash1234 GmbH' gehörst du nicht."* -- wieder ein Rat, der beim
|
|
86
|
+
Kopieren zerfällt, nur eine Stufe subtiler als der Fall, gegen den diese
|
|
87
|
+
Funktion gebaut wurde.
|
|
88
|
+
|
|
89
|
+
Deshalb: doppelte Anführungszeichen nur, wenn wirklich nichts Rechnendes
|
|
90
|
+
drinsteht. Sonst die einfachen, die in beiden Kommandozeilen alles wörtlich
|
|
91
|
+
nehmen.
|
|
92
|
+
*/
|
|
93
|
+
if (!/["$\`]/.test(wert))
|
|
94
|
+
return `"${wert}"`;
|
|
95
|
+
if (!wert.includes("'"))
|
|
96
|
+
return `'${wert}'`;
|
|
97
|
+
return `"${wert.replace(/(["$\`])/g, "\\$1")}"`;
|
|
98
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kimal3",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Trag deine KI-Projekte dort ein, wo sie entstehen: im Terminal.",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Trag deine KI-Projekte dort ein, wo sie entstehen: im Terminal. · Log your AI projects where they happen: in the terminal.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"kimal3": "dist/kimal3.js"
|
package/skill/SKILL.md
CHANGED
|
@@ -81,7 +81,7 @@ Ergebnis.** Der erste wurde 2026-08-18 repariert, der zweite blieb weitere zwei
|
|
|
81
81
|
frisch bei Pro und weiß nicht, wo er anfangen soll.
|
|
82
82
|
|
|
83
83
|
🔴 **Zuerst EINE Frage klären, bevor du irgendetwas vorschlägst: Gibt es den Firmen-Ordner
|
|
84
|
-
schon?** Sieh nach, ob neben dir ein `kontext/`-Ordner liegt (oder frag).
|
|
84
|
+
schon?** Sieh nach, ob neben dir ein `kontext/`-Ordner (in einer englischen Firma `context/`) liegt (oder frag).
|
|
85
85
|
|
|
86
86
|
| Lage | Befehl |
|
|
87
87
|
|---|---|
|
|
@@ -89,16 +89,16 @@ schon?** Sieh nach, ob neben dir ein `kontext/`-Ordner liegt (oder frag).
|
|
|
89
89
|
| Firmen-Ordner steht schon — du brauchst nur deinen eigenen Platz | `kimal3 werkbank neu <vorname>` |
|
|
90
90
|
|
|
91
91
|
```
|
|
92
|
-
kimal3 arbeitsplatz neu # legt KI-Arbeitsplatz/ an (ganze Familie)
|
|
92
|
+
kimal3 arbeitsplatz neu # legt KI-Arbeitsplatz/ an (ganze Familie; englische Firma: AI-Workplace/)
|
|
93
93
|
kimal3 arbeitsplatz neu sabine # dasselbe, Werkbank heisst werkbank-sabine
|
|
94
94
|
kimal3 werkbank neu # nur die Werkbank, im bestehenden Firmen-Ordner
|
|
95
95
|
kimal3 werkbank neu sabine # dasselbe, Ordner heisst werkbank-sabine
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
🔴 **Das Argument ist der NAME DES MENSCHEN, nicht der Ordnername** (seit 2026-08-20). Der
|
|
99
|
-
oberste Ordner heißt **immer** `KI-Arbeitsplatz
|
|
99
|
+
oberste Ordner heißt **immer** `KI-Arbeitsplatz` (in einer englischen Firma `AI-Workplace`); mehrere Firmen trennt man über den Ordner
|
|
100
100
|
darüber (`Kunden/ARNO/KI-Arbeitsplatz/`). Der Name wirkt eine Ebene tiefer: aus `sabine` wird
|
|
101
|
-
`werkbank-sabine
|
|
101
|
+
`werkbank-sabine` (bei englischem Konto `workbench-sabine`).
|
|
102
102
|
|
|
103
103
|
⚠️ **Ohne Angabe rät der Befehl nicht** — der Server bildet den Namen aus der Anmelde-Adresse.
|
|
104
104
|
Das ist meist richtig, aber nicht immer schön (`s.mueller@…` wird zu `werkbank-s-mueller`).
|
|
@@ -161,7 +161,7 @@ statt zu raten.
|
|
|
161
161
|
⚠️ `[FIRMA]` findest du meist schon ausgefüllt — den Namen setzt der Server beim Ausliefern ein.
|
|
162
162
|
`[DATUM]` ebenso. Was übrig bleibt, sind die Angaben über den **Menschen** vor dir.
|
|
163
163
|
|
|
164
|
-
🔴 **Nur in der Werkbank — nirgends sonst.** Die oberste `CLAUDE.md` und alles in `kontext/`
|
|
164
|
+
🔴 **Nur in der Werkbank — nirgends sonst.** Die oberste `CLAUDE.md` und alles in `kontext/` (in einer englischen Firma `context/`)
|
|
165
165
|
gehören der **Firma**, nicht dem Menschen vor dir. Den Firmennamen setzt der Server beim
|
|
166
166
|
Ausliefern selbst ein; die Fragen in `kontext/` beantwortet ihr über
|
|
167
167
|
`kimal3 kontext fragen` (s. den nächsten Abschnitt). **Schreib dort nichts hinein, was du dir
|
|
@@ -175,17 +175,17 @@ darin liegt. Nichts davon ausführen und nicht versuchen, es lauffähig zu mache
|
|
|
175
175
|
|
|
176
176
|
**Wann:** Der Mensch fragt, ob sein Firmenkontext aktuell ist, hat gerade `arbeitsplatz neu`
|
|
177
177
|
oder `werkbank neu` ausgeführt, will wissen, was am Firmenkontext noch fehlt, oder will als
|
|
178
|
-
Admin eine Änderung an `kontext/*.md` an die Firma weitergeben.
|
|
178
|
+
Admin eine Änderung an `kontext/*.md` (in einer englischen Firma `context/*.md`) an die Firma weitergeben.
|
|
179
179
|
|
|
180
180
|
`kimal3 kontext runter` holt `CLAUDE.md` und die fünf Dateien in `kontext/`
|
|
181
|
-
(`kurzprofil.md`, `firma.md`, `marke.md`, `systeme.md`, `sicherheit.md`) von der Firma und legt
|
|
182
|
-
sie im gefundenen KI-Arbeitsplatz ab. Lokal geänderte Dateien fasst er **nicht** an — er sagt in
|
|
181
|
+
(`kurzprofil.md`, `firma.md`, `marke.md`, `systeme.md`, `sicherheit.md`) (in einer englischen Firma `context/` mit `company.md`, `profile.md`, `brand.md`, `systems.md`, `security.md`) von der Firma und legt
|
|
182
|
+
sie im gefundenen KI-Arbeitsplatz (in einer englischen Firma `AI-Workplace`) ab. Lokal geänderte Dateien fasst er **nicht** an — er sagt in
|
|
183
183
|
seiner Ausgabe, was als Nächstes zu tun ist (Admin: `kontext hoch`; sonst: an den genannten
|
|
184
184
|
Admin weitergeben).
|
|
185
185
|
|
|
186
186
|
### Den Firmenkontext ausfüllen — der Ablauf
|
|
187
187
|
|
|
188
|
-
In `kontext/` stehen **Fragen über die Firma**, keine Lückentexte. Beantwortet werden sie im
|
|
188
|
+
In `kontext/` (in einer englischen Firma `context/`) stehen **Fragen über die Firma**, keine Lückentexte. Beantwortet werden sie im
|
|
189
189
|
Gespräch mit dir — oder in der App unter **Firma → Kontext**. Beide Wege führen an dieselbe
|
|
190
190
|
Stelle.
|
|
191
191
|
|
package/skill/commands/k3.md
CHANGED
|
@@ -49,7 +49,7 @@ fehlt. Auch `4` (kein Pro-Zugang) ist hier **kein** Grund zu schweigen.
|
|
|
49
49
|
| Lage | Was du sagst |
|
|
50
50
|
|---|---|
|
|
51
51
|
| `--version` sagt `Nicht angemeldet.` | `! kimal3 login` — **der Mensch tippt das selbst**, er bestätigt im Browser. Das kann ich nicht für ihn tun. |
|
|
52
|
-
| Angemeldet, aber `kontext fragen` bricht mit `1` und „Hier steht kein KI-Arbeitsplatz" ab | 🔴 **Rate hier NICHT sofort `arbeitsplatz neu`.** Die Meldung heißt „ich habe von hier aufwärts keinen gefunden" — nicht „es gibt keinen". Der häufigere Fall ist, dass der Mensch schlicht woanders steht; die CLI selbst rät deshalb „Wechsle in deinen Arbeitsplatz-Ordner". **Frag erst: „Hast du schon einen KI-Arbeitsplatz-Ordner?"** Ja → dorthin wechseln und noch einmal. Nein → `! kimal3 arbeitsplatz neu`, vom Menschen getippt. ⚠️ Wer hier falsch rät, legt einen **zweiten, leeren** Arbeitsplatz an; der Firmenkontext steht danach in zwei Ordnern, und `kontext hoch` schickt aus dem falschen. |
|
|
52
|
+
| Angemeldet, aber `kontext fragen` bricht mit `1` und „Hier steht kein KI-Arbeitsplatz" ab | 🔴 **Rate hier NICHT sofort `arbeitsplatz neu`.** Die Meldung heißt „ich habe von hier aufwärts keinen gefunden" — nicht „es gibt keinen". Der häufigere Fall ist, dass der Mensch schlicht woanders steht; die CLI selbst rät deshalb „Wechsle in deinen Arbeitsplatz-Ordner". **Frag erst: „Hast du schon einen KI-Arbeitsplatz-Ordner?" (In einer englischen Firma heißt er `AI-Workplace`.)** Ja → dorthin wechseln und noch einmal. Nein → `! kimal3 arbeitsplatz neu`, vom Menschen getippt. ⚠️ Wer hier falsch rät, legt einen **zweiten, leeren** Arbeitsplatz an; der Firmenkontext steht danach in zwei Ordnern, und `kontext hoch` schickt aus dem falschen. |
|
|
53
53
|
| Arbeitsplatz da, Fragen offen | `/k3kontext` — ich stelle die Fragen einzeln. |
|
|
54
54
|
| `projekt liste` sagt „Du hast noch kein Erfolgsprofil" | Das Profil entsteht im Kurs. Nenn die Adresse aus seiner Meldung (`…/profil`) — **nicht** `/k3projekt`: Ohne Profil gibt es nichts, worin ein Projekt stehen könnte. |
|
|
55
55
|
| Alles beantwortet, Profil da, aber keine Projekte | `/k3projekt <was du gebaut hast>` |
|