kimal3 0.3.2 → 0.4.0-durchstich.3

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.
@@ -32,6 +32,8 @@ export function leseWacheDatei() {
32
32
  if (Array.isArray(inhalt.sitzungen)) {
33
33
  raus.sitzungen = inhalt.sitzungen.filter((s) => typeof s === "string");
34
34
  }
35
+ if (typeof inhalt.eingerichtet === "string")
36
+ raus.eingerichtet = inhalt.eingerichtet;
35
37
  return raus;
36
38
  }
37
39
  catch {
@@ -116,6 +118,22 @@ export function merkeSitzung(sitzung) {
116
118
  return;
117
119
  schreibeWacheDatei(mitSitzung(leseWacheDatei() ?? {}, sitzung));
118
120
  }
121
+ /**
122
+ * Merken, in welcher Claude-Sitzung die Wache gerade eingetragen wurde. Wirft nie.
123
+ *
124
+ * 🔴 NICHT `merkeSitzung` (Sandbox-Lauf 14.10., Befund S-3): Der Eintrag greift erst beim
125
+ * naechsten Start -- ohne Merkzettel meldete der naechste Befehl in derselben Sitzung sofort
126
+ * "hat nicht nachgesehen". Bis 0.4.0-durchstich.1 stempelte `skill install` deshalb die
127
+ * Sitzung als NACHGESEHEN. Das hielt den Fehlalarm still, aber auch die Wache selbst: Wer im
128
+ * selben Gespraech weitermacht, hoerte sie am ersten Tag nie (gemessen: das Pro-Angebot lag
129
+ * bereit, `cli_nachrichten_gezeigt` blieb leer). Ein eigenes Feld trennt beides --
130
+ * `wacheAusgefallen` liest es, `schonFuerDieseSitzung` nicht.
131
+ */
132
+ export function merkeEinrichtung(sitzung) {
133
+ if (sitzung === null)
134
+ return;
135
+ schreibeWacheDatei({ ...(leseWacheDatei() ?? {}), eingerichtet: sitzung });
136
+ }
119
137
  /** Wie viele Sitzungen der Merkzettel sich merkt -- genug fuer mehrere Fenster ueber Tage. */
120
138
  const MERKE_SITZUNGEN = 20;
121
139
  /**
@@ -171,7 +189,10 @@ function gesehen(inhalt, jetzt) {
171
189
  * Terminalfenster tippt, will die Antwort jetzt -- ein Merkzettel von gestern
172
190
  * darf ihn nicht zum Schweigen bringen.
173
191
  */
174
- export function schonFuerDieseSitzung(inhalt, jetzt) {
192
+ export function schonFuerDieseSitzung(
193
+ // `eingerichtet` steht im Typ, damit der ganze Merkzettel hereinpasst -- gelesen wird es
194
+ // hier ABSICHTLICH nicht: Eingerichtet heisst nicht nachgesehen (S-3, `merkeEinrichtung`).
195
+ inhalt, jetzt) {
175
196
  return jetzt !== null && inhalt !== null && gesehen(inhalt, jetzt);
176
197
  }
177
198
  /**
@@ -186,9 +207,13 @@ export function schonFuerDieseSitzung(inhalt, jetzt) {
186
207
  * dann aus wie an einem guten Tag. *Eine Wache, die still stirbt, ist
187
208
  * schlimmer als keine: Sie kauft Vertrauen und deckt nichts mehr.*
188
209
  *
189
- * 🔴 DREI MAL SCHWEIGEN, EINMAL SPRECHEN:
210
+ * 🔴 FUENF MAL SCHWEIGEN, EINMAL SPRECHEN:
190
211
  * - Keine Sitzungsnummer -> der Mensch sitzt im Terminalfenster, die Wache
191
212
  * hatte nie einen Anlass zu laufen. "Nicht gelaufen" heisst hier nichts.
213
+ * - Kein Merkzettel -> die Wache war nie eingerichtet; `skill install` legt ihn an.
214
+ * Bis 0.4.0-durchstich.1 meldete das hier -- die allererste Ausgabe einer neuen
215
+ * Kundin war ein Fehlalarm (Sandbox-Lauf 14.10., Befund S-2).
216
+ * - In dieser Sitzung eingerichtet -> sie greift erst beim naechsten Start (S-3).
192
217
  * - Abgeschaltet -> wer `kimal3 wache aus` getippt hat, will nicht taeglich
193
218
  * daran erinnert werden. Sonst waere der Ausschalter keiner.
194
219
  * - Dieselbe Nummer -> sie hat fuer diese Sitzung nachgesehen.
@@ -201,9 +226,9 @@ export function wacheAusgefallen(
201
226
  // Fassung traegt genau das und sonst nichts, und dieser Fall gehoert
202
227
  // geprueft. Ein Typ, der ihn verbietet, verbietet auch seine Pruefung.
203
228
  inhalt, jetzt) {
204
- if (jetzt === null)
229
+ if (jetzt === null || inhalt === null)
205
230
  return false;
206
- if (inhalt !== null && inhalt.aus === true)
231
+ if (inhalt.aus === true)
207
232
  return false;
208
- return inhalt === null || !gesehen(inhalt, jetzt);
233
+ return !gesehen(inhalt, jetzt) && inhalt.eingerichtet !== jetzt;
209
234
  }
package/package.json CHANGED
@@ -1,27 +1,28 @@
1
- {
2
- "name": "kimal3",
3
- "version": "0.3.2",
4
- "description": "Trag deine KI-Projekte dort ein, wo sie entstehen: im Terminal. · Log your AI projects where they happen: in the terminal.",
5
- "type": "module",
6
- "bin": {
7
- "kimal3": "dist/kimal3.js"
8
- },
9
- "files": [
10
- "dist",
11
- "skill",
12
- "README.md"
13
- ],
14
- "engines": {
15
- "node": ">=20"
16
- },
17
- "scripts": {
18
- "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json",
19
- "prepublishOnly": "npm run build"
20
- },
21
- "keywords": [
22
- "kimal3",
23
- "cli"
24
- ],
25
- "homepage": "https://app.kimal3.de/pro",
26
- "license": "SEE LICENSE IN README.md"
27
- }
1
+ {
2
+ "name": "kimal3",
3
+ "version": "0.4.0-durchstich.3",
4
+ "description": "Trag deine KI-Projekte dort ein, wo sie entstehen: im Terminal. · Log your AI projects where they happen: in the terminal.",
5
+ "type": "module",
6
+ "bin": {
7
+ "kimal3": "dist/kimal3.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "skill",
12
+ "claude-plugins",
13
+ "README.md"
14
+ ],
15
+ "engines": {
16
+ "node": ">=20"
17
+ },
18
+ "scripts": {
19
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "kimal3",
24
+ "cli"
25
+ ],
26
+ "homepage": "https://app.kimal3.de/pro",
27
+ "license": "SEE LICENSE IN README.md"
28
+ }
package/skill/SKILL.md CHANGED
@@ -130,11 +130,10 @@ frag ihn, welche Firma.** Was hier auf dem Spiel steht: Der Ordner trägt den Na
130
130
  Firma auf die Platte, nach der er nicht gefragt hat — und er merkt es nicht, weil auf seinem
131
131
  Bildschirm nur „✓ angelegt" steht.
132
132
 
133
- ⚠️ **`werkbank neu` braucht Pro — eigenes oder über die Firma.** Pro hat, wer selbst Pro hat
134
- oder Mitglied einer Firma ist, deren Admin Pro hat. Ein Kollege, auf den beides nicht zutrifft,
135
- bekommt Rückgabewert `4` — dann **nicht** wiederholen und nicht raten, sondern genau das sagen:
136
- Sein Konto hat keinen Pro-Zugang, auch nicht über seine Firma; Pro bekommt die ganze Firma,
137
- sobald ihre Admin Pro hat.
133
+ 📌 **`werkbank neu` (und `arbeitsplatz neu`) funktionieren für jedes angemeldete Konto — ohne Pro.**
134
+ Pro entscheidet nur darüber, ob der gemeinsame Firmenkontext (die Antworten, die der Firmen-Admin
135
+ gepflegt hat) im Ordner steht: Ohne Pro bekommt der Ordner den Firmennamen und die leeren Fragen,
136
+ mit Pro zusätzlich die Antworten.
138
137
 
139
138
  **Was dabei entsteht:** ein Firmen-Ordner mit Regeln für Marke, Systeme und Sicherheit, darin
140
139
  eine Werkbank zum Arbeiten und ein Beispiel-Projekt zum Ansehen. `werkbank neu` legt nur den
@@ -259,7 +258,7 @@ das Wissen der gewählten Firma **auf seine Platte**, `kontext hoch` schickt sei
259
258
  die gewählte Firma** — dort sehen sie alle Kolleginnen und Kollegen. *Eine falsche Wahl ist
260
259
  hier keine falsche Anzeige, sondern eine Datei am falschen Ort.*
261
260
 
262
- ⚠️ **Beide Befehle brauchen wie `werkbank neu` Pro — eigenes oder über die Firma** — ohne das
261
+ ⚠️ **Beide Befehle brauchen Pro — eigenes oder über die Firma** — ohne das
263
262
  kommt Rückgabewert `4`, dann **nicht wiederholen**.
264
263
 
265
264
  `kimal3 kontext hoch --ueberschreiben` erzwingt das Speichern, auch wenn die Firma inzwischen von
package/skill/en/SKILL.md CHANGED
@@ -131,11 +131,10 @@ in its company knowledge**. If you choose yourself, you put a company's knowledg
131
131
  disk that they never asked for — and they don't notice, because their screen only says
132
132
  “✓ … files created.”
133
133
 
134
- ⚠️ **`workbench new` needs Pro — their own or through their company.** Someone has Pro if they
135
- have it themselves or belong to a company whose admin has Pro. A colleague for whom neither is
136
- true gets exit code `4` — then do **not** retry and do not guess, but say exactly that: their
137
- account has no Pro access, not even through their company; the whole company gets Pro as soon as
138
- its admin has Pro.
134
+ 📌 **`workbench new` (and `workplace new`) work for every signed-in account — without Pro.**
135
+ Pro only decides whether the shared company context (the answers the company admin has
136
+ maintained) is in the folder: without Pro the folder gets the company name and the empty
137
+ questions, with Pro the answers as well.
139
138
 
140
139
  **What this creates:** a company folder with rules for brand, systems and security, inside it a
141
140
  workbench to work in and an example project to look at. `workbench new` only creates the second
@@ -257,7 +256,7 @@ company's knowledge **onto their disk**, `context upload` sends their texts **in
257
256
  company** — where all their colleagues see them. *A wrong choice here is not a wrong display but a
258
257
  file in the wrong place.*
259
258
 
260
- ⚠️ **Like `workbench new`, both commands need Pro — their own or through their company** —
259
+ ⚠️ **Both commands need Pro — their own or through their company** —
261
260
  without it comes exit code `4`, then **do not retry**.
262
261
 
263
262
  `kimal3 context upload --overwrite` forces the save, even if someone else has changed the company