living-ai-documentation 2.0.0 → 2.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.
Files changed (31) hide show
  1. package/dist/src/frontend/agents.js +288 -0
  2. package/dist/src/frontend/config.js +3 -2
  3. package/dist/src/frontend/diagram/color-picker.js +72 -0
  4. package/dist/src/frontend/diagram/defaults-modal.js +302 -0
  5. package/dist/src/frontend/diagram/edge-panel.js +110 -11
  6. package/dist/src/frontend/diagram/main.js +5 -8
  7. package/dist/src/frontend/diagram/network.js +16 -7
  8. package/dist/src/frontend/diagram/node-panel.js +104 -2
  9. package/dist/src/frontend/diagram.html +52 -29
  10. package/dist/src/frontend/i18n/en.json +43 -1
  11. package/dist/src/frontend/i18n/fr.json +43 -1
  12. package/dist/src/frontend/index.html +156 -33
  13. package/dist/src/frontend/workspace/app.js +439 -67
  14. package/dist/src/frontend/workspace/app.js.map +1 -1
  15. package/dist/src/frontend/workspace/app.ts +582 -84
  16. package/dist/src/frontend/workspace/index.html +232 -82
  17. package/dist/src/frontend/workspace/persistence.js +61 -0
  18. package/dist/src/frontend/workspace/persistence.js.map +1 -1
  19. package/dist/src/frontend/workspace/persistence.ts +111 -0
  20. package/dist/src/frontend/workspace/styles.css +293 -34
  21. package/dist/src/lib/config.d.ts +23 -0
  22. package/dist/src/lib/config.d.ts.map +1 -1
  23. package/dist/src/lib/config.js +16 -0
  24. package/dist/src/lib/config.js.map +1 -1
  25. package/dist/src/routes/config.d.ts.map +1 -1
  26. package/dist/src/routes/config.js +13 -0
  27. package/dist/src/routes/config.js.map +1 -1
  28. package/dist/src/routes/workspace.d.ts.map +1 -1
  29. package/dist/src/routes/workspace.js +528 -6
  30. package/dist/src/routes/workspace.js.map +1 -1
  31. package/package.json +2 -2
@@ -19,7 +19,7 @@
19
19
  "nav.toggle_sidebar": "Afficher/masquer le panneau",
20
20
  "nav.search_placeholder": "Rechercher dans les docs…",
21
21
  "nav.search_mobile_placeholder": "Rechercher…",
22
- "nav.workspace": "Workspace",
22
+ "nav.workspace": "Workspace Agentique",
23
23
  "nav.toggle_dark": "Basculer le mode sombre",
24
24
  "nav.export": "Exporter",
25
25
  "nav.toggle_categories": "Afficher/masquer le regroupement par catégorie",
@@ -29,12 +29,30 @@
29
29
  "nav.export_all_pdf": "Exporter tous les documents en PDF",
30
30
  "nav.new_folder": "Nouveau dossier",
31
31
  "nav.new_document": "Nouveau document",
32
+ "nav.ai_agents": "Agents IA",
32
33
  "nav.word_cloud": "☁ Nuage de mots",
33
34
  "nav.diagram": "◇ Diagramme",
34
35
  "nav.ai_context": "Contexte IA",
35
36
  "nav.files": "📁 Fichiers joints",
36
37
  "nav.admin": "⚙ Admin",
37
38
 
39
+ "agents.title": "Agents IA",
40
+ "agents.subtitle": "Lancer un agent configuré dans le workspace.",
41
+ "agents.empty": "Aucun agent workspace n'est encore configuré.",
42
+ "agents.ready": "Prêt",
43
+ "agents.requires_input": "Input requis",
44
+ "agents.not_ready": "Configuration incomplète",
45
+ "agents.no_provider": "Aucun provider LLM",
46
+ "agents.input_title": "Input agent",
47
+ "agents.input_hint": "Renseignez l'input nécessaire à cette exécution.",
48
+ "agents.run": "Lancer l'agent",
49
+ "agents.loading": "Exécution de l'agent…",
50
+ "agents.success": "Exécution terminée",
51
+ "agents.failure": "Échec de l'exécution",
52
+ "agents.open_document": "Ouvrir le document",
53
+ "agents.load_failed": "Impossible de charger les agents workspace.",
54
+ "agents.run_failed": "Échec de l'exécution de l'agent.",
55
+
38
56
  "files.title": "📁 Fichiers joints",
