From: Svjatoslav Agejenko Date: Sun, 19 Apr 2026 20:11:54 +0000 (+0300) Subject: docs: add org-mode documentation and improve navigation links X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=e5b6d1d951b1dc5c8043000704ca8060ffe00294;p=alyverkko-cli.git docs: add org-mode documentation and improve navigation links Add AGENTS.org with project overview in org-mode format. Add CUSTOM_ID properties to all headings in doc/index.org for reliable internal linking. Update .gitignore to use global HTML pattern and ignore IDE project files. Rename tool scripts with title case. --- diff --git a/.gitignore b/.gitignore index 52e4c3b..80a1eb3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,8 @@ /doc/apidocs/ /doc/graphs/ -/doc/index.html -/doc/setup.html - +/.classpath +/.factorypath +/.project +*.html diff --git a/AGENTS.org b/AGENTS.org new file mode 100644 index 0000000..e94c8e3 --- /dev/null +++ b/AGENTS.org @@ -0,0 +1,95 @@ +A Java CLI tool for batch processing with large language models using +CPU-based computation via llama.cpp. Designed for "slow but smart" AI +tasks where batch processing is more valuable than real-time +interaction. + +* Commands + +- *wizard* :: Interactive configuration wizard. Validates and fixes + configuration files, discovers new models in the models directory, + and updates configuration. Run this first to set up or update your + setup. + +- *process* :: Continuous task processor. Monitors the tasks directory + for files starting with =TOCOMPUTE:=, processes them using the + configured AI model, and appends results to the same file. + +- *listmodels* :: Lists all available models defined in the configuration. + +- *joinfiles* :: Utility to concatenate multiple files together (used + for preparing task files with context). + +- *addtaskheader* :: Adds a TOCOMPUTE header to task files. + +* Task File Format + +Task files are plain text files placed in the tasks directory. Format: + +#+BEGIN_SRC text +TOCOMPUTE: skill= model= priority= + + +#+END_SRC + +- First line must start with =TOCOMPUTE:= +- Parameters are optional: =skill= (defaults to "default"), =model= + (defaults per-skill or "default"), =priority= (defaults to 0) +- Files are processed in priority order (higher priority = processed first) +- After processing, the file =TOCOMPUTE:= heading in the file is renamed + to =DONE:= and contains the AI response + +* Configuration + +Configuration is stored in YAML format at +=~/.config/alyverkko-cli/configuration.yaml=. Key settings: + +- =tasks_directory= :: Where task files are placed for processing +- =models_directory= :: Directory containing GGUF model files +- =skills_directory= :: Directory containing skill (prompt) YAML files +- =llama_cli_path= :: Path to the llama-cli executable +- =thread_count=, =batch_thread_count= :: CPU thread settings + +** Skills (Prompts) + +Skills are YAML files in the skills directory (e.g., =writer.yaml=): + +#+BEGIN_SRC yaml +prompt: | + You are a helpful assistant... +temperature: 0.7 +top_p: 0.9 +model_alias: "mistral" +timeout_millis: 300000 +#+END_SRC + +Model selection hierarchy (highest priority first): + +1. Explicit =model= parameter in TOCOMPUTE line +2. =model_alias= in skill configuration +3. Model named "default" in configuration + +** Models + +Models are defined in the configuration with aliases, filesystem paths, +and optional settings: + +#+BEGIN_SRC yaml +models: + - alias: "mistral" + filesystem_path: "mistral-7b-instruct-v0.2.Q4_K_M.gguf" + context_size: 8192 + final_answer_indicator: "" +#+END_SRC + +The =final_answer_indicator= splits the AI response into "internal +thoughts" and "final answer" sections in the output file. + +* Source Structure + +- =src/main/java/eu/svjatoslav/alyverkko_cli/= :: Main package + - =Main.java= :: Entry point, command dispatcher + - =Command.java= :: Interface for all commands + - =commands/= :: Command implementations + - =task_processor/= :: Core batch processing logic + - =configuration/= :: Configuration model classes (Configuration, Model, SkillConfig) + - =Utils.java= :: Utility functions diff --git a/doc/index.org b/doc/index.org index 982fc89..80cdd28 100644 --- a/doc/index.org +++ b/doc/index.org @@ -9,6 +9,10 @@ #+OPTIONS: author:nil * Introduction +:PROPERTIES: +:CUSTOM_ID: introduction +:ID: b4da28df-7208-4c27-a1ea-98d8692c5012 +:END: The *Älyverkko CLI* application is a user-friendly tool developed in Java, specifically tailored to streamline the utilization of expansive @@ -59,8 +63,13 @@ is highly beneficial. Note: project is still in early stage. ** Use cases +:PROPERTIES: +:CUSTOM_ID: use-cases +:ID: 9aeba681-2d9d-442f-bc4b-3d61a294e596 +:END: *** Domain: Natural Language Processing (NLP) :PROPERTIES: +:CUSTOM_ID: nlp-domain :ID: e1b6aa9a-a27d-4019-8bd4-fceb0c606e23 :END: @@ -84,6 +93,7 @@ product. *** Domain: Code Generation :PROPERTIES: +:CUSTOM_ID: code-generation-domain :ID: f4c7d3e0-8c18-4123-a797-871ca73a7580 :END: @@ -111,6 +121,7 @@ a way by AI. *** Domain: Content Creation :PROPERTIES: +:CUSTOM_ID: content-creation-domain :ID: f38360ad-54f6-4f24-b299-f73a9faacabd :END: @@ -131,6 +142,10 @@ Here is [[https://www.svjatoslav.eu/writing/Whispers%20in%20the%20Stream%20of%20 *Älyverkko CLI*. ** Why Bother With This Setup? (The Big Picture) +:PROPERTIES: +:CUSTOM_ID: why-this-setup +:ID: 5862520c-db92-4a5e-9177-717e8dea66f8 +:END: Before diving into steps, let's address the elephant in the room: *Why go through this setup when ChatGPT is just a click away?* @@ -151,9 +166,18 @@ but for substantial tasks where quality matters more than speed: code generation, document analysis, content creation, etc. * Concept glossary +:PROPERTIES: +:CUSTOM_ID: concept-glossary +:ID: 3bff0680-db41-4f97-a2af-f677209dd430 +:END: ** General concepts +:PROPERTIES: +:CUSTOM_ID: general-concepts +:ID: 2ae2e3ec-835f-45e1-bc15-618c8b2c3e85 +:END: *** Task :PROPERTIES: +:CUSTOM_ID: task-concept :ID: 140c53cb-8032-4a04-83ed-d1818b1cfc52 :END: @@ -176,6 +200,7 @@ may take minutes to hours. *** Skill :PROPERTIES: +:CUSTOM_ID: skill-concept :ID: 6579abb4-8386-418b-9457-cae6c3345dfb :END: - See also: @@ -207,6 +232,7 @@ rather than constantly redefining how the AI should behave. *** Model :PROPERTIES: +:CUSTOM_ID: model-concept :ID: 074af969-8a9b-407d-a605-6725fe4e8580 :END: @@ -231,6 +257,7 @@ llama.cpp for CPU-based inference. *** "TOCOMPUTE" Marker :PROPERTIES: +:CUSTOM_ID: tocompute-marker :ID: cd4b622a-6b74-4fac-85fe-f5b056367824 :END: @@ -257,6 +284,7 @@ then signal completion with this single line. *** "DONE" Marker :PROPERTIES: +:CUSTOM_ID: done-marker :ID: aa69e23a-248a-4459-a36e-74b43948dba9 :END: @@ -284,6 +312,10 @@ can review the AI's response, add follow-up questions, and re-add a =TOCOMPUTE:= line to continue the conversation. *** Priority +:PROPERTIES: +:CUSTOM_ID: priority-concept +:ID: fc7d5e69-a2ef-4afb-b4c3-a549d0792373 +:END: /Priority/ is an integer value specified in the =TOCOMPUTE:= header (e.g., =priority=10=) that determines task processing order. Higher @@ -308,6 +340,7 @@ jump the queue. *** System Prompt :PROPERTIES: +:CUSTOM_ID: system-prompt :ID: 89bc60f0-89d4-4e10-ae80-8f824f2e3c55 :END: @@ -337,6 +370,7 @@ models. *** User Prompt :PROPERTIES: +:CUSTOM_ID: user-prompt :ID: 009e5410-f852-4faa-b81a-f9c98b056ae3 :END: @@ -369,6 +403,10 @@ interaction. Well-structured prompts yield significantly better results - the AI can only work with what you provide. *** Model Library +:PROPERTIES: +:CUSTOM_ID: model-library +:ID: 5ec0618d-90bb-4b7e-913a-477da45f406f +:END: The /model library/ is the internal registry of all available AI models configured in the system. It's constructed during startup @@ -391,6 +429,10 @@ actual model files on disk, handling all path resolution and validation so your tasks can reference models by simple aliases. *** GGUF Format +:PROPERTIES: +:CUSTOM_ID: gguf-format +:ID: 7d8ae98c-5d47-422e-8d18-00496774cfd9 +:END: /GGUF/ is the binary model format used by llama.cpp for AI inference. @@ -409,6 +451,7 @@ on consumer hardware - a 4-bit quantized 70B model requires "only" *** llama.cpp :PROPERTIES: +:CUSTOM_ID: llama-cpp :ID: 01b0d389-75d4-420f-8d5c-cae29900301f :END: @@ -437,8 +480,13 @@ couldn't execute any AI tasks - it's the actual "brain" behind the system. ** Important files and directories +:PROPERTIES: +:CUSTOM_ID: important-files-directories +:ID: ca3dce55-566b-427f-b6d1-630fcd245f76 +:END: *** Configuration File :PROPERTIES: +:CUSTOM_ID: configuration-file :ID: fd687508-0a76-4fee-9a1c-4031cb403c60 :END: @@ -468,6 +516,10 @@ precedence follows *skill* > *model* > *global* rules, creating a flexible hierarchy for managing complex workflows. *** Skill Directory +:PROPERTIES: +:CUSTOM_ID: skill-directory +:ID: c62dcf42-5017-4ba4-9e4d-af5517d4f968 +:END: The /skill directory/ (configured via =skills_directory=) is the filesystem location where YAML files defining AI behaviors are stored. @@ -490,6 +542,10 @@ file automatically affects subsequent tasks using that skill, without requiring Alyverkko CLI restart. *** Task Directory +:PROPERTIES: +:CUSTOM_ID: task-directory +:ID: c59976d5-cb22-44b2-a86c-7b39c40cedee +:END: The /task directory/ is the designated filesystem location where users place task files for processing, configured via =tasks_directory= in @@ -529,8 +585,13 @@ Think of it like email versus phone calls - sometimes asynchronous communication is actually /more/ productive. ** Generation parameters +:PROPERTIES: +:CUSTOM_ID: generation-parameters +:ID: 5a253c87-2ae4-4335-a1a2-c9e07a208f7f +:END: *** Temperature :PROPERTIES: +:CUSTOM_ID: temperature :ID: 24a0a54b-828b-4c78-8208-504390848fbc :END: @@ -559,6 +620,7 @@ modifying model files. *** Top-p (Nucleus Sampling) :PROPERTIES: +:CUSTOM_ID: top-p :ID: 047f5bf7-e964-49ac-a666-c7ac75754e54 :END: @@ -583,6 +645,7 @@ general-purpose tasks while preventing extremely low-probability *** Repeat Penalty :PROPERTIES: +:CUSTOM_ID: repeat-penalty :ID: 728f6daf-7a75-4e09-832b-5d449f0b4cae :END: @@ -609,6 +672,7 @@ while allowing more repetition in poetic outputs. *** Top-k :PROPERTIES: +:CUSTOM_ID: top-k :ID: 2c8eb415-509c-4269-8a65-48b2e6662290 :END: @@ -634,6 +698,7 @@ the token selection pool. *** Min-p :PROPERTIES: +:CUSTOM_ID: min-p :ID: 9ee338ae-bb79-4c3e-b262-928fe237cb17 :END: @@ -663,6 +728,10 @@ experiment with min_p=0.03-0.07 for critical applications requiring maximum response reliability. *** Thread Count +:PROPERTIES: +:CUSTOM_ID: thread-count +:ID: 727a72a7-44d1-419d-8c3b-5b2fe224b933 +:END: /Thread count/ specifies the number of CPU threads dedicated to the core AI inference process (configured via =thread_count= in @@ -684,6 +753,10 @@ despite CPU claiming to have 12 threads. Reason is that RAM bandwidth gets fully utilized already very fast with just few threads. *** Batch Thread Count +:PROPERTIES: +:CUSTOM_ID: batch-thread-count +:ID: 133c0c3b-f1f0-454c-a159-cca5266d728a +:END: /Batch thread count/ specifies threads used for prompt preprocessing (configured via =batch_thread_count=). This parameter affects how @@ -694,6 +767,10 @@ typically compute-bound rather than RAM-bound, so higher values often help up to your CPU's logical core count. *** Context Size Tokens +:PROPERTIES: +:CUSTOM_ID: context-size-tokens +:ID: d6b978f2-1db0-4b14-93f3-30ed63d97e59 +:END: /Context size tokens/ defines the maximum number of tokens (word-pieces) a model can process, configured per-model via @@ -712,6 +789,10 @@ size. Always verify your model's actual supported context - exceeding it causes unpredictable or significantly degraded model output. *** Timeout +:PROPERTIES: +:CUSTOM_ID: timeout +:ID: 85ab8c92-9439-44bc-b8d5-cb64f1fd9270 +:END: /Timeout/ is a parameter that specifies the maximum time (in milliseconds) that the AI is allowed to run for a task. If this time @@ -749,6 +830,7 @@ task completion times. *** Parameter Precedence Hierarchy :PROPERTIES: +:CUSTOM_ID: parameter-precedence :ID: 456dd42e-a474-4464-a14e-384c68713537 :END: @@ -773,8 +855,13 @@ creating a flexible "rule cascade" where specialized configurations override broader ones. ** AI response post processing parameters +:PROPERTIES: +:CUSTOM_ID: response-post-processing +:ID: 2096333d-1b08-40fb-b04a-94b739cb1c4b +:END: *** Final answer indicator :PROPERTIES: +:CUSTOM_ID: final-answer-indicator :ID: 8da2522b-d34f-4632-9fdd-603c1a64febb :END: @@ -831,6 +918,10 @@ of internal thought and transition to final response mode. #+end_example *** End of text marker +:PROPERTIES: +:CUSTOM_ID: end-of-text-marker +:ID: a554f321-b387-4666-b7c4-768f0e7a4e96 +:END: An /end of text marker/ is an optional string (e.g., "###", ”[end of text]“) specified per-model that signals the AI has completed its @@ -845,6 +936,10 @@ For example, if a model typically ends responses with "###", setting end of AI response. * Installation +:PROPERTIES: +:CUSTOM_ID: installation +:ID: d5ca2e96-2063-4236-94c8-d962d13ea484 +:END: When you first encounter Älyverkko CLI, the setup process might seem involved compared to cloud-based AI services. That's completely @@ -853,6 +948,10 @@ it ultimately creates a powerful, private, and cost-effective AI assistant that works /for you/. ** Requirements +:PROPERTIES: +:CUSTOM_ID: requirements +:ID: c0e57874-93c1-40fe-a129-e43e7e6dc810 +:END: *Operating System:* Älyverkko CLI is developed and tested on Debian 13 "Bookworm". It @@ -872,6 +971,10 @@ to the installation process. input/output data. ** Your Setup Journey - What to Expect +:PROPERTIES: +:CUSTOM_ID: setup-journey +:ID: 6a2f2fa2-6d40-46c6-bf45-69a261bd69ea +:END: Before we start actual setup, here's brief overview of what you'll be doing: @@ -919,6 +1022,7 @@ doing: ** Installation :PROPERTIES: +:CUSTOM_ID: installation-steps :ID: 0b705a37-9b84-4cd5-878a-fedc9ab09b12 :END: @@ -962,6 +1066,7 @@ computer that runs Debian 13 operating system: ** Alyverkko CLI daemon configuration :PROPERTIES: +:CUSTOM_ID: daemon-configuration :ID: 0fcdae48-81c5-4ae1-bdb9-64ae74e87c45 :END: Älyverkko CLI application configuration is done by editing YAML @@ -971,7 +1076,15 @@ Configuration file should be placed under current user home directory: : ~/.config/alyverkko-cli.yaml *** Key Parameters Explained +:PROPERTIES: +:CUSTOM_ID: key-parameters +:ID: bd4c9716-5f04-4e94-b713-ad0ff078f8a6 +:END: **** Core Directories +:PROPERTIES: +:CUSTOM_ID: core-directories +:ID: 75c76c6b-637c-42a7-a31a-6f6be9570747 +:END: - =tasks_directory=: Where task files are placed for processing. @@ -982,6 +1095,10 @@ Configuration file should be placed under current user home directory: - =llama_cli_path=: Path to llama.cpp's *llama-completion* executable. **** Generation Parameters +:PROPERTIES: +:CUSTOM_ID: generation-parameters-config +:ID: 40ec81ad-cea1-4d41-a007-1f334f9b4117 +:END: - =default_temperature=: (Optional) Creativity control (0-3, higher = more creative). @@ -1001,6 +1118,10 @@ Configuration file should be placed under current user home directory: 1.0 = no penalty) **** Performance Tuning +:PROPERTIES: +:CUSTOM_ID: performance-tuning +:ID: 18acf2d6-7118-4f18-9a86-ac48a33c761b +:END: - =thread_count=: Sets the number of threads to be used by the AI during response generation. RAM data transfer speed is usually @@ -1014,6 +1135,7 @@ Configuration file should be placed under current user home directory: **** Model-Specific Settings :PROPERTIES: +:CUSTOM_ID: model-specific-settings :ID: 4206c6e9-d116-4030-94a4-87bf6f82043f :END: @@ -1048,6 +1170,10 @@ Each model in the =models= list can have: answer indicator]]. *** Configuration file example +:PROPERTIES: +:CUSTOM_ID: configuration-example +:ID: 0c577b27-df6f-429f-9ac2-f89105a73544 +:END: The application is configured using a YAML-formatted configuration file. Below is an example of how the configuration file might look: @@ -1084,6 +1210,10 @@ file. Below is an example of how the configuration file might look: #+end_src *** Enlisting available models +:PROPERTIES: +:CUSTOM_ID: enlisting-models +:ID: 47bb1776-2824-425f-a13b-c0a863c48c23 +:END: Once Älyverkko CLI is installed and properly configured, you can run following command at commandline to see what models are available to it: @@ -1095,6 +1225,10 @@ with "-missing" suffix in their alias by configuration wizard. You can manually remove this suffix after fixing the model file path. *** Self test +:PROPERTIES: +:CUSTOM_ID: self-test +:ID: 781917b5-3d46-4368-9473-8a379088c91f +:END: The *selftest* command performs a series of checks to ensure the system is configured correctly: @@ -1106,9 +1240,14 @@ It verifies: - The presence of the *llama.cpp* executable. ** Skill concept and configuration +:PROPERTIES: +:CUSTOM_ID: skill-configuration +:ID: 1592510e-5a8c-4cf3-9851-4a96fae6434e +:END: + See also: [[id:6579abb4-8386-418b-9457-cae6c3345dfb][Skill]] concept explanation. *** Skill File Format :PROPERTIES: +:CUSTOM_ID: skill-file-format :ID: 47fd0e4e-f86e-4c94-9656-ed76c0f9c2c5 :END: @@ -1131,6 +1270,7 @@ the actual user prompt during execution. *** Example Skill File :PROPERTIES: +:CUSTOM_ID: example-skill-file :ID: 4fae9009-eb2e-4d3f-a43e-68ec8c43a7cd :END: : writer.yaml @@ -1158,6 +1298,10 @@ the actual user prompt during execution. See more example skills: [[https://www3.svjatoslav.eu/projects/alyverkko-cli/examples/skills/default.yaml][default.yaml]], [[https://www3.svjatoslav.eu/projects/alyverkko-cli/examples/skills/summary.yaml][summary.yaml]] ** Starting process daemon +:PROPERTIES: +:CUSTOM_ID: starting-daemon +:ID: ab98110c-4603-40b1-a69c-72ddc13524e6 +:END: Älyverkko CLI keeps continuously listening for and processing tasks from a specified mail directory. @@ -1166,6 +1310,10 @@ There are multiple alternative ways to start Älyverkko CLI in mail processing mode: **** Start via command line interface +:PROPERTIES: +:CUSTOM_ID: start-cli +:ID: bea72be2-994b-479c-bd7d-56300518fb5a +:END: 1. Open your terminal. @@ -1179,6 +1327,10 @@ processing mode: close terminal window. **** Start using your desktop environment application launcher +:PROPERTIES: +:CUSTOM_ID: start-desktop +:ID: eeb89786-3b9a-4e3d-9699-75fd4119ccee +:END: 1. Access the application launcher or application menu on your desktop environment. @@ -1191,6 +1343,10 @@ processing mode: 4. If you want to stop Älyverkko CLI, just close terminal window. **** Start in the background as systemd system service +:PROPERTIES: +:CUSTOM_ID: start-systemd +:ID: 85a79517-dd51-466b-8b12-3907c133e75a +:END: During Älyverkko CLI [[id:0b705a37-9b84-4cd5-878a-fedc9ab09b12][installation]], installation script will prompt you if you want to install *systemd* service. If you chose *Y*, Alyverkko @@ -1207,6 +1363,10 @@ facilities: : sudo systemctl disable alyverkko-cli ** The Light at the End of the Tunnel +:PROPERTIES: +:CUSTOM_ID: setup-benefits +:ID: b96f4505-85a9-4347-8f50-5a83fcbd1bfb +:END: After setup, here's what you get: @@ -1225,8 +1385,13 @@ specific needs. The initial investment pays dividends every time you need serious AI power without compromise. * Usage +:PROPERTIES: +:CUSTOM_ID: usage +:ID: ca6003eb-d478-47e9-b05e-21e3c668595b +:END: ** Task file format :PROPERTIES: +:CUSTOM_ID: task-file-format :ID: f2fd232d-5d2b-42fa-83db-76ab015d4df9 :END: @@ -1246,6 +1411,10 @@ what kind of personality might the number 'zero' have? #+end_example *** Task File Header Format +:PROPERTIES: +:CUSTOM_ID: task-file-header +:ID: 8609b337-83c6-425b-8f6c-d4bda22ebf1e +:END: The first line *must* begin with exactly =TOCOMPUTE:= followed by space-separated key-value pairs: @@ -1260,6 +1429,10 @@ Valid parameters in the header: - =priority=[integer]=: Higher integers mean higher priority (default: 0) *** Processed File Format +:PROPERTIES: +:CUSTOM_ID: processed-file-format +:ID: f9c19a99-b610-46ea-9d2e-902288995048 +:END: After AI processing completes, a new file is created with: 1. First line: =DONE: skill=[name] model=[alias] duration=[time]= @@ -1318,6 +1491,7 @@ After AI processing completes, a new file is created with: ** Task preparation :PROPERTIES: +:CUSTOM_ID: task-preparation :ID: 4b7900e4-77c1-45e7-9c54-772d0d3892ea :END: @@ -1331,6 +1505,7 @@ ready for processing, you should [[id:883d6e7c-60e0-422b-8c00-5cdc9dfec20d][init *** "joinfiles" command :PROPERTIES: +:CUSTOM_ID: joinfiles-command :ID: be907a1f-e347-48d9-ab0c-6a556912dc49 :END: *Note:* See also alternative solution with similar goal: [[https://github.com/aerugo/prelude][prelude]]. @@ -1342,6 +1517,10 @@ statements from various source files, such as software project directories or collections of text documents. **** Usage +:PROPERTIES: +:CUSTOM_ID: joinfiles-usage +:ID: d734875d-e26a-4915-9d2d-4b047f4a4d0e +:END: To use the *joinfiles* command, specify the source directory containing the files you wish to join and a topic name that will be @@ -1365,6 +1544,10 @@ alyverkko-cli joinfiles -t "my_topic" --edit #+end_example **** Options +:PROPERTIES: +:CUSTOM_ID: joinfiles-options +:ID: be737651-2f1b-4197-a6ad-40ffb8bc8df5 +:END: - **-s, --src-dir**: Specifies the source directory from which to join files. @@ -1380,6 +1563,10 @@ alyverkko-cli joinfiles -t "my_topic" --edit operation is complete. **** Example Use Case +:PROPERTIES: +:CUSTOM_ID: joinfiles-example +:ID: c2e1066c-7f1b-4007-a22c-69c40a772c48 +:END: Imagine you have a software project with various source files that you want to analyze using AI. You can use the *joinfiles* command to @@ -1398,6 +1585,7 @@ and after some time, you will get results and the end of the file. ** Initiate AI processing :PROPERTIES: +:CUSTOM_ID: initiate-processing :ID: 883d6e7c-60e0-422b-8c00-5cdc9dfec20d :END: @@ -1441,6 +1629,7 @@ can benefit from [[id:25038854-c905-4b26-9670-cca06600223e][purpose-built GNU Em ** Helpful GNU Emacs utilities :PROPERTIES: +:CUSTOM_ID: emacs-utilities :ID: 25038854-c905-4b26-9670-cca06600223e :END: @@ -1449,6 +1638,10 @@ use Älyverkko CLI. Their purpose is to increase comfort for existing GNU Emacs users. *** Easily compose new problem statement for AI from emacs +:PROPERTIES: +:CUSTOM_ID: emacs-compose-task +:ID: 4ae50ef2-104d-43f7-a002-ba007d99693f +:END: The Elisp function *ai-new-topic* facilitates the creation and opening of a new Org-mode file dedicated to a user-defined topic within a @@ -1485,6 +1678,10 @@ new file and open it for editing. #+end_src *** Easily signal to AI that problem statement is ready for solving +:PROPERTIES: +:CUSTOM_ID: emacs-signal-ready +:ID: 6ef58180-ece3-4649-927a-e8465c9b4083 +:END: The function =alyverkko-compute= is designed to enhance the workflow of users working with the Älyverkko CLI application by automating the @@ -1550,6 +1747,10 @@ the top of the current buffer." #+end_src * Getting the source code +:PROPERTIES: +:CUSTOM_ID: getting-source-code +:ID: f67a3668-eca2-425f-b284-915ff3b3ed82 +:END: - This program is free software: released under Creative Commons Zero (CC0) license. @@ -1562,6 +1763,7 @@ the top of the current buffer." ** Source code :PROPERTIES: +:CUSTOM_ID: source-code :ID: f5740953-079b-40f4-87d8-b6d1635a8d39 :END: - [[https://www2.svjatoslav.eu/gitweb/?p=alyverkko-cli.git;a=snapshot;h=HEAD;sf=tgz][Download latest snapshot in TAR GZ format]] @@ -1577,6 +1779,10 @@ the top of the current buffer." understand diagrams. Diagrams were generated using [[https://www3.svjatoslav.eu/projects/javainspect/][JavaInspect tool]]. * Feature ideas +:PROPERTIES: +:CUSTOM_ID: feature-ideas +:ID: 0f597bc9-0a23-40e2-b60d-80d2394a3f85 +:END: - Recommend some concrete AI models. diff --git a/tools/Implement idea b/tools/Implement idea new file mode 100755 index 0000000..6472735 --- /dev/null +++ b/tools/Implement idea @@ -0,0 +1,12 @@ +#!/bin/bash +cd "${0%/*}"; if [ "$1" != "T" ]; then gnome-terminal -e "'$0' T"; exit; fi; +cd .. + +read -p "Enter the topic name: " TOPIC_NAME + +alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "*.org" +alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "*.java" +alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "implement*" +alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "install" +alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "uninstall" +alyverkko-cli joinfiles -t "$TOPIC_NAME" --edit diff --git a/tools/Open with IntelliJ IDEA b/tools/Open with IntelliJ IDEA new file mode 100755 index 0000000..304bf94 --- /dev/null +++ b/tools/Open with IntelliJ IDEA @@ -0,0 +1,54 @@ +#!/bin/bash + +# This script launches IntelliJ IDEA with the current project +# directory. The script is designed to be run by double-clicking it in +# the GNOME Nautilus file manager. + +# First, we change the current working directory to the directory of +# the script. + +# "${0%/*}" gives us the path of the script itself, without the +# script's filename. + +# This command basically tells the system "change the current +# directory to the directory containing this script". + +cd "${0%/*}" + +# Then, we move up one directory level. +# The ".." tells the system to go to the parent directory of the current directory. +# This is done because we assume that the project directory is one level up from the script. +cd .. + +# Now, we use the 'setsid' command to start a new session and run +# IntelliJ IDEA in the background. 'setsid' is a UNIX command that +# runs a program in a new session. + +# The command 'idea .' opens IntelliJ IDEA with the current directory +# as the project directory. The '&' at the end is a UNIX command that +# runs the process in the background. The '> /dev/null' part tells +# the system to redirect all output (both stdout and stderr, denoted +# by '&') that would normally go to the terminal to go to /dev/null +# instead, which is a special file that discards all data written to +# it. + +setsid idea . &>/dev/null & + +# The 'disown' command is a shell built-in that removes a shell job +# from the shell's active list. Therefore, the shell will not send a +# SIGHUP to this particular job when the shell session is terminated. + +# '-h' option specifies that if the shell receives a SIGHUP, it also +# doesn't send a SIGHUP to the job. + +# '$!' is a shell special parameter that expands to the process ID of +# the most recent background job. +disown -h $! + + +sleep 2 + +# Finally, we use the 'exit' command to terminate the shell script. +# This command tells the system to close the terminal window after +# IntelliJ IDEA has been opened. +exit diff --git a/tools/Update web site b/tools/Update web site new file mode 100755 index 0000000..ec23ca9 --- /dev/null +++ b/tools/Update web site @@ -0,0 +1,36 @@ +#!/bin/bash +cd "${0%/*}"; if [ "$1" != "T" ]; then gnome-terminal -e "'$0' T"; exit; fi; + +cd .. + +# Build the project jar file and the apidocs. +export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64/ +mvn clean package + +# Export org to html using emacs in batch mode +( + cd doc/ + + rm -f index.html + emacs --batch -l ~/.emacs --visit=index.org --funcall=org-html-export-to-html --kill + + #rm setup.html + #emacs --batch -l ~/.emacs --visit=setup.org --funcall=org-html-export-to-html --kill +) + +# Generate class diagrams. See: https://www3.svjatoslav.eu/projects/javainspect/ +rm -rf doc/graphs/ +mkdir -p doc/graphs/ +javainspect -j target/alyverkko-cli-*-SNAPSHOT.jar -d doc/graphs/ -n "all classes" -t png -ho +meviz index -w doc/graphs/ -t "Älyverkko CLI program classes" + +# Copy the apidocs to the doc folder so that they can be uploaded to the server. +rm -rf doc/apidocs/ +cp -r target/apidocs/ doc/ + +# Upload project homepage to the server. +rsync -avz --delete -e 'ssh -p 10006' doc/ n0@www3.svjatoslav.eu:/mnt/big/projects/alyverkko-cli/ + +echo "" +echo "Press ENTER to close this window." +read diff --git a/tools/implement idea b/tools/implement idea deleted file mode 100755 index 6472735..0000000 --- a/tools/implement idea +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -cd "${0%/*}"; if [ "$1" != "T" ]; then gnome-terminal -e "'$0' T"; exit; fi; -cd .. - -read -p "Enter the topic name: " TOPIC_NAME - -alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "*.org" -alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "*.java" -alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "implement*" -alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "install" -alyverkko-cli joinfiles -t "$TOPIC_NAME" --src-dir . --pattern "uninstall" -alyverkko-cli joinfiles -t "$TOPIC_NAME" --edit diff --git a/tools/open with IntelliJ IDEA b/tools/open with IntelliJ IDEA deleted file mode 100755 index 304bf94..0000000 --- a/tools/open with IntelliJ IDEA +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -# This script launches IntelliJ IDEA with the current project -# directory. The script is designed to be run by double-clicking it in -# the GNOME Nautilus file manager. - -# First, we change the current working directory to the directory of -# the script. - -# "${0%/*}" gives us the path of the script itself, without the -# script's filename. - -# This command basically tells the system "change the current -# directory to the directory containing this script". - -cd "${0%/*}" - -# Then, we move up one directory level. -# The ".." tells the system to go to the parent directory of the current directory. -# This is done because we assume that the project directory is one level up from the script. -cd .. - -# Now, we use the 'setsid' command to start a new session and run -# IntelliJ IDEA in the background. 'setsid' is a UNIX command that -# runs a program in a new session. - -# The command 'idea .' opens IntelliJ IDEA with the current directory -# as the project directory. The '&' at the end is a UNIX command that -# runs the process in the background. The '> /dev/null' part tells -# the system to redirect all output (both stdout and stderr, denoted -# by '&') that would normally go to the terminal to go to /dev/null -# instead, which is a special file that discards all data written to -# it. - -setsid idea . &>/dev/null & - -# The 'disown' command is a shell built-in that removes a shell job -# from the shell's active list. Therefore, the shell will not send a -# SIGHUP to this particular job when the shell session is terminated. - -# '-h' option specifies that if the shell receives a SIGHUP, it also -# doesn't send a SIGHUP to the job. - -# '$!' is a shell special parameter that expands to the process ID of -# the most recent background job. -disown -h $! - - -sleep 2 - -# Finally, we use the 'exit' command to terminate the shell script. -# This command tells the system to close the terminal window after -# IntelliJ IDEA has been opened. -exit diff --git a/tools/update web site b/tools/update web site deleted file mode 100755 index ec23ca9..0000000 --- a/tools/update web site +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -cd "${0%/*}"; if [ "$1" != "T" ]; then gnome-terminal -e "'$0' T"; exit; fi; - -cd .. - -# Build the project jar file and the apidocs. -export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64/ -mvn clean package - -# Export org to html using emacs in batch mode -( - cd doc/ - - rm -f index.html - emacs --batch -l ~/.emacs --visit=index.org --funcall=org-html-export-to-html --kill - - #rm setup.html - #emacs --batch -l ~/.emacs --visit=setup.org --funcall=org-html-export-to-html --kill -) - -# Generate class diagrams. See: https://www3.svjatoslav.eu/projects/javainspect/ -rm -rf doc/graphs/ -mkdir -p doc/graphs/ -javainspect -j target/alyverkko-cli-*-SNAPSHOT.jar -d doc/graphs/ -n "all classes" -t png -ho -meviz index -w doc/graphs/ -t "Älyverkko CLI program classes" - -# Copy the apidocs to the doc folder so that they can be uploaded to the server. -rm -rf doc/apidocs/ -cp -r target/apidocs/ doc/ - -# Upload project homepage to the server. -rsync -avz --delete -e 'ssh -p 10006' doc/ n0@www3.svjatoslav.eu:/mnt/big/projects/alyverkko-cli/ - -echo "" -echo "Press ENTER to close this window." -read