1608 lines
49 KiB
Markdown
1608 lines
49 KiB
Markdown
<file_map>
|
||
/Users/despiegk/code/github/freeflowuniverse/herolib
|
||
├── .gitignore
|
||
├── .vdocignore
|
||
├── compile.sh
|
||
├── CONTRIBUTING.md
|
||
├── doc.vsh
|
||
├── generate.vsh
|
||
├── herolib.code-workspace
|
||
├── install_hero.sh
|
||
├── install_herolib.vsh
|
||
├── install_v.sh
|
||
├── LICENSE
|
||
├── README.md
|
||
├── release_OLD.sh
|
||
├── release.vsh
|
||
├── specs.md
|
||
├── test_basic.vsh
|
||
└── test_runner.vsh
|
||
├── .github
|
||
│ └── workflows
|
||
│ ├── documentation.yml
|
||
│ ├── hero_build.yml
|
||
│ └── test.yml
|
||
├── aiprompts
|
||
│ └── herolib_start_here.md
|
||
│ ├── .openhands
|
||
│ │ └── setup.sh
|
||
│ ├── ai_instruct
|
||
│ │ ├── documentation_from_v_md.md
|
||
│ │ ├── documentation_from_v.md
|
||
│ │ ├── prompt_processing_instructions.md
|
||
│ │ ├── prompt_processing_openrpc_like.md
|
||
│ │ └── what_is_a_hero_twin.md
|
||
│ │ ├── models_from_v
|
||
│ ├── bizmodel
|
||
│ │ ├── bizmodel_cost.md
|
||
│ │ ├── bizmodel_funding.md
|
||
│ │ ├── bizmodel_generation_prompt.md
|
||
│ │ ├── bizmodel_hr.md
|
||
│ │ ├── bizmodel_revenue.md
|
||
│ │ └── costs.heroscript
|
||
│ ├── documentor
|
||
│ │ └── generate_v_doc_readable_md_files.md
|
||
│ ├── docusaurus
|
||
│ │ └── docusaurus_ebook_manual.md
|
||
│ ├── herolib_advanced
|
||
│ │ ├── advanced_paths.md
|
||
│ │ ├── builder.md
|
||
│ │ ├── cmdline_argument_parsing_example.vsh
|
||
│ │ ├── datatypes.md
|
||
│ │ ├── osal.md
|
||
│ │ ├── ourdb.md
|
||
│ │ ├── redis.md
|
||
│ │ ├── spreadsheet.md
|
||
│ │ └── ui console chalk.md
|
||
│ ├── herolib_core
|
||
│ │ ├── core_curdir_example.md
|
||
│ │ ├── core_globals.md
|
||
│ │ ├── core_heroscript_basics.md
|
||
│ │ ├── core_heroscript_playbook.md
|
||
│ │ ├── core_http_client.md
|
||
│ │ ├── core_osal.md
|
||
│ │ ├── core_ourtime.md
|
||
│ │ ├── core_params.md
|
||
│ │ ├── core_paths.md
|
||
│ │ ├── core_text.md
|
||
│ │ ├── core_ui_console.md
|
||
│ │ └── core_vshell.md
|
||
│ ├── v_advanced
|
||
│ │ ├── advanced_topics.md
|
||
│ │ ├── compress.md
|
||
│ │ ├── generics.md
|
||
│ │ ├── html_parser.md
|
||
│ │ ├── io.md
|
||
│ │ ├── net.md
|
||
│ │ ├── reflection.md
|
||
│ │ ├── regex.md
|
||
│ │ ├── smtp.md
|
||
│ │ └── time instructions.md
|
||
│ ├── v_core
|
||
│ │ └── v_manual.md
|
||
│ ├── v_veb_webserver
|
||
│ │ ├── veb_assets.md
|
||
│ │ ├── veb_auth.md
|
||
│ │ ├── veb_csrf.md
|
||
│ │ ├── veb_sse.md
|
||
│ │ ├── veb.md
|
||
│ │ └── vtemplates.md
|
||
├── cli
|
||
│ ├── .gitignore
|
||
│ ├── compile
|
||
│ ├── compile_upload.vsh
|
||
│ ├── compile_vdo.vsh
|
||
│ ├── compile.vsh
|
||
│ ├── hero.v
|
||
│ └── vdo.v
|
||
├── docker
|
||
│ └── docker_ubuntu_install.sh
|
||
│ ├── herolib
|
||
│ │ ├── .gitignore
|
||
│ │ ├── build.sh
|
||
│ │ ├── debug.sh
|
||
│ │ ├── docker-compose.yml
|
||
│ │ ├── Dockerfile
|
||
│ │ ├── export.sh
|
||
│ │ ├── README.md
|
||
│ │ ├── shell.sh
|
||
│ │ ├── ssh_init.sh
|
||
│ │ ├── ssh.sh
|
||
│ │ └── start.sh
|
||
│ │ ├── scripts
|
||
│ ├── postgresql
|
||
│ │ ├── docker-compose.yml
|
||
│ │ ├── readme.md
|
||
│ │ └── start.sh
|
||
├── examples
|
||
│ ├── README.md
|
||
│ └── sync_do.sh
|
||
│ ├── aiexamples
|
||
│ │ ├── groq.vsh
|
||
│ │ ├── jetconvertor.vsh
|
||
│ │ ├── jina.vsh
|
||
│ │ └── qdrant.vsh
|
||
│ ├── baobab
|
||
│ │ ├── generator
|
||
│ │ └── specification
|
||
│ ├── biztools
|
||
│ │ ├── bizmodel_complete.vsh
|
||
│ │ ├── bizmodel_export.vsh
|
||
│ │ ├── bizmodel_full.vsh
|
||
│ │ ├── bizmodel.vsh
|
||
│ │ ├── bizmodel1.vsh
|
||
│ │ ├── bizmodel2.vsh
|
||
│ │ ├── costs.vsh
|
||
│ │ ├── funding.vsh
|
||
│ │ ├── hr.vsh
|
||
│ │ └── notworking.md
|
||
│ │ ├── _archive
|
||
│ │ ├── bizmodel_docusaurus
|
||
│ │ ├── examples
|
||
│ ├── builder
|
||
│ │ ├── simple_ip4.vsh
|
||
│ │ ├── simple_ip6.vsh
|
||
│ │ └── simple.vsh
|
||
│ │ ├── remote_executor
|
||
│ ├── clients
|
||
│ │ ├── aiclient_example.vsh
|
||
│ │ ├── jina_example.vsh
|
||
│ │ ├── mail.vsh
|
||
│ │ ├── mycelium_rpc.vsh
|
||
│ │ ├── mycelium.vsh
|
||
│ │ ├── psql.vsh
|
||
│ │ └── zinit_rpc_example.vsh
|
||
│ ├── core
|
||
│ │ ├── agent_encoding.vsh
|
||
│ │ ├── generate.vsh
|
||
│ │ └── secrets_example.vsh
|
||
│ │ ├── base
|
||
│ │ ├── db
|
||
│ │ ├── dbfs
|
||
│ │ ├── openapi
|
||
│ │ ├── openrpc
|
||
│ │ ├── pathlib
|
||
│ ├── data
|
||
│ │ ├── .gitignore
|
||
│ │ ├── cache.vsh
|
||
│ │ ├── compress_gzip_example.vsh
|
||
│ │ ├── deduped_mycelium_master.vsh
|
||
│ │ ├── deduped_mycelium_worker.vsh
|
||
│ │ ├── encoder.vsh
|
||
│ │ ├── encrypt_decrypt.vsh
|
||
│ │ ├── graphdb.vsh
|
||
│ │ ├── heroencoder_example.vsh
|
||
│ │ ├── heroencoder_simple.vsh
|
||
│ │ ├── jsonexample.vsh
|
||
│ │ ├── ourdb_client.vsh
|
||
│ │ ├── ourdb_example.vsh
|
||
│ │ ├── ourdb_server.vsh
|
||
│ │ ├── radixtree.vsh
|
||
│ │ └── regex_example.vsh
|
||
│ │ ├── location
|
||
│ │ ├── ourdb_syncer
|
||
│ │ ├── params
|
||
│ │ ├── resp
|
||
│ ├── develop
|
||
│ │ ├── gittools
|
||
│ │ ├── ipapi
|
||
│ │ ├── juggler
|
||
│ │ ├── luadns
|
||
│ │ ├── openai
|
||
│ │ ├── runpod
|
||
│ │ ├── vastai
|
||
│ │ └── wireguard
|
||
│ ├── hero
|
||
│ │ └── alpine_example.vsh
|
||
│ │ ├── db
|
||
│ │ ├── generation
|
||
│ │ ├── openapi
|
||
│ ├── installers
|
||
│ │ ├── .gitignore
|
||
│ │ ├── cometbft.vsh
|
||
│ │ ├── conduit.vsh
|
||
│ │ ├── coredns.vsh
|
||
│ │ ├── hero_install.vsh
|
||
│ │ ├── installers.vsh
|
||
│ │ ├── traefik.vsh
|
||
│ │ └── youki.vsh
|
||
│ │ ├── db
|
||
│ │ ├── infra
|
||
│ │ ├── lang
|
||
│ │ ├── net
|
||
│ │ ├── sysadmintools
|
||
│ │ ├── threefold
|
||
│ │ ├── virt
|
||
│ ├── jobs
|
||
│ │ └── vfs_jobs_example.vsh
|
||
│ ├── lang
|
||
│ │ └── python
|
||
│ ├── mcp
|
||
│ │ ├── http_demo
|
||
│ │ ├── http_server
|
||
│ │ ├── inspector
|
||
│ │ └── simple_http
|
||
│ ├── osal
|
||
│ │ ├── .gitignore
|
||
│ │ ├── notifier.vsh
|
||
│ │ ├── startup_manager.vsh
|
||
│ │ ├── systemd.vsh
|
||
│ │ ├── tun.vsh
|
||
│ │ ├── ufw_play.vsh
|
||
│ │ └── ufw.vsh
|
||
│ │ ├── coredns
|
||
│ │ ├── download
|
||
│ │ ├── ping
|
||
│ │ ├── process
|
||
│ │ ├── rsync
|
||
│ │ ├── sandbox
|
||
│ │ ├── sshagent
|
||
│ │ ├── zinit
|
||
│ ├── schemas
|
||
│ │ ├── openapi
|
||
│ │ └── openrpc
|
||
│ ├── threefold
|
||
│ │ └── .gitignore
|
||
│ │ ├── grid
|
||
│ │ ├── gridproxy
|
||
│ │ ├── holochain
|
||
│ │ ├── solana
|
||
│ │ ├── tfgrid3deployer
|
||
│ ├── tools
|
||
│ │ ├── imagemagick
|
||
│ │ ├── tmux
|
||
│ │ └── vault
|
||
│ ├── ui
|
||
│ │ ├── flow1.v
|
||
│ │ └── silence.vsh
|
||
│ │ ├── console
|
||
│ │ ├── telegram
|
||
│ ├── vfs
|
||
│ │ └── vfs_db
|
||
│ ├── virt
|
||
│ │ ├── daguserver
|
||
│ │ ├── docker
|
||
│ │ ├── hetzner
|
||
│ │ ├── lima
|
||
│ │ ├── podman_buildah
|
||
│ │ ├── runc
|
||
│ │ └── windows
|
||
│ ├── web
|
||
│ │ ├── .gitignore
|
||
│ │ ├── docusaurus_example.vsh
|
||
│ │ ├── starllight_example.vsh
|
||
│ │ └── ui_demo.vsh
|
||
│ │ ├── doctree
|
||
│ │ ├── markdown_renderer
|
||
│ ├── webdav
|
||
│ │ ├── .gitignore
|
||
│ │ └── webdav_vfs.vsh
|
||
├── lib
|
||
│ ├── readme.md
|
||
│ └── v.mod
|
||
│ ├── ai
|
||
│ │ ├── escalayer
|
||
│ │ ├── mcp
|
||
│ │ └── utils
|
||
│ ├── baobab
|
||
│ │ └── README.md
|
||
│ │ ├── actor
|
||
│ │ ├── generator
|
||
│ │ ├── osis
|
||
│ │ ├── specification
|
||
│ │ ├── stage
|
||
│ ├── biz
|
||
│ │ ├── bizmodel
|
||
│ │ ├── investortool
|
||
│ │ ├── planner
|
||
│ │ └── spreadsheet
|
||
│ ├── builder
|
||
│ │ ├── bootstrapper.v
|
||
│ │ ├── builder_factory.v
|
||
│ │ ├── done.v
|
||
│ │ ├── executor_local_test.v
|
||
│ │ ├── executor_local.v
|
||
│ │ ├── executor_ssh_test.v
|
||
│ │ ├── executor_ssh.v
|
||
│ │ ├── executor.v
|
||
│ │ ├── model_package.v
|
||
│ │ ├── node_commands.v
|
||
│ │ ├── node_executor.v
|
||
│ │ ├── node_factory.v
|
||
│ │ ├── node.v
|
||
│ │ ├── nodedb_test.v
|
||
│ │ ├── portforward_lib.v
|
||
│ │ ├── readme.md
|
||
│ │ └── this_remote.v
|
||
│ ├── clients
|
||
│ │ ├── ipapi
|
||
│ │ ├── jina
|
||
│ │ ├── livekit
|
||
│ │ ├── mailclient
|
||
│ │ ├── meilisearch
|
||
│ │ ├── mycelium
|
||
│ │ ├── mycelium_rpc
|
||
│ │ ├── openai
|
||
│ │ ├── postgresql_client
|
||
│ │ ├── qdrant
|
||
│ │ ├── rclone
|
||
│ │ ├── runpod
|
||
│ │ ├── sendgrid
|
||
│ │ ├── vastai
|
||
│ │ ├── wireguard
|
||
│ │ ├── zerodb_client
|
||
│ │ ├── zinit
|
||
│ │ └── zinit_rpc
|
||
│ ├── code
|
||
│ │ └── generator
|
||
│ ├── conversiontools
|
||
│ │ └── tools.v
|
||
│ │ ├── docsorter
|
||
│ │ ├── imagemagick
|
||
│ │ ├── pdftotext
|
||
│ │ ├── text_extractor
|
||
│ ├── core
|
||
│ │ ├── interactive.v
|
||
│ │ ├── memdb_test.v
|
||
│ │ ├── memdb.v
|
||
│ │ ├── platform_test.v
|
||
│ │ ├── platform.v
|
||
│ │ ├── readme.md
|
||
│ │ ├── sudo_test.v
|
||
│ │ └── sudo.v
|
||
│ │ ├── base
|
||
│ │ ├── code
|
||
│ │ ├── generator
|
||
│ │ ├── herocmds
|
||
│ │ ├── httpconnection
|
||
│ │ ├── logger
|
||
│ │ ├── openrpc_remove
|
||
│ │ ├── pathlib
|
||
│ │ ├── playbook
|
||
│ │ ├── playcmds
|
||
│ │ ├── playmacros
|
||
│ │ ├── redisclient
|
||
│ │ ├── rootpath
|
||
│ │ ├── smartid
|
||
│ │ ├── texttools
|
||
│ │ ├── vexecutor
|
||
│ ├── crypt
|
||
│ │ └── crypt.v
|
||
│ │ ├── aes_symmetric
|
||
│ │ ├── crpgp
|
||
│ │ ├── ed25519
|
||
│ │ ├── keychain
|
||
│ │ ├── keysafe
|
||
│ │ ├── openssl
|
||
│ │ ├── pgp
|
||
│ │ ├── secp256k1
|
||
│ │ ├── secrets
|
||
│ ├── data
|
||
│ │ ├── cache
|
||
│ │ ├── currency
|
||
│ │ ├── dbfs
|
||
│ │ ├── dedupestor
|
||
│ │ ├── doctree
|
||
│ │ ├── encoder
|
||
│ │ ├── encoderhero
|
||
│ │ ├── flist
|
||
│ │ ├── gid
|
||
│ │ ├── graphdb
|
||
│ │ ├── ipaddress
|
||
│ │ ├── location
|
||
│ │ ├── markdown
|
||
│ │ ├── markdownparser2
|
||
│ │ ├── markdownrenderer
|
||
│ │ ├── mnemonic
|
||
│ │ ├── models
|
||
│ │ ├── ourdb
|
||
│ │ ├── ourdb_syncer
|
||
│ │ ├── ourjson
|
||
│ │ ├── ourtime
|
||
│ │ ├── paramsparser
|
||
│ │ ├── radixtree
|
||
│ │ ├── resp
|
||
│ │ ├── serializers
|
||
│ │ ├── tst
|
||
│ │ ├── verasure
|
||
│ │ └── vstor
|
||
│ ├── dav
|
||
│ │ └── webdav
|
||
│ ├── develop
|
||
│ │ ├── gittools
|
||
│ │ ├── luadns
|
||
│ │ ├── performance
|
||
│ │ ├── sourcetree
|
||
│ │ ├── vscode
|
||
│ │ └── vscode_extensions
|
||
│ ├── hero
|
||
│ │ └── models
|
||
│ │ ├── db
|
||
│ ├── installers
|
||
│ │ ├── install_multi.v
|
||
│ │ └── upload.v
|
||
│ │ ├── base
|
||
│ │ ├── db
|
||
│ │ ├── develapps
|
||
│ │ ├── infra
|
||
│ │ ├── lang
|
||
│ │ ├── net
|
||
│ │ ├── sysadmintools
|
||
│ │ ├── threefold
|
||
│ │ ├── ulist
|
||
│ │ ├── virt
|
||
│ │ ├── web
|
||
│ ├── lang
|
||
│ │ ├── python
|
||
│ │ └── rust
|
||
│ ├── mcp
|
||
│ │ ├── backend_interface.v
|
||
│ │ ├── backend_memory.v
|
||
│ │ ├── factory.v
|
||
│ │ ├── generics.v
|
||
│ │ ├── handler_initialize_test.v
|
||
│ │ ├── handler_initialize.v
|
||
│ │ ├── handler_prompts.v
|
||
│ │ ├── handler_resources.v
|
||
│ │ ├── handler_tools.v
|
||
│ │ ├── model_configuration_test.v
|
||
│ │ ├── model_configuration.v
|
||
│ │ ├── model_error.v
|
||
│ │ ├── README.md
|
||
│ │ └── server.v
|
||
│ │ ├── baobab
|
||
│ │ ├── cmd
|
||
│ │ ├── mcpgen
|
||
│ │ ├── pugconvert
|
||
│ │ ├── rhai
|
||
│ │ ├── transport
|
||
│ │ ├── vcode
|
||
│ ├── osal
|
||
│ │ ├── core
|
||
│ │ ├── coredns
|
||
│ │ ├── hostsfile
|
||
│ │ ├── notifier
|
||
│ │ ├── osinstaller
|
||
│ │ ├── rsync
|
||
│ │ ├── screen
|
||
│ │ ├── sshagent
|
||
│ │ ├── startupmanager
|
||
│ │ ├── systemd
|
||
│ │ ├── tmux
|
||
│ │ ├── traefik
|
||
│ │ ├── tun
|
||
│ │ ├── ufw
|
||
│ │ └── zinit
|
||
│ ├── schemas
|
||
│ │ ├── jsonrpc
|
||
│ │ ├── jsonschema
|
||
│ │ ├── openapi
|
||
│ │ └── openrpc
|
||
│ ├── security
|
||
│ │ ├── authentication
|
||
│ │ └── jwt
|
||
│ ├── threefold
|
||
│ │ ├── grid3
|
||
│ │ └── grid4
|
||
│ ├── ui
|
||
│ │ ├── factory.v
|
||
│ │ └── readme.md
|
||
│ │ ├── console
|
||
│ │ ├── generic
|
||
│ │ ├── logger
|
||
│ │ ├── telegram
|
||
│ │ ├── template
|
||
│ │ ├── uimodel
|
||
│ ├── vfs
|
||
│ │ ├── interface.v
|
||
│ │ ├── metadata.v
|
||
│ │ └── README.md
|
||
│ │ ├── vfs_calendar
|
||
│ │ ├── vfs_contacts
|
||
│ │ ├── vfs_db
|
||
│ │ ├── vfs_local
|
||
│ │ ├── vfs_mail
|
||
│ │ ├── vfs_nested
|
||
│ ├── virt
|
||
│ │ ├── cloudhypervisor
|
||
│ │ ├── docker
|
||
│ │ ├── herocontainers
|
||
│ │ ├── hetzner
|
||
│ │ ├── lima
|
||
│ │ ├── qemu
|
||
│ │ ├── runc
|
||
│ │ └── utils
|
||
│ ├── web
|
||
│ │ ├── doctreeclient
|
||
│ │ ├── docusaurus
|
||
│ │ ├── echarts
|
||
│ │ ├── site
|
||
│ │ └── ui
|
||
├── libarchive
|
||
│ ├── installers
|
||
│ │ └── web
|
||
│ ├── rhai
|
||
│ │ ├── generate_rhai_example.v
|
||
│ │ ├── generate_wrapper_module.v
|
||
│ │ ├── register_functions.v
|
||
│ │ ├── register_types_test.v
|
||
│ │ ├── register_types.v
|
||
│ │ ├── rhai_test.v
|
||
│ │ ├── rhai.v
|
||
│ │ └── verify.v
|
||
│ │ ├── prompts
|
||
│ │ ├── templates
|
||
│ │ ├── testdata
|
||
│ └── starlight
|
||
│ ├── clean.v
|
||
│ ├── config.v
|
||
│ ├── factory.v
|
||
│ ├── model.v
|
||
│ ├── site_get.v
|
||
│ ├── site.v
|
||
│ ├── template.v
|
||
│ └── watcher.v
|
||
│ ├── templates
|
||
├── manual
|
||
│ ├── config.json
|
||
│ ├── create_tag.md
|
||
│ └── serve_wiki.sh
|
||
│ ├── best_practices
|
||
│ │ └── using_args_in_function.md
|
||
│ │ ├── osal
|
||
│ │ ├── scripts
|
||
│ ├── core
|
||
│ │ ├── base.md
|
||
│ │ ├── context_session_job.md
|
||
│ │ ├── context.md
|
||
│ │ ├── play.md
|
||
│ │ └── session.md
|
||
│ │ ├── concepts
|
||
│ ├── documentation
|
||
│ │ └── docextractor.md
|
||
├── research
|
||
│ └── globals
|
||
│ ├── globals_example_inplace.vsh
|
||
│ ├── globals_example_reference.vsh
|
||
│ ├── globals_example.vsh
|
||
│ └── ubuntu_partition.sh
|
||
├── vscodeplugin
|
||
│ ├── install_ubuntu.sh
|
||
│ ├── package.sh
|
||
│ └── readme.md
|
||
│ ├── heroscrypt-syntax
|
||
│ │ ├── heroscript-syntax-0.0.1.vsix
|
||
│ │ ├── language-configuration.json
|
||
│ │ └── package.json
|
||
│ │ ├── syntaxes
|
||
</file_map>
|
||
|
||
<file_contents>
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/bizmodel.v
|
||
```v
|
||
module playcmds
|
||
|
||
// import freeflowuniverse.herolib.core.playbook
|
||
|
||
// fn git(mut actions playbook.Actions, action playbook.Action) ! {
|
||
// if action.name == 'init' {
|
||
// // means we support initialization afterwards
|
||
// c.bizmodel_init(mut actions, action)!
|
||
// }
|
||
|
||
// // if action.name == 'get' {
|
||
// // mut gs := gittools.get()!
|
||
// // url := action.params.get('url')!
|
||
// // branch := action.params.get_default('branch', '')!
|
||
// // reset := action.params.get_default_false('reset')!
|
||
// // pull := action.params.get_default_false('pull')!
|
||
// // mut gr := gs.repo_get_from_url(url: url, branch: branch, pull: pull, reset: reset)!
|
||
// // }
|
||
// }
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/currency.v
|
||
```v
|
||
module playcmds
|
||
|
||
// fn currency_actions(actions_ []playbook.Action) ! {
|
||
// mut actions2 := actions.filtersort(actions: actions_, actor: 'currency', book: '*')!
|
||
// if actions2.len == 0 {
|
||
// return
|
||
// }
|
||
|
||
// mut cs := currency.new()!
|
||
|
||
// for action in actions2 {
|
||
// // TODO: set the currencies
|
||
// if action.name == 'default_set' {
|
||
// cur := action.params.get('cur')!
|
||
// usdval := action.params.get_int('usdval')!
|
||
// cs.default_set(cur, usdval)!
|
||
// }
|
||
// }
|
||
|
||
// // TODO: add the currency metainfo, do a test
|
||
// }
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/dagu.v
|
||
```v
|
||
module playcmds
|
||
|
||
// import freeflowuniverse.herolib.installers.sysadmintools.daguserver
|
||
|
||
// pub fn scheduler(heroscript string) ! {
|
||
// daguserver.play(
|
||
// heroscript: heroscript
|
||
// )!
|
||
// }
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/downloader.v
|
||
```v
|
||
module playcmds
|
||
|
||
// import freeflowuniverse.herolib.core.playbook
|
||
// import freeflowuniverse.herolib.sysadmin.downloader
|
||
|
||
// can start with sal, dal, ... the 2nd name is typicall the actor (or topic)
|
||
// do this function public and then it breaches out to detail functionality
|
||
|
||
// pub fn sal_downloader(action playbook.Action) ! {
|
||
// match action.actor {
|
||
// 'downloader' {
|
||
// match action.name {
|
||
// 'get' {
|
||
// downloader_get(action: action)!
|
||
// }
|
||
// else {
|
||
// return error('actions not supported yet')
|
||
// }
|
||
// }
|
||
// }
|
||
// else {
|
||
// return error('actor not supported yet')
|
||
// }
|
||
// }
|
||
// }
|
||
|
||
// fn downloader_get(args ActionExecArgs) ! {
|
||
// action := args.action
|
||
// // session:=args.action or {panic("no context")} //if we need it here
|
||
// mut name := action.params.get_default('name', '')!
|
||
// mut downloadpath := action.params.get_default('downloadpath', '')!
|
||
// mut url := action.params.get_default('url', '')!
|
||
// mut reset := action.params.get_default_false('reset')
|
||
// mut gitpull := action.params.get_default_false('gitpull')
|
||
|
||
// mut minsize_kb := action.params.get_u32_default('minsize_kb', 0)!
|
||
// mut maxsize_kb := action.params.get_u32_default('maxsize_kb', 0)!
|
||
|
||
// mut destlink := action.params.get_default_false('destlink')
|
||
|
||
// mut dest := action.params.get_default('dest', '')!
|
||
// mut hash := action.params.get_default('hash', '')!
|
||
// mut metapath := action.params.get_default('metapath', '')!
|
||
|
||
// mut meta := downloader.download(
|
||
// name: name
|
||
// downloadpath: downloadpath
|
||
// url: url
|
||
// reset: reset
|
||
// gitpull: gitpull
|
||
// minsize_kb: minsize_kb
|
||
// maxsize_kb: maxsize_kb
|
||
// destlink: destlink
|
||
// dest: dest
|
||
// hash: hash
|
||
// metapath: metapath
|
||
// // session:session // TODO IMPLEMENT (also optional)
|
||
// )!
|
||
// }
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/play_caddy.v
|
||
```v
|
||
module playcmds
|
||
|
||
// import freeflowuniverse.herolib.installers.web.caddy as caddy_installer
|
||
// import freeflowuniverse.herolib.servers.caddy { CaddyFile }
|
||
// import freeflowuniverse.herolib.core.playbook
|
||
// import os
|
||
// // import net.urllib
|
||
|
||
// pub fn play_caddy(mut plbook playbook.PlayBook) ! {
|
||
// play_caddy_basic(mut plbook)!
|
||
// play_caddy_configure(mut plbook)!
|
||
// }
|
||
|
||
// pub fn play_caddy_configure(mut plbook playbook.PlayBook) ! {
|
||
// mut caddy_actions := plbook.find(filter: 'caddy_configure')!
|
||
// if caddy_actions.len == 0 {
|
||
// return
|
||
// }
|
||
// }
|
||
|
||
// pub fn play_caddy_basic(mut plbook playbook.PlayBook) ! {
|
||
// caddy_actions := plbook.find(filter: 'caddy.')!
|
||
// if caddy_actions.len == 0 {
|
||
// return
|
||
// }
|
||
|
||
// mut install_actions := plbook.find(filter: 'caddy.install')!
|
||
|
||
// if install_actions.len > 0 {
|
||
// for install_action in install_actions {
|
||
// mut p := install_action.params
|
||
// xcaddy := p.get_default_false('xcaddy')
|
||
// file_path := p.get_default('file_path', '/etc/caddy')!
|
||
// file_url := p.get_default('file_url', '')!
|
||
// reset := p.get_default_false('reset')
|
||
// start := p.get_default_false('start')
|
||
// restart := p.get_default_false('restart')
|
||
// stop := p.get_default_false('stop')
|
||
// homedir := p.get_default('file_url', '')!
|
||
// plugins := p.get_list_default('plugins', []string{})!
|
||
|
||
// caddy_installer.install(
|
||
// xcaddy: xcaddy
|
||
// file_path: file_path
|
||
// file_url: file_url
|
||
// reset: reset
|
||
// start: start
|
||
// restart: restart
|
||
// stop: stop
|
||
// homedir: homedir
|
||
// plugins: plugins
|
||
// )!
|
||
// }
|
||
// }
|
||
|
||
// mut config_actions := plbook.find(filter: 'caddy.configure')!
|
||
// if config_actions.len > 0 {
|
||
// mut coderoot := ''
|
||
// mut reset := false
|
||
// mut pull := false
|
||
|
||
// mut public_ip := ''
|
||
|
||
// mut c := caddy.get('')!
|
||
// // that to me seems to be wrong, not generic enough
|
||
// if config_actions.len > 1 {
|
||
// return error('can only have 1 config action for books')
|
||
// } else if config_actions.len == 1 {
|
||
// mut p := config_actions[0].params
|
||
// path := p.get_default('path', '/etc/caddy')!
|
||
// url := p.get_default('url', '')!
|
||
// public_ip = p.get_default('public_ip', '')!
|
||
// c = caddy.configure('', homedir: path)!
|
||
// config_actions[0].done = true
|
||
// }
|
||
|
||
// mut caddyfile := CaddyFile{}
|
||
// for mut action in plbook.find(filter: 'caddy.add_reverse_proxy')! {
|
||
// mut p := action.params
|
||
// mut from := p.get_default('from', '')!
|
||
// mut to := p.get_default('to', '')!
|
||
|
||
// if from == '' || to == '' {
|
||
// return error('from & to cannot be empty')
|
||
// }
|
||
|
||
// caddyfile.add_reverse_proxy(
|
||
// from: from
|
||
// to: to
|
||
// )!
|
||
// action.done = true
|
||
// }
|
||
|
||
// for mut action in plbook.find(filter: 'caddy.add_file_server')! {
|
||
// mut p := action.params
|
||
// mut domain := p.get_default('domain', '')!
|
||
// mut root := p.get_default('root', '')!
|
||
|
||
// if root.starts_with('~') {
|
||
// root = '${os.home_dir()}${root.trim_string_left('~')}'
|
||
// }
|
||
|
||
// if domain == '' || root == '' {
|
||
// return error('domain & root cannot be empty')
|
||
// }
|
||
|
||
// caddyfile.add_file_server(
|
||
// domain: domain
|
||
// root: root
|
||
// )!
|
||
// action.done = true
|
||
// }
|
||
|
||
// for mut action in plbook.find(filter: 'caddy.add_basic_auth')! {
|
||
// mut p := action.params
|
||
// mut domain := p.get_default('domain', '')!
|
||
// mut username := p.get_default('username', '')!
|
||
// mut password := p.get_default('password', '')!
|
||
|
||
// if domain == '' || username == '' || password == '' {
|
||
// return error('domain & root cannot be empty')
|
||
// }
|
||
|
||
// caddyfile.add_basic_auth(
|
||
// domain: domain
|
||
// username: username
|
||
// password: password
|
||
// )!
|
||
// action.done = true
|
||
// }
|
||
|
||
// for mut action in plbook.find(filter: 'caddy.generate')! {
|
||
// c.set_caddyfile(caddyfile)!
|
||
// action.done = true
|
||
// }
|
||
|
||
// for mut action in plbook.find(filter: 'caddy.start')! {
|
||
// c.start()!
|
||
// action.done = true
|
||
// }
|
||
// c.reload()!
|
||
// }
|
||
// }
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/play_dagu_test.v
|
||
```v
|
||
module playcmds
|
||
|
||
import freeflowuniverse.herolib.core.playbook
|
||
|
||
const dagu_script = "
|
||
!!dagu.configure
|
||
instance: 'test'
|
||
username: 'admin'
|
||
password: 'testpassword'
|
||
|
||
!!dagu.new_dag
|
||
name: 'test_dag'
|
||
|
||
!!dagu.add_step
|
||
dag: 'test_dag'
|
||
name: 'hello_world'
|
||
command: 'echo hello world'
|
||
|
||
!!dagu.add_step
|
||
dag: 'test_dag'
|
||
name: 'last_step'
|
||
command: 'echo last step'
|
||
|
||
|
||
"
|
||
|
||
fn test_play_dagu() ! {
|
||
mut plbook := playbook.new(text: dagu_script)!
|
||
play_dagu(mut plbook)!
|
||
// panic('s')
|
||
}
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/play_dagu.v
|
||
```v
|
||
module playcmds
|
||
|
||
// import freeflowuniverse.herolib.clients.daguclient
|
||
// import freeflowuniverse.herolib.installers.sysadmintools.daguserver
|
||
// import freeflowuniverse.herolib.installers.sysadmintools.daguserver
|
||
import freeflowuniverse.herolib.core.playbook
|
||
import freeflowuniverse.herolib.ui.console
|
||
import os
|
||
|
||
// pub fn play_dagu(mut plbook playbook.PlayBook) ! {
|
||
// // dagu_actions := plbook.find(filter: 'dagu.')!
|
||
// // if dagu_actions.len == 0 {
|
||
// // return
|
||
// // }
|
||
|
||
// // play_dagu_basic(mut plbook)!
|
||
// // play_dagu_configure(mut plbook)!
|
||
// }
|
||
|
||
// // play_dagu plays the dagu play commands
|
||
// pub fn play_dagu_basic(mut plbook playbook.PlayBook) ! {
|
||
// // mut install_actions := plbook.find(filter: 'daguserver.configure')!
|
||
|
||
// // if install_actions.len > 0 {
|
||
// // for install_action in install_actions {
|
||
// // mut p := install_action.params
|
||
// // panic("daguinstall play")
|
||
// // }
|
||
// // }
|
||
|
||
// // dagu_actions := plbook.find(filter: 'daguserver.install')!
|
||
// // if dagu_actions.len > 0 {
|
||
// // panic("daguinstall play")
|
||
// // return
|
||
// // }
|
||
|
||
// // mut config_actions := plbook.find(filter: 'dagu.configure')!
|
||
// // mut d := if config_actions.len > 1 {
|
||
// // return error('can only have 1 config action for dagu')
|
||
// // } else if config_actions.len == 1 {
|
||
// // mut p := config_actions[0].params
|
||
// // instance := p.get_default('instance', 'default')!
|
||
// // port := p.get_int_default('port', 8888)!
|
||
// // username := p.get_default('username', '')!
|
||
// // password := p.get_default('password', '')!
|
||
// // config_actions[0].done = true
|
||
// // mut server := daguserver.configure(instance,
|
||
// // port: port
|
||
// // username: username
|
||
// // password: password
|
||
// // )!
|
||
// // server.start()!
|
||
// // console.print_debug('Dagu server is running at http://localhost:${port}')
|
||
// // console.print_debug('Username: ${username} password: ${password}')
|
||
|
||
// // // configure dagu client with server url and api secret
|
||
// // server_cfg := server.config()!
|
||
// // daguclient.get(instance,
|
||
// // url: 'http://localhost:${port}'
|
||
// // apisecret: server_cfg.secret
|
||
// // )!
|
||
// // } else {
|
||
// // mut server := daguserver.get('')!
|
||
// // server.start()!
|
||
// // daguclient.get('')!
|
||
// // }
|
||
|
||
// // mut dags := map[string]DAG{}
|
||
|
||
// // for mut action in plbook.find(filter: 'dagu.new_dag')! {
|
||
// // mut p := action.params
|
||
// // name := p.get_default('name', '')!
|
||
// // dags[name] = DAG{}
|
||
// // action.done = true
|
||
// // }
|
||
|
||
// // for mut action in plbook.find(filter: 'dagu.add_step')! {
|
||
// // mut p := action.params
|
||
// // dag := p.get_default('dag', 'default')!
|
||
// // name := p.get_default('name', 'default')!
|
||
// // command := p.get_default('command', '')!
|
||
// // dags[dag].step_add(
|
||
// // nr: dags.len
|
||
// // name: name
|
||
// // command: command
|
||
// // )!
|
||
// // }
|
||
|
||
// // for mut action in plbook.find(filter: 'dagu.run')! {
|
||
// // mut p := action.params
|
||
// // dag := p.get_default('dag', 'default')!
|
||
// // // d.new_dag(dags[dag])!
|
||
// // panic('to implement')
|
||
// // }
|
||
// }
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/play_juggler.v
|
||
```v
|
||
module playcmds
|
||
|
||
import freeflowuniverse.herolib.data.doctree
|
||
import freeflowuniverse.herolib.ui.console
|
||
import freeflowuniverse.herolib.core.playbook
|
||
import freeflowuniverse.herolib.develop.juggler
|
||
import os
|
||
|
||
pub fn play_juggler(mut plbook playbook.PlayBook) ! {
|
||
mut coderoot := ''
|
||
// mut install := false
|
||
mut reset := false
|
||
mut pull := false
|
||
|
||
mut config_actions := plbook.find(filter: 'juggler.configure')!
|
||
|
||
mut j := juggler.Juggler{}
|
||
|
||
if config_actions.len > 1 {
|
||
return error('can only have 1 config action for juggler')
|
||
} else if config_actions.len == 1 {
|
||
mut p := config_actions[0].params
|
||
path := p.get_default('path', '/etc/juggler')!
|
||
url := p.get_default('url', '')!
|
||
username := p.get_default('username', '')!
|
||
password := p.get_default('password', '')!
|
||
port := p.get_int_default('port', 8000)!
|
||
|
||
j = juggler.configure(
|
||
url: 'https://git.threefold.info/projectmycelium/itenv'
|
||
username: username
|
||
password: password
|
||
reset: true
|
||
)!
|
||
config_actions[0].done = true
|
||
}
|
||
|
||
for mut action in plbook.find(filter: 'juggler.start')! {
|
||
j.start()!
|
||
action.done = true
|
||
}
|
||
|
||
for mut action in plbook.find(filter: 'juggler.restart')! {
|
||
j.restart()!
|
||
action.done = true
|
||
}
|
||
}
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/play_publisher_test.v
|
||
```v
|
||
module playcmds
|
||
|
||
import freeflowuniverse.herolib.core.playbook
|
||
import freeflowuniverse.herolib.core.playcmds
|
||
import freeflowuniverse.herolib.core.pathlib
|
||
import os
|
||
|
||
fn test_play_publisher() {
|
||
mut p := pathlib.get_file(path: '/tmp/heroscript/do.hero', create: true)!
|
||
|
||
s2 := "
|
||
|
||
!!publisher.new_collection
|
||
url:'https://git.threefold.info/tfgrid/info_tfgrid/src/branch/main/collections'
|
||
reset: false
|
||
pull: true
|
||
|
||
|
||
!!book.define
|
||
name:'info_tfgrid'
|
||
summary_url:'https://git.threefold.info/tfgrid/info_tfgrid/src/branch/development/books/tech/SUMMARY.md'
|
||
title:'ThreeFold Technology'
|
||
collections: 'about,dashboard,farmers,library,partners_utilization,tech,p2p'
|
||
|
||
|
||
!!book.publish
|
||
name:'tech'
|
||
production: false
|
||
"
|
||
p.write(s2)!
|
||
|
||
mut plbook := playbook.new(path: '/tmp/heroscript')!
|
||
playcmds.play_publisher(mut plbook)!
|
||
}
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/play_publisher.v
|
||
```v
|
||
module playcmds
|
||
|
||
import freeflowuniverse.herolib.core.playbook
|
||
// import freeflowuniverse.herolib.hero.publishing
|
||
|
||
// pub fn play_publisher(mut plbook playbook.PlayBook) ! {
|
||
// publishing.play(mut plbook)!
|
||
// }
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/play_threefold.v
|
||
```v
|
||
module playcmds
|
||
|
||
import freeflowuniverse.herolib.core.playbook
|
||
// import freeflowuniverse.herolib.threefold.grid
|
||
// import freeflowuniverse.herolib.threefold.tfrobot
|
||
// import os
|
||
|
||
// pub fn play_threefold(mut plbook playbook.PlayBook) ! {
|
||
// panic('fix tfrobot module')
|
||
// // mut config_actions := plbook.find(filter: 'threefold.configure')!
|
||
|
||
// // mnemonics_ := os.getenv_opt('TFGRID_MNEMONIC') or { '' }
|
||
// // mut ssh_key := os.getenv_opt('SSH_KEY') or { '' }
|
||
|
||
// // tfrobot.configure('play', network: 'main', mnemonics: mnemonics_)!
|
||
|
||
// // mut robot := tfrobot.get('play')!
|
||
|
||
// // if config_actions.len > 1 {
|
||
// // return error('can only have 1 config action for threefold')
|
||
// // } else if config_actions.len == 1 {
|
||
// // mut a := config_actions[0]
|
||
// // mut p := a.params
|
||
// // mut network := p.get_default('network', 'main')!
|
||
// // mnemonics := p.get_default('mnemonics', '')!
|
||
// // ssh_key = p.get_default('ssh_key', '')!
|
||
|
||
// // network = network.to_lower()
|
||
|
||
// // // mnemonics string
|
||
// // // network string = 'main'
|
||
// // tfrobot.configure('play', network: network, mnemonics: mnemonics)!
|
||
|
||
// // robot = tfrobot.get('play')!
|
||
|
||
// // config_actions[0].done = true
|
||
// // }
|
||
// // cfg := robot.config()!
|
||
// // if cfg.mnemonics == '' {
|
||
// // return error('TFGRID_MNEMONIC should be specified as env variable')
|
||
// // }
|
||
|
||
// // if ssh_key == '' {
|
||
// // return error('SSHKey should be specified as env variable')
|
||
// // }
|
||
|
||
// // panic('implement')
|
||
|
||
// // for mut action in plbook.find(filter: 'threefold.deploy_vm')! {
|
||
// // mut p := action.params
|
||
// // deployment_name := p.get_default('deployment_name', 'deployment')!
|
||
// // name := p.get_default('name', 'vm')!
|
||
// // ssh_key := p.get_default('ssh_key', '')!
|
||
// // cores := p.get_int_default('cores', 1)!
|
||
// // memory := p.get_int_default('memory', 20)!
|
||
// // panic("implement")
|
||
// // action.done = true
|
||
// // }
|
||
|
||
// // for mut action in plbook.find(filter: 'threefold.deploy_zdb')! {
|
||
// // panic("implement")
|
||
// // action.done = true
|
||
// // }
|
||
// }
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/_archive/play_zola.v
|
||
```v
|
||
module playcmds
|
||
|
||
// import freeflowuniverse.herolib.ui.console
|
||
// import freeflowuniverse.herolib.web.zola
|
||
// import freeflowuniverse.herolib.core.playbook
|
||
|
||
// struct WebsiteItem {
|
||
// mut:
|
||
// name string
|
||
// site ?&zola.ZolaSite
|
||
// }
|
||
|
||
// pub fn play_zola(mut plbook playbook.PlayBook) ! {
|
||
// // mut coderoot := ''
|
||
// mut buildroot := ''
|
||
// mut publishroot := ''
|
||
// mut install := true
|
||
// mut reset := false
|
||
|
||
// wsactions := plbook.find(filter: 'website.')!
|
||
// if wsactions.len == 0 {
|
||
// return
|
||
// }
|
||
|
||
// mut config_actions := plbook.find(filter: 'websites:configure')!
|
||
// if config_actions.len > 1 {
|
||
// return error('can only have 1 config action for websites')
|
||
// } else if config_actions.len == 1 {
|
||
// mut p := config_actions[0].params
|
||
// buildroot = p.get_default('buildroot', '')!
|
||
// publishroot = p.get_default('publishroot', '')!
|
||
// // coderoot = p.get_default('coderoot', '')!
|
||
// install = p.get_default_true('install')
|
||
// reset = p.get_default_false('reset')
|
||
// config_actions[0].done = true
|
||
// }
|
||
// mut websites := zola.new(
|
||
// path_build: buildroot
|
||
// path_publish: publishroot
|
||
// install: install
|
||
// reset: reset
|
||
// )!
|
||
|
||
// mut ws := WebsiteItem{}
|
||
|
||
// for mut action in plbook.find(filter: 'website.')! {
|
||
// if action.name == 'define' {
|
||
// console.print_debug('website.define')
|
||
// mut p := action.params
|
||
// ws.name = p.get('name')!
|
||
// title := p.get_default('title', '')!
|
||
// description := p.get_default('description', '')!
|
||
// ws.site = websites.new(name: ws.name, title: title, description: description)!
|
||
// } else if action.name == 'template_add' {
|
||
// console.print_debug('website.template_add')
|
||
// mut p := action.params
|
||
// url := p.get_default('url', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for template_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.template_add(url: url)!
|
||
// } else if action.name == 'content_add' {
|
||
// console.print_debug('website.content_add')
|
||
// mut p := action.params
|
||
// url := p.get_default('url', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for content_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.content_add(url: url)!
|
||
// } else if action.name == 'doctree_add' {
|
||
// console.print_debug('website.doctree_add')
|
||
// mut p := action.params
|
||
// url := p.get_default('url', '')!
|
||
// pull := p.get_default_false('pull')
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for doctree_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.doctree_add(url: url, pull: pull)!
|
||
// } else if action.name == 'post_add' {
|
||
// console.print_debug('website.post_add')
|
||
// mut p := action.params
|
||
// name := p.get_default('name', '')!
|
||
// collection := p.get_default('collection', '')!
|
||
// file := p.get_default('file', '')!
|
||
// page := p.get_default('page', '')!
|
||
// pointer := p.get_default('pointer', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for doctree_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.post_add(name: name, collection: collection, file: file, pointer: pointer)!
|
||
// } else if action.name == 'blog_add' {
|
||
// console.print_debug('website.blog_add')
|
||
// mut p := action.params
|
||
// name := p.get_default('name', '')!
|
||
// collection := p.get_default('collection', '')!
|
||
// file := p.get_default('file', '')!
|
||
// page := p.get_default('page', '')!
|
||
// pointer := p.get_default('pointer', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for doctree_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.blog_add(name: name)!
|
||
// } else if action.name == 'person_add' {
|
||
// console.print_debug('website.person_add')
|
||
// mut p := action.params
|
||
// name := p.get_default('name', '')!
|
||
// page := p.get_default('page', '')!
|
||
// collection := p.get_default('collection', '')!
|
||
// file := p.get_default('file', '')!
|
||
// pointer := p.get_default('pointer', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for doctree_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.person_add(
|
||
// name: name
|
||
// collection: collection
|
||
// file: file
|
||
// page: page
|
||
// pointer: pointer
|
||
// )!
|
||
// } else if action.name == 'people_add' {
|
||
// console.print_debug('website.people_add')
|
||
// mut p := action.params
|
||
// name := p.get_default('name', '')!
|
||
// description := p.get_default('description', '')!
|
||
// sort_by_ := p.get_default('sort_by', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for people_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// sort_by := zola.SortBy.from(sort_by_)!
|
||
// site_.people_add(
|
||
// name: name
|
||
// title: p.get_default('title', '')!
|
||
// sort_by: sort_by
|
||
// description: description
|
||
// )!
|
||
// } else if action.name == 'blog_add' {
|
||
// console.print_debug('website.blog_add')
|
||
// mut p := action.params
|
||
// name := p.get_default('name', '')!
|
||
// description := p.get_default('description', '')!
|
||
// sort_by_ := p.get_default('sort_by', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for people_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// sort_by := zola.SortBy.from(sort_by_)!
|
||
// site_.blog_add(
|
||
// name: name
|
||
// title: p.get_default('title', '')!
|
||
// sort_by: sort_by
|
||
// description: description
|
||
// )!
|
||
// } else if action.name == 'news_add' {
|
||
// console.print_debug('website.news_add')
|
||
// mut p := action.params
|
||
// name := p.get_default('name', '')!
|
||
// collection := p.get_default('collection', '')!
|
||
// pointer := p.get_default('pointer', '')!
|
||
// file := p.get_default('file', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for news_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.article_add(name: name, collection: collection, file: file, pointer: pointer)!
|
||
// } else if action.name == 'header_add' {
|
||
// console.print_debug('website.header_add')
|
||
// mut p := action.params
|
||
// template := p.get_default('template', '')!
|
||
// logo := p.get_default('logo', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for doctree_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.header_add(template: template, logo: logo)!
|
||
// } else if action.name == 'header_link_add' {
|
||
// console.print_debug('website.header_link_add')
|
||
// mut p := action.params
|
||
// page := p.get_default('page', '')!
|
||
// label := p.get_default('label', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for header_link_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.header_link_add(page: page, label: label)!
|
||
// } else if action.name == 'footer_add' {
|
||
// console.print_debug('website.footer_add')
|
||
// mut p := action.params
|
||
// template := p.get_default('template', '')!
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for doctree_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.footer_add(template: template)!
|
||
// } else if action.name == 'page_add' {
|
||
// console.print_debug('website.page_add')
|
||
// mut p := action.params
|
||
// name := p.get_default('name', '')!
|
||
// collection := p.get_default('collection', '')!
|
||
// file := p.get_default('file', '')!
|
||
// homepage := p.get_default_false('homepage')
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for doctree_add, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.page_add(name: name, collection: collection, file: file, homepage: homepage)!
|
||
|
||
// // }else if action.name=="pull"{
|
||
// // mut site_:=ws.site or { return error("can't find website for pull, should have been defined before with !!website.define")}
|
||
// // site_.pull()!
|
||
// } else if action.name == 'section_add' {
|
||
// console.print_debug('website.section_add')
|
||
// // mut p := action.params
|
||
// // name := p.get_default('name', '')!
|
||
// // // collection := p.get_default('collection', '')!
|
||
// // // file := p.get_default('file', '')!
|
||
// // // homepage := p.get_default_false('homepage')
|
||
// // mut site_ := ws.site or {
|
||
// // return error("can't find website for doctree_add, should have been defined before with !!website.define")
|
||
// // }
|
||
|
||
// // site_.add_section(name: name)!
|
||
|
||
// // }else if action.name=="pull"{
|
||
// // mut site_:=ws.site or { return error("can't find website for pull, should have been defined before with !!website.define")}
|
||
// // site_.pull()!
|
||
// } else if action.name == 'generate' {
|
||
// mut site_ := ws.site or {
|
||
// return error("can't find website for generate, should have been defined before with !!website.define")
|
||
// }
|
||
|
||
// site_.generate()!
|
||
// // site_.serve()!
|
||
// } else {
|
||
// return error("Cannot find right action for website. Found '${action.name}' which is a non understood action for !!website.")
|
||
// }
|
||
// action.done = true
|
||
// }
|
||
// }
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/factory.v
|
||
```v
|
||
module playcmds
|
||
|
||
import freeflowuniverse.herolib.core.playbook { PlayBook }
|
||
import freeflowuniverse.herolib.data.doctree
|
||
import freeflowuniverse.herolib.biz.bizmodel
|
||
import freeflowuniverse.herolib.web.site
|
||
import freeflowuniverse.herolib.web.docusaurus
|
||
import freeflowuniverse.herolib.clients.openai
|
||
|
||
// -------------------------------------------------------------------
|
||
// run – entry point for all HeroScript play‑commands
|
||
// -------------------------------------------------------------------
|
||
|
||
@[params]
|
||
pub struct PlayArgs {
|
||
pub mut:
|
||
heroscript string
|
||
heroscript_path string
|
||
plbook ?PlayBook
|
||
reset bool
|
||
}
|
||
|
||
pub fn run(args_ PlayArgs) ! {
|
||
mut args := args_
|
||
mut plbook := args.plbook or {
|
||
playbook.new(text: args.heroscript, path: args.heroscript_path)!
|
||
}
|
||
|
||
// Core actions
|
||
play_core(mut plbook)!
|
||
// Git actions
|
||
play_git(mut plbook)!
|
||
|
||
// Business model (e.g. currency, bizmodel)
|
||
bizmodel.play(mut plbook)!
|
||
|
||
// OpenAI client
|
||
openai.play(mut plbook)!
|
||
|
||
// Website / docs
|
||
site.play(mut plbook)!
|
||
doctree.play(mut plbook)!
|
||
docusaurus.play(mut plbook)!
|
||
|
||
// Ensure we did not leave any actions un‑processed
|
||
plbook.empty_check()!
|
||
}
|
||
|
||
```
|
||
|
||
File: /Users/despiegk/code/github/freeflowuniverse/herolib/lib/core/playcmds/play_core.v
|
||
```v
|
||
module playcmds
|
||
|
||
import freeflowuniverse.herolib.develop.gittools
|
||
import freeflowuniverse.herolib.core.playbook { PlayBook }
|
||
import freeflowuniverse.herolib.ui.console
|
||
import freeflowuniverse.herolib.core.texttools
|
||
|
||
// -------------------------------------------------------------------
|
||
// Core play‑command processing (context, session, env‑subst, etc)
|
||
// -------------------------------------------------------------------
|
||
|
||
fn play_core(mut plbook PlayBook) ! {
|
||
// ----------------------------------------------------------------
|
||
// 1. Include handling (play include / echo)
|
||
// ----------------------------------------------------------------
|
||
// Track included paths to prevent infinite recursion
|
||
mut included_paths := map[string]bool{}
|
||
|
||
for action_ in plbook.find(filter: 'play.*')! {
|
||
if action_.name == 'include' {
|
||
console.print_debug('play run:${action_}')
|
||
mut action := *action_
|
||
mut playrunpath := action.params.get_default('path', '')!
|
||
if playrunpath.len == 0 {
|
||
action.name = 'pull'
|
||
playrunpath = gittools.get_repo_path(
|
||
path: action.params.get_default('path', '')!
|
||
git_url: action.params.get_default('git_url', '')!
|
||
git_reset: action.params.get_default_false('git_reset')
|
||
git_pull: action.params.get_default_false('git_pull')
|
||
)!
|
||
}
|
||
if playrunpath.len == 0 {
|
||
return error("can't run a heroscript didn't find url or path.")
|
||
}
|
||
|
||
// Check for cycle detection
|
||
if playrunpath in included_paths {
|
||
console.print_debug('Skipping already included path: ${playrunpath}')
|
||
continue
|
||
}
|
||
|
||
console.print_debug('play run path:${playrunpath}')
|
||
included_paths[playrunpath] = true
|
||
plbook.add(path: playrunpath)!
|
||
}
|
||
if action_.name == 'echo' {
|
||
content := action_.params.get_default('content', "didn't find content")!
|
||
console.print_header(content)
|
||
}
|
||
}
|
||
|
||
// ----------------------------------------------------------------
|
||
// 2. Session environment handling
|
||
// ----------------------------------------------------------------
|
||
// Guard – make sure a session exists
|
||
mut session := plbook.session
|
||
|
||
// !!session.env_set / env_set_once
|
||
for mut action in plbook.find(filter: 'session.')! {
|
||
mut p := action.params
|
||
match action.name {
|
||
'env_set' {
|
||
key := p.get('key')!
|
||
val := p.get('val') or { p.get('value')! }
|
||
session.env_set(key, val)!
|
||
}
|
||
'env_set_once' {
|
||
key := p.get('key')!
|
||
val := p.get('val') or { p.get('value')! }
|
||
// Use the dedicated “set‑once” method
|
||
session.env_set_once(key, val)!
|
||
}
|
||
else { /* ignore unknown sub‑action */ }
|
||
}
|
||
action.done = true
|
||
}
|
||
|
||
// ----------------------------------------------------------------
|
||
// 3. Template replacement in action parameters
|
||
// ----------------------------------------------------------------
|
||
// Apply template replacement from session environment variables
|
||
if session.env.len > 0 {
|
||
// Create a map with name_fix applied to keys for template replacement
|
||
mut env_fixed := map[string]string{}
|
||
for key, value in session.env {
|
||
env_fixed[texttools.name_fix(key)] = value
|
||
}
|
||
|
||
for mut action in plbook.actions {
|
||
if !action.done {
|
||
action.params.replace(env_fixed)
|
||
}
|
||
}
|
||
}
|
||
|
||
for mut action in plbook.find(filter: 'core.coderoot_set')! {
|
||
mut p := action.params
|
||
if p.exists('coderoot') {
|
||
coderoot := p.get_path_create('coderoot')!
|
||
if session.context.config.coderoot != coderoot {
|
||
session.context.config.coderoot = coderoot
|
||
session.context.save()!
|
||
}
|
||
} else {
|
||
return error('coderoot needs to be specified')
|
||
}
|
||
action.done = true
|
||
}
|
||
|
||
for mut action in plbook.find(filter: 'core.params_context_set')! {
|
||
mut p := action.params
|
||
mut context_params := session.context.params()!
|
||
for param in p.params {
|
||
context_params.set(param.key, param.value)
|
||
}
|
||
session.context.save()!
|
||
action.done = true
|
||
}
|
||
|
||
for mut action in plbook.find(filter: 'core.params_session_set')! {
|
||
mut p := action.params
|
||
for param in p.params {
|
||
session.params.set(param.key, param.value)
|
||
}
|
||
session.save()!
|
||
action.done = true
|
||
}
|
||
}
|
||
|
||
```
|
||
</file_contents>
|
||
<user_instructions>
|
||
these are my instructions what needs to be done with the attached code
|
||
|
||
TODO…
|
||
</user_instructions>
|