39
57
  "files.empty": "Aucun fichier — téléversez-en un depuis un document (trombone, glisser-déposer ou coller).",
40
58
  "files.replace": "Remplacer",
@@ -591,7 +609,26 @@
591
609
  "diagram.toolbar.shape_editor": "Éditeur de formes personnalisées",
592
610
  "diagram.toolbar.arrow": "Flèche (F)",
593
611
  "diagram.toolbar.delete": "Supprimer (Suppr)",
612
+ "diagram.toolbar.defaults": "Valeurs par défaut — configurer les tailles, couleurs et styles par défaut",
594
613
  "diagram.toolbar.align_guides": "Guides d'alignement — indique l'alignement entre formes du même type",
614
+ "diagram.defaults.title": "Valeurs par défaut",
615
+ "diagram.defaults.section.arrows": "Flèches",
616
+ "diagram.defaults.section.shapes": "Formes",
617
+ "diagram.defaults.field.direction": "Direction",
618
+ "diagram.defaults.field.style": "Style",
619
+ "diagram.defaults.field.font_size": "Taille police",
620
+ "diagram.defaults.field.width": "L",
621
+ "diagram.defaults.field.height": "H",
622
+ "diagram.defaults.field.color": "Couleur",
623
+ "diagram.defaults.style.solid": "Plein",
624
+ "diagram.defaults.style.dashed": "Pointillé",
625
+ "diagram.defaults.shape.box": "Rectangle",
626
+ "diagram.defaults.shape.ellipse": "Ellipse",
627
+ "diagram.defaults.shape.circle": "Cercle",
628
+ "diagram.defaults.shape.database": "Base de données",
629
+ "diagram.defaults.shape.actor": "Acteur",
630
+ "diagram.defaults.shape.postit": "Post-it",
631
+ "diagram.defaults.shape.text_free": "Texte libre",
595
632
  "diagram.toolbar.grid": "Grille / Magnétisme (G)",
596
633
  "diagram.toolbar.edge_style": "Basculer flèches courbes / droites",
597
634
  "diagram.toolbar.resize_corner": "Mode redimensionnement : coin fixe (cliquer pour centre fixe)",
@@ -609,6 +646,8 @@
609
646
  "diagram.sidebar.empty": "Aucun diagramme",
610
647
  "diagram.sidebar.delete_title": "Supprimer",
611
648
 
649
+ "diagram.node_panel.color": "Couleur de la forme",
650
+ "diagram.node_panel.save_as_default": "Enregistrer comme valeur par défaut pour ce type de forme",
612
651
  "diagram.node_panel.lock": "Verrouiller la sélection",
613
652
  "diagram.node_panel.unlock": "Déverrouiller la sélection",
614
653
  "diagram.node_panel.edit_label": "Modifier le texte (double-clic)",
@@ -648,6 +687,9 @@
648
687
  "diagram.link_panel.save_btn": "Enregistrer",
649
688
  "diagram.link_panel.remove_btn": "Retirer",
650
689
 
690
+ "diagram.edge_panel.font_size_value": "Taille de police",
691
+ "diagram.edge_panel.color": "Couleur de la flèche",
692
+ "diagram.edge_panel.save_as_default": "Enregistrer comme valeur par défaut pour les flèches",
651
693
  "diagram.edge_panel.lock": "Verrouiller la flèche",
652
694
  "diagram.edge_panel.unlock": "Déverrouiller la flèche",
653
695
  "diagram.edge_panel.no_arrow": "Trait simple",
@@ -58,6 +58,7 @@
58
58
  <script defer src="/accuracy-gauge.js"></script>
59
59
  <script defer src="/validate.js"></script>
60
60
  <script defer src="/export.js"></script>
61
+ <script defer src="/agents.js"></script>
61
62
  <script defer src="/modals/diagram-link-modal.js"></script>
62
63
  <script defer src="/modals/new-folder-modal.js"></script>
63
64
  <script defer src="/modals/new-doc-modal.js"></script>
@@ -531,61 +532,47 @@
531
532
  <!-- ── Header ── -->
532
533
  <header
533
534
  id="header"
534
- class="no-print flex items-center justify-between px-4 h-14 border-b border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 shrink-0 z-10 shadow-sm"
535
+ class="no-print flex items-center justify-between px-6 h-[72px] border-b border-gray-200 dark:border-gray-800 bg-white/90 dark:bg-gray-900/90 backdrop-blur shrink-0 z-10 shadow-sm"
535
536
  >
536
537
  <div class="flex items-center gap-3">
537
538
  <span
538
539
  onclick="toggleSidebar()"
539
540
  data-i18n-title="nav.toggle_sidebar"
540
541
  title="Toggle sidebar"
541
- class="text-blue-600 dark:text-blue-400 text-xl select-none cursor-pointer hover:opacity-70 transition-opacity"
542
- >&#128218;</span
543
- >
544
- <span id="app-title" class="font-semibold text-base tracking-tight"
545
- >Living Documentation</span
542
+ class="select-none cursor-pointer hover:opacity-70 transition-opacity flex items-center justify-center w-[38px] h-[38px] rounded-[10px] bg-gray-900 dark:bg-gray-800 border border-gray-600 text-white text-xs font-black"
543
+ >LD</span
546
544
  >
545
+ <div>
546
+ <div id="app-title" class="font-[760] text-[15px] tracking-tight leading-tight">Living AI Documentation</div>
547
+ <div id="app-subtitle" class="text-[12px] text-gray-400 mt-[2px]"></div>
548
+ </div>
547
549
  </div>
548
550
 
549
551
  <div class="flex items-center gap-2">
550
- <!-- Search (desktop — mirrors sidebar search) -->
551
- <div class="relative hidden sm:block">
552
- <input
553
- id="header-search"
554
- type="search"
555
- data-i18n-placeholder="nav.search_placeholder"
556
- placeholder="Search docs…"
557
- class="w-56 pl-8 pr-3 py-1.5 text-sm rounded-lg border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-gray-100 placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-blue-500"
558
- />
559
- <span
560
- class="absolute left-2.5 top-2 text-gray-400 text-sm pointer-events-none"
561
- >&#128269;</span
562
- >
563
- </div>
564
-
565
552
  <!-- Workspace -->
566
553
  <a
567
554
  href="/workspace"
568
555
  data-i18n="nav.workspace"
569
- class="text-sm px-3 py-1.5 rounded-lg text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors font-medium"
556
+ class="h-[34px] px-3 rounded-[9px] border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 text-[13px] font-bold text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors inline-flex items-center no-underline"
570
557
  >
571
558
  Workspace
572
559
  </a>
573
560
 
574
- <!-- Dark mode toggle -->
561
+ <!-- AI Agents -->
575
562
  <button
576
- id="dark-toggle"
577
- data-i18n-title="nav.toggle_dark"
578
- title="Toggle dark mode"
579
- class="p-2 rounded-lg text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
563
+ id="ai-agents-btn"
564
+ type="button"
565
+ data-i18n="nav.ai_agents"
566
+ class="h-[34px] px-3 rounded-[9px] border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 text-[13px] font-bold text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors inline-flex items-center"
580
567
  >
581
- <span id="dark-icon" class="text-lg leading-none">&#9790;</span>
568
+ Agents IA
582
569
  </button>
583
570
 
584
571
  <!-- Word Cloud -->
585
572
  <button
586
573
  onclick="openWordCloud()"
587
574
  data-i18n="nav.word_cloud"
588
- class="text-sm px-3 py-1.5 rounded-lg text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors font-medium"
575
+ class="h-[34px] px-3 rounded-[9px] border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 text-[13px] font-bold text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors inline-flex items-center"
589
576
  >
590
577
  &#9729; Word Cloud
591
578
  </button>
@@ -594,7 +581,7 @@
594
581
  <a
595
582
  href="/diagram"
596
583
  data-i18n="nav.diagram"
597
- class="text-sm px-3 py-1.5 rounded-lg text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors font-medium"
584
+ class="h-[34px] px-3 rounded-[9px] border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 text-[13px] font-bold text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors inline-flex items-center no-underline"
598
585
  >
599
586
  &#9671; Diagram
600
587
  </a>
@@ -603,7 +590,7 @@
603
590
  <a
604
591
  href="/context"
605
592
  data-i18n="nav.ai_context"
606
- class="text-sm px-3 py-1.5 rounded-lg text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors font-medium"
593
+ class="h-[34px] px-3 rounded-[9px] border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 text-[13px] font-bold text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors inline-flex items-center no-underline"
607
594
  >
608
595
  AI Context
609
596
  </a>
@@ -612,7 +599,7 @@
612
599
  <button
613
600
  onclick="openFilesModal()"
614
601
  data-i18n="nav.files"
615
- class="text-sm px-3 py-1.5 rounded-lg text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors font-medium"
602
+ class="h-[34px] px-3 rounded-[9px] border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 text-[13px] font-bold text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors inline-flex items-center"
616
603
  >
617
604
  &#128193; Files
618
605
  </button>
@@ -621,10 +608,35 @@
621
608
  <a
622
609
  href="/admin"
623
610
  data-i18n="nav.admin"
624
- class="text-sm px-3 py-1.5 rounded-lg text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors font-medium"
611
+ class="h-[34px] px-3 rounded-[9px] border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 text-[13px] font-bold text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors inline-flex items-center no-underline"
625
612
  >
626
613
  &#9881; Admin
627
614
  </a>
615
+
616
+ <!-- Dark mode toggle -->
617
+ <button
618
+ id="dark-toggle"
619
+ data-i18n-title="nav.toggle_dark"
620
+ title="Toggle dark mode"
621
+ class="p-2 rounded-lg text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
622
+ >
623
+ <span id="dark-icon" class="text-lg leading-none">&#9790;</span>
624
+ </button>
625
+
626
+ <!-- Search (desktop — mirrors sidebar search) -->
627
+ <div class="relative hidden sm:block">
628
+ <input
629
+ id="header-search"
630
+ type="search"
631
+ data-i18n-placeholder="nav.search_placeholder"
632
+ placeholder="Search docs…"
633
+ class="w-56 pl-8 pr-3 py-1.5 text-sm rounded-lg border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-gray-100 placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-blue-500"
634
+ />
635
+ <span
636
+ class="absolute left-2.5 top-2 text-gray-400 text-sm pointer-events-none"
637
+ >&#128269;</span
638
+ >
639
+ </div>
628
640
  </div>
629
641
  </header>
630
642
 
@@ -3110,6 +3122,117 @@
3110
3122
  </div>
3111
3123
  </div>
3112
3124
 
3125
+ <!-- ── AI agents launch modal ── -->
3126
+ <div
3127
+ id="ai-agents-modal"
3128
+ class="hidden fixed inset-0 z-[55] bg-black/45 flex items-center justify-center p-4"
3129
+ onclick="if(event.target===this)closeAiAgentsModal()"
3130
+ >
3131
+ <div
3132
+ class="w-full max-w-4xl max-h-[82vh] bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-xl shadow-2xl flex flex-col overflow-hidden"
3133
+ onclick="event.stopPropagation()"
3134
+ >
3135
+ <div class="px-5 py-4 border-b border-gray-200 dark:border-gray-800 flex items-start justify-between gap-4">
3136
+ <div>
3137
+ <h2 class="font-semibold text-base text-gray-900 dark:text-gray-100" data-i18n="agents.title">Agents IA</h2>
3138
+ <p class="text-xs text-gray-500 dark:text-gray-400 mt-1" data-i18n="agents.subtitle">
3139
+ Launch a configured workspace agent.
3140
+ </p>
3141
+ </div>
3142
+ <button
3143
+ type="button"
3144
+ onclick="closeAiAgentsModal()"
3145
+ data-i18n-title="common.close"
3146
+ class="text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 text-xl leading-none px-2"
3147
+ >
3148
+ &times;
3149
+ </button>
3150
+ </div>
3151
+ <div id="ai-agents-grid" class="p-5 overflow-y-auto grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3">
3152
+ <p class="text-sm text-gray-400" data-i18n="common.loading">Loading…</p>
3153
+ </div>
3154
+ </div>
3155
+ </div>
3156
+
3157
+ <!-- ── AI agent input modal ── -->
3158
+ <div
3159
+ id="ai-agent-input-modal"
3160
+ class="hidden fixed inset-0 z-[56] bg-black/45 flex items-center justify-center p-4"
3161
+ onclick="if(event.target===this)closeAiAgentInputModal()"
3162
+ >
3163
+ <div
3164
+ class="w-full max-w-2xl bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-xl shadow-2xl flex flex-col overflow-hidden"
3165
+ onclick="event.stopPropagation()"
3166
+ >
3167
+ <div class="px-5 py-4 border-b border-gray-200 dark:border-gray-800 flex items-start justify-between gap-4">
3168
+ <div>
3169
+ <h2 id="ai-agent-input-title" class="font-semibold text-base text-gray-900 dark:text-gray-100" data-i18n="agents.input_title">Agent input</h2>
3170
+ <p id="ai-agent-input-hint" class="text-xs text-gray-500 dark:text-gray-400 mt-1" data-i18n="agents.input_hint">
3171
+ Provide the input required for this run.
3172
+ </p>
3173
+ </div>
3174
+ <button
3175
+ type="button"
3176
+ onclick="closeAiAgentInputModal()"
3177
+ data-i18n-title="common.close"
3178
+ class="text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 text-xl leading-none px-2"
3179
+ >
3180
+ &times;
3181
+ </button>
3182
+ </div>
3183
+ <div class="p-5 flex flex-col gap-4">
3184
+ <textarea
3185
+ id="ai-agent-user-input"
3186
+ rows="8"
3187
+ class="w-full rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-950 px-3 py-2 text-sm text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500/25 focus:border-blue-500 resize-y"
3188
+ ></textarea>
3189
+ <div class="flex justify-end gap-3">
3190
+ <button
3191
+ type="button"
3192
+ onclick="closeAiAgentInputModal()"
3193
+ data-i18n="common.cancel"
3194
+ class="text-sm px-4 py-2 rounded-lg border border-gray-200 dark:border-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors"
3195
+ >Cancel</button>
3196
+ <button
3197
+ id="ai-agent-input-run"
3198
+ type="button"
3199
+ data-i18n="agents.run"
3200
+ class="text-sm px-4 py-2 rounded-lg bg-blue-600 hover:bg-blue-700 text-white font-semibold transition-colors"
3201
+ >Run agent</button>
3202
+ </div>
3203
+ </div>
3204
+ </div>
3205
+ </div>
3206
+
3207
+ <!-- ── AI agent persistent toast ── -->
3208
+ <div
3209
+ id="ai-agent-toast"
3210
+ class="hidden fixed right-5 bottom-5 z-[70] w-[min(420px,calc(100vw-2.5rem))] rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 shadow-2xl px-4 py-3"
3211
+ role="status"
3212
+ >
3213
+ <div class="flex items-start gap-3">
3214
+ <span id="ai-agent-toast-icon" class="mt-0.5 h-5 w-5 rounded-full border-2 border-blue-500 border-t-transparent animate-spin shrink-0"></span>
3215
+ <div class="min-w-0 flex-1">
3216
+ <p id="ai-agent-toast-title" class="text-sm font-semibold text-gray-900 dark:text-gray-100" data-i18n="agents.loading">Running agent…</p>
3217
+ <p id="ai-agent-toast-message" class="text-xs text-gray-500 dark:text-gray-400 mt-1 break-words"></p>
3218
+ <button
3219
+ id="ai-agent-toast-open"
3220
+ type="button"
3221
+ data-i18n="agents.open_document"
3222
+ class="hidden mt-3 text-xs px-3 py-1.5 rounded-lg bg-blue-600 hover:bg-blue-700 text-white font-semibold transition-colors"
3223
+ >Open document</button>
3224
+ </div>
3225
+ <button
3226
+ id="ai-agent-toast-close"
3227
+ type="button"
3228
+ data-i18n-title="common.close"
3229
+ class="text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 text-lg leading-none px-1 shrink-0"
3230
+ >
3231
+ &times;
3232
+ </button>
3233
+ </div>
3234
+ </div>
3235
+
3113
3236
  <!-- ── Generic confirmation modal (used by showConfirm) ── -->
3114
3237
  <div
3115
3238
  id="confirm-modal"