phaibel 4.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +245 -0
- package/dist/agentary.txt +82 -0
- package/dist/client/index.d.ts +135 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +260 -0
- package/dist/client/index.js.map +1 -0
- package/dist/commands/cal.d.ts +31 -0
- package/dist/commands/cal.d.ts.map +1 -0
- package/dist/commands/cal.js +281 -0
- package/dist/commands/cal.js.map +1 -0
- package/dist/commands/chat.d.ts +3 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +762 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +184 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/cron.d.ts +4 -0
- package/dist/commands/cron.d.ts.map +1 -0
- package/dist/commands/cron.js +165 -0
- package/dist/commands/cron.js.map +1 -0
- package/dist/commands/entity-type.d.ts +3 -0
- package/dist/commands/entity-type.d.ts.map +1 -0
- package/dist/commands/entity-type.js +279 -0
- package/dist/commands/entity-type.js.map +1 -0
- package/dist/commands/entity.d.ts +3 -0
- package/dist/commands/entity.d.ts.map +1 -0
- package/dist/commands/entity.js +262 -0
- package/dist/commands/entity.js.map +1 -0
- package/dist/commands/event.d.ts +4 -0
- package/dist/commands/event.d.ts.map +1 -0
- package/dist/commands/event.js +515 -0
- package/dist/commands/event.js.map +1 -0
- package/dist/commands/feral.d.ts +3 -0
- package/dist/commands/feral.d.ts.map +1 -0
- package/dist/commands/feral.js +272 -0
- package/dist/commands/feral.js.map +1 -0
- package/dist/commands/goal.d.ts +4 -0
- package/dist/commands/goal.d.ts.map +1 -0
- package/dist/commands/goal.js +14 -0
- package/dist/commands/goal.js.map +1 -0
- package/dist/commands/inbox.d.ts +13 -0
- package/dist/commands/inbox.d.ts.map +1 -0
- package/dist/commands/inbox.js +210 -0
- package/dist/commands/inbox.js.map +1 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +154 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/interview.d.ts +14 -0
- package/dist/commands/interview.d.ts.map +1 -0
- package/dist/commands/interview.js +343 -0
- package/dist/commands/interview.js.map +1 -0
- package/dist/commands/list.d.ts +11 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +168 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/note.d.ts +4 -0
- package/dist/commands/note.d.ts.map +1 -0
- package/dist/commands/note.js +548 -0
- package/dist/commands/note.js.map +1 -0
- package/dist/commands/pamp.d.ts +4 -0
- package/dist/commands/pamp.d.ts.map +1 -0
- package/dist/commands/pamp.js +323 -0
- package/dist/commands/pamp.js.map +1 -0
- package/dist/commands/person.d.ts +4 -0
- package/dist/commands/person.d.ts.map +1 -0
- package/dist/commands/person.js +185 -0
- package/dist/commands/person.js.map +1 -0
- package/dist/commands/project.d.ts +4 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +70 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/recurrence.d.ts +17 -0
- package/dist/commands/recurrence.d.ts.map +1 -0
- package/dist/commands/recurrence.js +496 -0
- package/dist/commands/recurrence.js.map +1 -0
- package/dist/commands/remember.d.ts +4 -0
- package/dist/commands/remember.d.ts.map +1 -0
- package/dist/commands/remember.js +70 -0
- package/dist/commands/remember.js.map +1 -0
- package/dist/commands/research.d.ts +4 -0
- package/dist/commands/research.d.ts.map +1 -0
- package/dist/commands/research.js +14 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/service.d.ts +14 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +313 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/setup.d.ts +4 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +42 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/shell.d.ts +3 -0
- package/dist/commands/shell.d.ts.map +1 -0
- package/dist/commands/shell.js +346 -0
- package/dist/commands/shell.js.map +1 -0
- package/dist/commands/skill.d.ts +4 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +84 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/sync.d.ts +4 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +68 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/time.d.ts +3 -0
- package/dist/commands/time.d.ts.map +1 -0
- package/dist/commands/time.js +12 -0
- package/dist/commands/time.js.map +1 -0
- package/dist/commands/today.d.ts +4 -0
- package/dist/commands/today.d.ts.map +1 -0
- package/dist/commands/today.js +112 -0
- package/dist/commands/today.js.map +1 -0
- package/dist/commands/todo.d.ts +4 -0
- package/dist/commands/todo.d.ts.map +1 -0
- package/dist/commands/todo.js +678 -0
- package/dist/commands/todo.js.map +1 -0
- package/dist/commands/todont.d.ts +19 -0
- package/dist/commands/todont.d.ts.map +1 -0
- package/dist/commands/todont.js +209 -0
- package/dist/commands/todont.js.map +1 -0
- package/dist/commands/week.d.ts +4 -0
- package/dist/commands/week.d.ts.map +1 -0
- package/dist/commands/week.js +267 -0
- package/dist/commands/week.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +141 -0
- package/dist/config.js.map +1 -0
- package/dist/context/mentions.d.ts +21 -0
- package/dist/context/mentions.d.ts.map +1 -0
- package/dist/context/mentions.js +146 -0
- package/dist/context/mentions.js.map +1 -0
- package/dist/context/reader.d.ts +54 -0
- package/dist/context/reader.d.ts.map +1 -0
- package/dist/context/reader.js +133 -0
- package/dist/context/reader.js.map +1 -0
- package/dist/dobbai.txt +55 -0
- package/dist/dobbi.txt +55 -0
- package/dist/dobbie-bundle.cjs +73313 -0
- package/dist/dobbie.txt +55 -0
- package/dist/entities/embedding-index.d.ts +26 -0
- package/dist/entities/embedding-index.d.ts.map +1 -0
- package/dist/entities/embedding-index.js +200 -0
- package/dist/entities/embedding-index.js.map +1 -0
- package/dist/entities/entity-index.d.ts +74 -0
- package/dist/entities/entity-index.d.ts.map +1 -0
- package/dist/entities/entity-index.js +369 -0
- package/dist/entities/entity-index.js.map +1 -0
- package/dist/entities/entity-summary.d.ts +6 -0
- package/dist/entities/entity-summary.d.ts.map +1 -0
- package/dist/entities/entity-summary.js +36 -0
- package/dist/entities/entity-summary.js.map +1 -0
- package/dist/entities/entity-type-config.d.ts +83 -0
- package/dist/entities/entity-type-config.d.ts.map +1 -0
- package/dist/entities/entity-type-config.js +134 -0
- package/dist/entities/entity-type-config.js.map +1 -0
- package/dist/entities/entity-types-defaults.d.ts +5 -0
- package/dist/entities/entity-types-defaults.d.ts.map +1 -0
- package/dist/entities/entity-types-defaults.js +59 -0
- package/dist/entities/entity-types-defaults.js.map +1 -0
- package/dist/entities/entity-validator.d.ts +21 -0
- package/dist/entities/entity-validator.d.ts.map +1 -0
- package/dist/entities/entity-validator.js +102 -0
- package/dist/entities/entity-validator.js.map +1 -0
- package/dist/entities/entity.d.ts +180 -0
- package/dist/entities/entity.d.ts.map +1 -0
- package/dist/entities/entity.js +357 -0
- package/dist/entities/entity.js.map +1 -0
- package/dist/entities/spawner.d.ts +67 -0
- package/dist/entities/spawner.d.ts.map +1 -0
- package/dist/entities/spawner.js +294 -0
- package/dist/entities/spawner.js.map +1 -0
- package/dist/feral/agent/agent-brain.d.ts +22 -0
- package/dist/feral/agent/agent-brain.d.ts.map +1 -0
- package/dist/feral/agent/agent-brain.js +5 -0
- package/dist/feral/agent/agent-brain.js.map +1 -0
- package/dist/feral/agent/agent.d.ts +27 -0
- package/dist/feral/agent/agent.d.ts.map +1 -0
- package/dist/feral/agent/agent.js +12 -0
- package/dist/feral/agent/agent.js.map +1 -0
- package/dist/feral/agent/chatgpt-brain.d.ts +14 -0
- package/dist/feral/agent/chatgpt-brain.d.ts.map +1 -0
- package/dist/feral/agent/chatgpt-brain.js +73 -0
- package/dist/feral/agent/chatgpt-brain.js.map +1 -0
- package/dist/feral/agent/index.d.ts +10 -0
- package/dist/feral/agent/index.d.ts.map +1 -0
- package/dist/feral/agent/index.js +13 -0
- package/dist/feral/agent/index.js.map +1 -0
- package/dist/feral/agent/model-schema.d.ts +37 -0
- package/dist/feral/agent/model-schema.d.ts.map +1 -0
- package/dist/feral/agent/model-schema.js +43 -0
- package/dist/feral/agent/model-schema.js.map +1 -0
- package/dist/feral/agent/process-agent.d.ts +20 -0
- package/dist/feral/agent/process-agent.d.ts.map +1 -0
- package/dist/feral/agent/process-agent.js +81 -0
- package/dist/feral/agent/process-agent.js.map +1 -0
- package/dist/feral/agent/protoflow-agent.d.ts +20 -0
- package/dist/feral/agent/protoflow-agent.d.ts.map +1 -0
- package/dist/feral/agent/protoflow-agent.js +99 -0
- package/dist/feral/agent/protoflow-agent.js.map +1 -0
- package/dist/feral/agent/render-prompt.d.ts +12 -0
- package/dist/feral/agent/render-prompt.d.ts.map +1 -0
- package/dist/feral/agent/render-prompt.js +26 -0
- package/dist/feral/agent/render-prompt.js.map +1 -0
- package/dist/feral/bootstrap.d.ts +31 -0
- package/dist/feral/bootstrap.d.ts.map +1 -0
- package/dist/feral/bootstrap.js +241 -0
- package/dist/feral/bootstrap.js.map +1 -0
- package/dist/feral/catalog/agent-catalog-source.d.ts +9 -0
- package/dist/feral/catalog/agent-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/agent-catalog-source.js +115 -0
- package/dist/feral/catalog/agent-catalog-source.js.map +1 -0
- package/dist/feral/catalog/built-in-catalog-source.d.ts +14 -0
- package/dist/feral/catalog/built-in-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/built-in-catalog-source.js +25 -0
- package/dist/feral/catalog/built-in-catalog-source.js.map +1 -0
- package/dist/feral/catalog/catalog-node.d.ts +22 -0
- package/dist/feral/catalog/catalog-node.d.ts.map +1 -0
- package/dist/feral/catalog/catalog-node.js +14 -0
- package/dist/feral/catalog/catalog-node.js.map +1 -0
- package/dist/feral/catalog/catalog.d.ts +17 -0
- package/dist/feral/catalog/catalog.d.ts.map +1 -0
- package/dist/feral/catalog/catalog.js +27 -0
- package/dist/feral/catalog/catalog.js.map +1 -0
- package/dist/feral/catalog/entity-catalog-source.d.ts +13 -0
- package/dist/feral/catalog/entity-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/entity-catalog-source.js +327 -0
- package/dist/feral/catalog/entity-catalog-source.js.map +1 -0
- package/dist/feral/catalog/feral-catalog-config.d.ts +26 -0
- package/dist/feral/catalog/feral-catalog-config.d.ts.map +1 -0
- package/dist/feral/catalog/feral-catalog-config.js +32 -0
- package/dist/feral/catalog/feral-catalog-config.js.map +1 -0
- package/dist/feral/catalog/introspect-catalog-source.d.ts +5 -0
- package/dist/feral/catalog/introspect-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/introspect-catalog-source.js +83 -0
- package/dist/feral/catalog/introspect-catalog-source.js.map +1 -0
- package/dist/feral/catalog/json-catalog-source.d.ts +14 -0
- package/dist/feral/catalog/json-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/json-catalog-source.js +26 -0
- package/dist/feral/catalog/json-catalog-source.js.map +1 -0
- package/dist/feral/catalog/mcp-catalog-source.d.ts +13 -0
- package/dist/feral/catalog/mcp-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/mcp-catalog-source.js +28 -0
- package/dist/feral/catalog/mcp-catalog-source.js.map +1 -0
- package/dist/feral/catalog/output-catalog-source.d.ts +5 -0
- package/dist/feral/catalog/output-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/output-catalog-source.js +32 -0
- package/dist/feral/catalog/output-catalog-source.js.map +1 -0
- package/dist/feral/catalog/pamp-catalog-source.d.ts +9 -0
- package/dist/feral/catalog/pamp-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/pamp-catalog-source.js +42 -0
- package/dist/feral/catalog/pamp-catalog-source.js.map +1 -0
- package/dist/feral/catalog/slack-catalog-source.d.ts +10 -0
- package/dist/feral/catalog/slack-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/slack-catalog-source.js +96 -0
- package/dist/feral/catalog/slack-catalog-source.js.map +1 -0
- package/dist/feral/catalog/system-catalog-source.d.ts +5 -0
- package/dist/feral/catalog/system-catalog-source.d.ts.map +1 -0
- package/dist/feral/catalog/system-catalog-source.js +74 -0
- package/dist/feral/catalog/system-catalog-source.js.map +1 -0
- package/dist/feral/configuration/configuration-description.d.ts +24 -0
- package/dist/feral/configuration/configuration-description.d.ts.map +1 -0
- package/dist/feral/configuration/configuration-description.js +5 -0
- package/dist/feral/configuration/configuration-description.js.map +1 -0
- package/dist/feral/configuration/configuration-manager.d.ts +12 -0
- package/dist/feral/configuration/configuration-manager.d.ts.map +1 -0
- package/dist/feral/configuration/configuration-manager.js +41 -0
- package/dist/feral/configuration/configuration-manager.js.map +1 -0
- package/dist/feral/configuration/configuration-value.d.ts +16 -0
- package/dist/feral/configuration/configuration-value.d.ts.map +1 -0
- package/dist/feral/configuration/configuration-value.js +22 -0
- package/dist/feral/configuration/configuration-value.js.map +1 -0
- package/dist/feral/context/context.d.ts +28 -0
- package/dist/feral/context/context.d.ts.map +1 -0
- package/dist/feral/context/context.js +44 -0
- package/dist/feral/context/context.js.map +1 -0
- package/dist/feral/engine/process-engine.d.ts +23 -0
- package/dist/feral/engine/process-engine.d.ts.map +1 -0
- package/dist/feral/engine/process-engine.js +134 -0
- package/dist/feral/engine/process-engine.js.map +1 -0
- package/dist/feral/errors.d.ts +28 -0
- package/dist/feral/errors.d.ts.map +1 -0
- package/dist/feral/errors.js +58 -0
- package/dist/feral/errors.js.map +1 -0
- package/dist/feral/events/event-dispatcher.d.ts +9 -0
- package/dist/feral/events/event-dispatcher.d.ts.map +1 -0
- package/dist/feral/events/event-dispatcher.js +27 -0
- package/dist/feral/events/event-dispatcher.js.map +1 -0
- package/dist/feral/events/events.d.ts +41 -0
- package/dist/feral/events/events.d.ts.map +1 -0
- package/dist/feral/events/events.js +5 -0
- package/dist/feral/events/events.js.map +1 -0
- package/dist/feral/events/subscribers/cycle-detection-subscriber.d.ts +7 -0
- package/dist/feral/events/subscribers/cycle-detection-subscriber.d.ts.map +1 -0
- package/dist/feral/events/subscribers/cycle-detection-subscriber.js +21 -0
- package/dist/feral/events/subscribers/cycle-detection-subscriber.js.map +1 -0
- package/dist/feral/events/subscribers/logger-subscriber.d.ts +6 -0
- package/dist/feral/events/subscribers/logger-subscriber.d.ts.map +1 -0
- package/dist/feral/events/subscribers/logger-subscriber.js +23 -0
- package/dist/feral/events/subscribers/logger-subscriber.js.map +1 -0
- package/dist/feral/events/subscribers/profiler-subscriber.d.ts +8 -0
- package/dist/feral/events/subscribers/profiler-subscriber.d.ts.map +1 -0
- package/dist/feral/events/subscribers/profiler-subscriber.js +27 -0
- package/dist/feral/events/subscribers/profiler-subscriber.js.map +1 -0
- package/dist/feral/feral-tool-registry.d.ts +18 -0
- package/dist/feral/feral-tool-registry.d.ts.map +1 -0
- package/dist/feral/feral-tool-registry.js +78 -0
- package/dist/feral/feral-tool-registry.js.map +1 -0
- package/dist/feral/index.d.ts +88 -0
- package/dist/feral/index.d.ts.map +1 -0
- package/dist/feral/index.js +89 -0
- package/dist/feral/index.js.map +1 -0
- package/dist/feral/node-code/abstract-node-code.d.ts +38 -0
- package/dist/feral/node-code/abstract-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/abstract-node-code.js +127 -0
- package/dist/feral/node-code/abstract-node-code.js.map +1 -0
- package/dist/feral/node-code/data/calculation-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/calculation-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/calculation-node-code.js +65 -0
- package/dist/feral/node-code/data/calculation-node-code.js.map +1 -0
- package/dist/feral/node-code/data/clean-llm-json-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/clean-llm-json-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/clean-llm-json-node-code.js +47 -0
- package/dist/feral/node-code/data/clean-llm-json-node-code.js.map +1 -0
- package/dist/feral/node-code/data/counter-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/counter-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/counter-node-code.js +29 -0
- package/dist/feral/node-code/data/counter-node-code.js.map +1 -0
- package/dist/feral/node-code/data/http-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/http-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/http-node-code.js +66 -0
- package/dist/feral/node-code/data/http-node-code.js.map +1 -0
- package/dist/feral/node-code/data/json-decode-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/json-decode-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/json-decode-node-code.js +34 -0
- package/dist/feral/node-code/data/json-decode-node-code.js.map +1 -0
- package/dist/feral/node-code/data/json-encode-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/json-encode-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/json-encode-node-code.js +30 -0
- package/dist/feral/node-code/data/json-encode-node-code.js.map +1 -0
- package/dist/feral/node-code/data/llm-chat-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/llm-chat-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/llm-chat-node-code.js +93 -0
- package/dist/feral/node-code/data/llm-chat-node-code.js.map +1 -0
- package/dist/feral/node-code/data/log-node-code.d.ts +13 -0
- package/dist/feral/node-code/data/log-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/log-node-code.js +44 -0
- package/dist/feral/node-code/data/log-node-code.js.map +1 -0
- package/dist/feral/node-code/data/random-value-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/random-value-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/random-value-node-code.js +43 -0
- package/dist/feral/node-code/data/random-value-node-code.js.map +1 -0
- package/dist/feral/node-code/data/read-file-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/read-file-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/read-file-node-code.js +50 -0
- package/dist/feral/node-code/data/read-file-node-code.js.map +1 -0
- package/dist/feral/node-code/data/set-context-table-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/set-context-table-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/set-context-table-node-code.js +34 -0
- package/dist/feral/node-code/data/set-context-table-node-code.js.map +1 -0
- package/dist/feral/node-code/data/set-context-value-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/set-context-value-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/set-context-value-node-code.js +43 -0
- package/dist/feral/node-code/data/set-context-value-node-code.js.map +1 -0
- package/dist/feral/node-code/data/weather-node-code.d.ts +11 -0
- package/dist/feral/node-code/data/weather-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/data/weather-node-code.js +88 -0
- package/dist/feral/node-code/data/weather-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/complete-entity-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/complete-entity-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/complete-entity-node-code.js +72 -0
- package/dist/feral/node-code/entity/complete-entity-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/create-entity-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/create-entity-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/create-entity-node-code.js +109 -0
- package/dist/feral/node-code/entity/create-entity-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/create-entity-type-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/create-entity-type-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/create-entity-type-node-code.js +131 -0
- package/dist/feral/node-code/entity/create-entity-type-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/create-recurring-task-node-code.d.ts +15 -0
- package/dist/feral/node-code/entity/create-recurring-task-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/create-recurring-task-node-code.js +146 -0
- package/dist/feral/node-code/entity/create-recurring-task-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/delete-entity-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/delete-entity-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/delete-entity-node-code.js +60 -0
- package/dist/feral/node-code/entity/delete-entity-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/delete-entity-type-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/delete-entity-type-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/delete-entity-type-node-code.js +51 -0
- package/dist/feral/node-code/entity/delete-entity-type-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/find-entity-node-code.d.ts +13 -0
- package/dist/feral/node-code/entity/find-entity-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/find-entity-node-code.js +59 -0
- package/dist/feral/node-code/entity/find-entity-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/link-entities-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/link-entities-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/link-entities-node-code.js +64 -0
- package/dist/feral/node-code/entity/link-entities-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/list-entities-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/list-entities-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/list-entities-node-code.js +44 -0
- package/dist/feral/node-code/entity/list-entities-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/list-entity-types-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/list-entity-types-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/list-entity-types-node-code.js +22 -0
- package/dist/feral/node-code/entity/list-entity-types-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/load-vault-context-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/load-vault-context-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/load-vault-context-node-code.js +66 -0
- package/dist/feral/node-code/entity/load-vault-context-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/search-entities-node-code.d.ts +13 -0
- package/dist/feral/node-code/entity/search-entities-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/search-entities-node-code.js +66 -0
- package/dist/feral/node-code/entity/search-entities-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/set-entity-field-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/set-entity-field-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/set-entity-field-node-code.js +65 -0
- package/dist/feral/node-code/entity/set-entity-field-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/sort-entities-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/sort-entities-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/sort-entities-node-code.js +67 -0
- package/dist/feral/node-code/entity/sort-entities-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/update-entity-node-code.d.ts +13 -0
- package/dist/feral/node-code/entity/update-entity-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/update-entity-node-code.js +131 -0
- package/dist/feral/node-code/entity/update-entity-node-code.js.map +1 -0
- package/dist/feral/node-code/entity/update-entity-type-node-code.d.ts +11 -0
- package/dist/feral/node-code/entity/update-entity-type-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/entity/update-entity-type-node-code.js +118 -0
- package/dist/feral/node-code/entity/update-entity-type-node-code.js.map +1 -0
- package/dist/feral/node-code/flow/array-iterator-node-code.d.ts +11 -0
- package/dist/feral/node-code/flow/array-iterator-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/flow/array-iterator-node-code.js +91 -0
- package/dist/feral/node-code/flow/array-iterator-node-code.js.map +1 -0
- package/dist/feral/node-code/flow/comparator-node-code.d.ts +11 -0
- package/dist/feral/node-code/flow/comparator-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/flow/comparator-node-code.js +55 -0
- package/dist/feral/node-code/flow/comparator-node-code.js.map +1 -0
- package/dist/feral/node-code/flow/context-value-result-node-code.d.ts +11 -0
- package/dist/feral/node-code/flow/context-value-result-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/flow/context-value-result-node-code.js +22 -0
- package/dist/feral/node-code/flow/context-value-result-node-code.js.map +1 -0
- package/dist/feral/node-code/flow/noop-node-code.d.ts +11 -0
- package/dist/feral/node-code/flow/noop-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/flow/noop-node-code.js +19 -0
- package/dist/feral/node-code/flow/noop-node-code.js.map +1 -0
- package/dist/feral/node-code/flow/start-node-code.d.ts +11 -0
- package/dist/feral/node-code/flow/start-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/flow/start-node-code.js +19 -0
- package/dist/feral/node-code/flow/start-node-code.js.map +1 -0
- package/dist/feral/node-code/flow/stop-node-code.d.ts +11 -0
- package/dist/feral/node-code/flow/stop-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/flow/stop-node-code.js +19 -0
- package/dist/feral/node-code/flow/stop-node-code.js.map +1 -0
- package/dist/feral/node-code/flow/sub-process-node-code.d.ts +11 -0
- package/dist/feral/node-code/flow/sub-process-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/flow/sub-process-node-code.js +53 -0
- package/dist/feral/node-code/flow/sub-process-node-code.js.map +1 -0
- package/dist/feral/node-code/flow/throw-exception-node-code.d.ts +11 -0
- package/dist/feral/node-code/flow/throw-exception-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/flow/throw-exception-node-code.js +20 -0
- package/dist/feral/node-code/flow/throw-exception-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/data-synthesis-prep-node-code.d.ts +15 -0
- package/dist/feral/node-code/genai/data-synthesis-prep-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/data-synthesis-prep-node-code.js +44 -0
- package/dist/feral/node-code/genai/data-synthesis-prep-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/generate-html-node-code.d.ts +13 -0
- package/dist/feral/node-code/genai/generate-html-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/generate-html-node-code.js +47 -0
- package/dist/feral/node-code/genai/generate-html-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/generate-markdown-node-code.d.ts +27 -0
- package/dist/feral/node-code/genai/generate-markdown-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/generate-markdown-node-code.js +81 -0
- package/dist/feral/node-code/genai/generate-markdown-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/hydrate-model-node-code.d.ts +21 -0
- package/dist/feral/node-code/genai/hydrate-model-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/hydrate-model-node-code.js +83 -0
- package/dist/feral/node-code/genai/hydrate-model-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/merge-strings-node-code.d.ts +14 -0
- package/dist/feral/node-code/genai/merge-strings-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/merge-strings-node-code.js +34 -0
- package/dist/feral/node-code/genai/merge-strings-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/model-to-output-node-code.d.ts +18 -0
- package/dist/feral/node-code/genai/model-to-output-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/model-to-output-node-code.js +49 -0
- package/dist/feral/node-code/genai/model-to-output-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/openai-node-code.d.ts +14 -0
- package/dist/feral/node-code/genai/openai-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/openai-node-code.js +66 -0
- package/dist/feral/node-code/genai/openai-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/write-entity-node-code.d.ts +22 -0
- package/dist/feral/node-code/genai/write-entity-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/write-entity-node-code.js +46 -0
- package/dist/feral/node-code/genai/write-entity-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/write-file-node-code.d.ts +13 -0
- package/dist/feral/node-code/genai/write-file-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/write-file-node-code.js +59 -0
- package/dist/feral/node-code/genai/write-file-node-code.js.map +1 -0
- package/dist/feral/node-code/genai/write-to-redis-node-code.d.ts +23 -0
- package/dist/feral/node-code/genai/write-to-redis-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/genai/write-to-redis-node-code.js +48 -0
- package/dist/feral/node-code/genai/write-to-redis-node-code.js.map +1 -0
- package/dist/feral/node-code/input/prompt-input-node-code.d.ts +11 -0
- package/dist/feral/node-code/input/prompt-input-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/input/prompt-input-node-code.js +70 -0
- package/dist/feral/node-code/input/prompt-input-node-code.js.map +1 -0
- package/dist/feral/node-code/input/prompt-select-node-code.d.ts +11 -0
- package/dist/feral/node-code/input/prompt-select-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/input/prompt-select-node-code.js +65 -0
- package/dist/feral/node-code/input/prompt-select-node-code.js.map +1 -0
- package/dist/feral/node-code/mcp/mcp-call-tool-node-code.d.ts +12 -0
- package/dist/feral/node-code/mcp/mcp-call-tool-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/mcp/mcp-call-tool-node-code.js +44 -0
- package/dist/feral/node-code/mcp/mcp-call-tool-node-code.js.map +1 -0
- package/dist/feral/node-code/node-code-factory.d.ts +20 -0
- package/dist/feral/node-code/node-code-factory.d.ts.map +1 -0
- package/dist/feral/node-code/node-code-factory.js +32 -0
- package/dist/feral/node-code/node-code-factory.js.map +1 -0
- package/dist/feral/node-code/node-code.d.ts +22 -0
- package/dist/feral/node-code/node-code.d.ts.map +1 -0
- package/dist/feral/node-code/node-code.js +9 -0
- package/dist/feral/node-code/node-code.js.map +1 -0
- package/dist/feral/node-code/output/agent-speak-node-code.d.ts +11 -0
- package/dist/feral/node-code/output/agent-speak-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/output/agent-speak-node-code.js +56 -0
- package/dist/feral/node-code/output/agent-speak-node-code.js.map +1 -0
- package/dist/feral/node-code/output/dobbai-speak-node-code.d.ts +11 -0
- package/dist/feral/node-code/output/dobbai-speak-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/output/dobbai-speak-node-code.js +56 -0
- package/dist/feral/node-code/output/dobbai-speak-node-code.js.map +1 -0
- package/dist/feral/node-code/output/dobbi-speak-node-code.d.ts +15 -0
- package/dist/feral/node-code/output/dobbi-speak-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/output/dobbi-speak-node-code.js +60 -0
- package/dist/feral/node-code/output/dobbi-speak-node-code.js.map +1 -0
- package/dist/feral/node-code/output/dobbie-speak-node-code.d.ts +11 -0
- package/dist/feral/node-code/output/dobbie-speak-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/output/dobbie-speak-node-code.js +56 -0
- package/dist/feral/node-code/output/dobbie-speak-node-code.js.map +1 -0
- package/dist/feral/node-code/pamp/pamp-await-reply-node-code.d.ts +11 -0
- package/dist/feral/node-code/pamp/pamp-await-reply-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/pamp/pamp-await-reply-node-code.js +51 -0
- package/dist/feral/node-code/pamp/pamp-await-reply-node-code.js.map +1 -0
- package/dist/feral/node-code/pamp/pamp-check-inbox-node-code.d.ts +11 -0
- package/dist/feral/node-code/pamp/pamp-check-inbox-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/pamp/pamp-check-inbox-node-code.js +37 -0
- package/dist/feral/node-code/pamp/pamp-check-inbox-node-code.js.map +1 -0
- package/dist/feral/node-code/pamp/pamp-send-node-code.d.ts +11 -0
- package/dist/feral/node-code/pamp/pamp-send-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/pamp/pamp-send-node-code.js +48 -0
- package/dist/feral/node-code/pamp/pamp-send-node-code.js.map +1 -0
- package/dist/feral/node-code/pamp/pamp-share-entity-node-code.d.ts +11 -0
- package/dist/feral/node-code/pamp/pamp-share-entity-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/pamp/pamp-share-entity-node-code.js +45 -0
- package/dist/feral/node-code/pamp/pamp-share-entity-node-code.js.map +1 -0
- package/dist/feral/node-code/slack/slack-block-builder-node-code.d.ts +18 -0
- package/dist/feral/node-code/slack/slack-block-builder-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/slack/slack-block-builder-node-code.js +100 -0
- package/dist/feral/node-code/slack/slack-block-builder-node-code.js.map +1 -0
- package/dist/feral/node-code/slack/slack-post-webhook-node-code.d.ts +13 -0
- package/dist/feral/node-code/slack/slack-post-webhook-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/slack/slack-post-webhook-node-code.js +47 -0
- package/dist/feral/node-code/slack/slack-post-webhook-node-code.js.map +1 -0
- package/dist/feral/node-code/slack/slack-process-slash-command-node-code.d.ts +14 -0
- package/dist/feral/node-code/slack/slack-process-slash-command-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/slack/slack-process-slash-command-node-code.js +39 -0
- package/dist/feral/node-code/slack/slack-process-slash-command-node-code.js.map +1 -0
- package/dist/feral/node-code/system/cli-command-node-code.d.ts +11 -0
- package/dist/feral/node-code/system/cli-command-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/system/cli-command-node-code.js +50 -0
- package/dist/feral/node-code/system/cli-command-node-code.js.map +1 -0
- package/dist/feral/node-code/system/introspect-node-code.d.ts +12 -0
- package/dist/feral/node-code/system/introspect-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/system/introspect-node-code.js +98 -0
- package/dist/feral/node-code/system/introspect-node-code.js.map +1 -0
- package/dist/feral/node-code/system/list-catalog-nodes-node-code.d.ts +10 -0
- package/dist/feral/node-code/system/list-catalog-nodes-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/system/list-catalog-nodes-node-code.js +33 -0
- package/dist/feral/node-code/system/list-catalog-nodes-node-code.js.map +1 -0
- package/dist/feral/node-code/system/list-processes-node-code.d.ts +10 -0
- package/dist/feral/node-code/system/list-processes-node-code.d.ts.map +1 -0
- package/dist/feral/node-code/system/list-processes-node-code.js +22 -0
- package/dist/feral/node-code/system/list-processes-node-code.js.map +1 -0
- package/dist/feral/process/edge.d.ts +18 -0
- package/dist/feral/process/edge.d.ts.map +1 -0
- package/dist/feral/process/edge.js +32 -0
- package/dist/feral/process/edge.js.map +1 -0
- package/dist/feral/process/json-process-source.d.ts +18 -0
- package/dist/feral/process/json-process-source.d.ts.map +1 -0
- package/dist/feral/process/json-process-source.js +55 -0
- package/dist/feral/process/json-process-source.js.map +1 -0
- package/dist/feral/process/node.d.ts +14 -0
- package/dist/feral/process/node.d.ts.map +1 -0
- package/dist/feral/process/node.js +5 -0
- package/dist/feral/process/node.js.map +1 -0
- package/dist/feral/process/process-factory.d.ts +18 -0
- package/dist/feral/process/process-factory.d.ts.map +1 -0
- package/dist/feral/process/process-factory.js +30 -0
- package/dist/feral/process/process-factory.js.map +1 -0
- package/dist/feral/process/process-json-hydrator.d.ts +53 -0
- package/dist/feral/process/process-json-hydrator.d.ts.map +1 -0
- package/dist/feral/process/process-json-hydrator.js +48 -0
- package/dist/feral/process/process-json-hydrator.js.map +1 -0
- package/dist/feral/process/process.d.ts +17 -0
- package/dist/feral/process/process.d.ts.map +1 -0
- package/dist/feral/process/process.js +5 -0
- package/dist/feral/process/process.js.map +1 -0
- package/dist/feral/result/result.d.ts +30 -0
- package/dist/feral/result/result.d.ts.map +1 -0
- package/dist/feral/result/result.js +28 -0
- package/dist/feral/result/result.js.map +1 -0
- package/dist/feral/runner/runner.d.ts +13 -0
- package/dist/feral/runner/runner.d.ts.map +1 -0
- package/dist/feral/runner/runner.js +28 -0
- package/dist/feral/runner/runner.js.map +1 -0
- package/dist/feral/security/file-access-guard.d.ts +18 -0
- package/dist/feral/security/file-access-guard.d.ts.map +1 -0
- package/dist/feral/security/file-access-guard.js +69 -0
- package/dist/feral/security/file-access-guard.js.map +1 -0
- package/dist/feral/slack/block-builder.d.ts +61 -0
- package/dist/feral/slack/block-builder.d.ts.map +1 -0
- package/dist/feral/slack/block-builder.js +206 -0
- package/dist/feral/slack/block-builder.js.map +1 -0
- package/dist/feral/slack/blocks.d.ts +86 -0
- package/dist/feral/slack/blocks.d.ts.map +1 -0
- package/dist/feral/slack/blocks.js +181 -0
- package/dist/feral/slack/blocks.js.map +1 -0
- package/dist/feral/slack/composition.d.ts +54 -0
- package/dist/feral/slack/composition.d.ts.map +1 -0
- package/dist/feral/slack/composition.js +114 -0
- package/dist/feral/slack/composition.js.map +1 -0
- package/dist/feral/slack/elements.d.ts +123 -0
- package/dist/feral/slack/elements.d.ts.map +1 -0
- package/dist/feral/slack/elements.js +269 -0
- package/dist/feral/slack/elements.js.map +1 -0
- package/dist/feral/slack/index.d.ts +12 -0
- package/dist/feral/slack/index.d.ts.map +1 -0
- package/dist/feral/slack/index.js +20 -0
- package/dist/feral/slack/index.js.map +1 -0
- package/dist/feral/slack/mapping-factory.d.ts +24 -0
- package/dist/feral/slack/mapping-factory.d.ts.map +1 -0
- package/dist/feral/slack/mapping-factory.js +45 -0
- package/dist/feral/slack/mapping-factory.js.map +1 -0
- package/dist/feral/slack/messages.d.ts +34 -0
- package/dist/feral/slack/messages.d.ts.map +1 -0
- package/dist/feral/slack/messages.js +53 -0
- package/dist/feral/slack/messages.js.map +1 -0
- package/dist/feral/slack/slack-facade.d.ts +20 -0
- package/dist/feral/slack/slack-facade.d.ts.map +1 -0
- package/dist/feral/slack/slack-facade.js +41 -0
- package/dist/feral/slack/slack-facade.js.map +1 -0
- package/dist/feral/slack/slack-markdown-formatter.d.ts +22 -0
- package/dist/feral/slack/slack-markdown-formatter.d.ts.map +1 -0
- package/dist/feral/slack/slack-markdown-formatter.js +36 -0
- package/dist/feral/slack/slack-markdown-formatter.js.map +1 -0
- package/dist/feral/slack/slash-command-input.d.ts +23 -0
- package/dist/feral/slack/slash-command-input.d.ts.map +1 -0
- package/dist/feral/slack/slash-command-input.js +45 -0
- package/dist/feral/slack/slash-command-input.js.map +1 -0
- package/dist/feral/slack/types.d.ts +64 -0
- package/dist/feral/slack/types.d.ts.map +1 -0
- package/dist/feral/slack/types.js +44 -0
- package/dist/feral/slack/types.js.map +1 -0
- package/dist/feral/trace/process-trace.d.ts +44 -0
- package/dist/feral/trace/process-trace.d.ts.map +1 -0
- package/dist/feral/trace/process-trace.js +44 -0
- package/dist/feral/trace/process-trace.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +157 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/providers/claude.d.ts +11 -0
- package/dist/llm/providers/claude.d.ts.map +1 -0
- package/dist/llm/providers/claude.js +45 -0
- package/dist/llm/providers/claude.js.map +1 -0
- package/dist/llm/providers/index.d.ts +5 -0
- package/dist/llm/providers/index.d.ts.map +1 -0
- package/dist/llm/providers/index.js +20 -0
- package/dist/llm/providers/index.js.map +1 -0
- package/dist/llm/providers/openai.d.ts +12 -0
- package/dist/llm/providers/openai.d.ts.map +1 -0
- package/dist/llm/providers/openai.js +62 -0
- package/dist/llm/providers/openai.js.map +1 -0
- package/dist/llm/router.d.ts +32 -0
- package/dist/llm/router.d.ts.map +1 -0
- package/dist/llm/router.js +100 -0
- package/dist/llm/router.js.map +1 -0
- package/dist/llm/types.d.ts +18 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +2 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/markdown/parser.d.ts +26 -0
- package/dist/markdown/parser.d.ts.map +1 -0
- package/dist/markdown/parser.js +58 -0
- package/dist/markdown/parser.js.map +1 -0
- package/dist/pamp/client.d.ts +39 -0
- package/dist/pamp/client.d.ts.map +1 -0
- package/dist/pamp/client.js +336 -0
- package/dist/pamp/client.js.map +1 -0
- package/dist/pamp/crypto.d.ts +23 -0
- package/dist/pamp/crypto.d.ts.map +1 -0
- package/dist/pamp/crypto.js +130 -0
- package/dist/pamp/crypto.js.map +1 -0
- package/dist/pamp/envelope.d.ts +23 -0
- package/dist/pamp/envelope.d.ts.map +1 -0
- package/dist/pamp/envelope.js +67 -0
- package/dist/pamp/envelope.js.map +1 -0
- package/dist/pamp/index.d.ts +6 -0
- package/dist/pamp/index.d.ts.map +1 -0
- package/dist/pamp/index.js +9 -0
- package/dist/pamp/index.js.map +1 -0
- package/dist/pamp/storage.d.ts +20 -0
- package/dist/pamp/storage.d.ts.map +1 -0
- package/dist/pamp/storage.js +160 -0
- package/dist/pamp/storage.js.map +1 -0
- package/dist/pamp/types.d.ts +80 -0
- package/dist/pamp/types.d.ts.map +1 -0
- package/dist/pamp/types.js +7 -0
- package/dist/pamp/types.js.map +1 -0
- package/dist/paths.d.ts +24 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +70 -0
- package/dist/paths.js.map +1 -0
- package/dist/personalities.d.ts +20 -0
- package/dist/personalities.d.ts.map +1 -0
- package/dist/personalities.js +181 -0
- package/dist/personalities.js.map +1 -0
- package/dist/phaibel.txt +82 -0
- package/dist/responses.d.ts +34 -0
- package/dist/responses.d.ts.map +1 -0
- package/dist/responses.js +467 -0
- package/dist/responses.js.map +1 -0
- package/dist/schemas/index.d.ts +154 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +73 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/service/api-router.d.ts +7 -0
- package/dist/service/api-router.d.ts.map +1 -0
- package/dist/service/api-router.js +478 -0
- package/dist/service/api-router.js.map +1 -0
- package/dist/service/context/provider.d.ts +76 -0
- package/dist/service/context/provider.d.ts.map +1 -0
- package/dist/service/context/provider.js +140 -0
- package/dist/service/context/provider.js.map +1 -0
- package/dist/service/cron/feedback-analysis.d.ts +2 -0
- package/dist/service/cron/feedback-analysis.d.ts.map +1 -0
- package/dist/service/cron/feedback-analysis.js +100 -0
- package/dist/service/cron/feedback-analysis.js.map +1 -0
- package/dist/service/cron/pamp-checker.d.ts +7 -0
- package/dist/service/cron/pamp-checker.d.ts.map +1 -0
- package/dist/service/cron/pamp-checker.js +29 -0
- package/dist/service/cron/pamp-checker.js.map +1 -0
- package/dist/service/cron/process-evaluator.d.ts +6 -0
- package/dist/service/cron/process-evaluator.d.ts.map +1 -0
- package/dist/service/cron/process-evaluator.js +126 -0
- package/dist/service/cron/process-evaluator.js.map +1 -0
- package/dist/service/cron/process-lifecycle.d.ts +6 -0
- package/dist/service/cron/process-lifecycle.d.ts.map +1 -0
- package/dist/service/cron/process-lifecycle.js +202 -0
- package/dist/service/cron/process-lifecycle.js.map +1 -0
- package/dist/service/cron/scheduler.d.ts +36 -0
- package/dist/service/cron/scheduler.d.ts.map +1 -0
- package/dist/service/cron/scheduler.js +232 -0
- package/dist/service/cron/scheduler.js.map +1 -0
- package/dist/service/daemon.d.ts +24 -0
- package/dist/service/daemon.d.ts.map +1 -0
- package/dist/service/daemon.js +181 -0
- package/dist/service/daemon.js.map +1 -0
- package/dist/service/index.d.ts +11 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +255 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/protocol.d.ts +119 -0
- package/dist/service/protocol.d.ts.map +1 -0
- package/dist/service/protocol.js +17 -0
- package/dist/service/protocol.js.map +1 -0
- package/dist/service/queue/manager.d.ts +66 -0
- package/dist/service/queue/manager.d.ts.map +1 -0
- package/dist/service/queue/manager.js +206 -0
- package/dist/service/queue/manager.js.map +1 -0
- package/dist/service/queue/processor.d.ts +53 -0
- package/dist/service/queue/processor.d.ts.map +1 -0
- package/dist/service/queue/processor.js +288 -0
- package/dist/service/queue/processor.js.map +1 -0
- package/dist/service/queue/queue-persistence.d.ts +27 -0
- package/dist/service/queue/queue-persistence.d.ts.map +1 -0
- package/dist/service/queue/queue-persistence.js +53 -0
- package/dist/service/queue/queue-persistence.js.map +1 -0
- package/dist/service/server.d.ts +28 -0
- package/dist/service/server.d.ts.map +1 -0
- package/dist/service/server.js +101 -0
- package/dist/service/server.js.map +1 -0
- package/dist/service/task/builder.d.ts +43 -0
- package/dist/service/task/builder.d.ts.map +1 -0
- package/dist/service/task/builder.js +100 -0
- package/dist/service/task/builder.js.map +1 -0
- package/dist/service/task/types.d.ts +2 -0
- package/dist/service/task/types.d.ts.map +1 -0
- package/dist/service/task/types.js +3 -0
- package/dist/service/task/types.js.map +1 -0
- package/dist/service/web-client.html +1569 -0
- package/dist/service/web-server.d.ts +18 -0
- package/dist/service/web-server.d.ts.map +1 -0
- package/dist/service/web-server.js +395 -0
- package/dist/service/web-server.js.map +1 -0
- package/dist/shell/banner.d.ts +11 -0
- package/dist/shell/banner.d.ts.map +1 -0
- package/dist/shell/banner.js +66 -0
- package/dist/shell/banner.js.map +1 -0
- package/dist/shell/status-poller.d.ts +27 -0
- package/dist/shell/status-poller.d.ts.map +1 -0
- package/dist/shell/status-poller.js +77 -0
- package/dist/shell/status-poller.js.map +1 -0
- package/dist/shell/tui.d.ts +32 -0
- package/dist/shell/tui.d.ts.map +1 -0
- package/dist/shell/tui.js +69 -0
- package/dist/shell/tui.js.map +1 -0
- package/dist/skills/mcp-manager.d.ts +30 -0
- package/dist/skills/mcp-manager.d.ts.map +1 -0
- package/dist/skills/mcp-manager.js +104 -0
- package/dist/skills/mcp-manager.js.map +1 -0
- package/dist/skills/skill-config.d.ts +13 -0
- package/dist/skills/skill-config.d.ts.map +1 -0
- package/dist/skills/skill-config.js +23 -0
- package/dist/skills/skill-config.js.map +1 -0
- package/dist/state/manager.d.ts +73 -0
- package/dist/state/manager.d.ts.map +1 -0
- package/dist/state/manager.js +201 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/tools/daily.d.ts +2 -0
- package/dist/tools/daily.d.ts.map +1 -0
- package/dist/tools/daily.js +310 -0
- package/dist/tools/daily.js.map +1 -0
- package/dist/tools/events.d.ts +2 -0
- package/dist/tools/events.d.ts.map +1 -0
- package/dist/tools/events.js +132 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/goals.d.ts +2 -0
- package/dist/tools/goals.d.ts.map +1 -0
- package/dist/tools/goals.js +128 -0
- package/dist/tools/goals.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +13 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/notes.d.ts +2 -0
- package/dist/tools/notes.d.ts.map +1 -0
- package/dist/tools/notes.js +88 -0
- package/dist/tools/notes.js.map +1 -0
- package/dist/tools/project.d.ts +2 -0
- package/dist/tools/project.d.ts.map +1 -0
- package/dist/tools/project.js +112 -0
- package/dist/tools/project.js.map +1 -0
- package/dist/tools/research.d.ts +2 -0
- package/dist/tools/research.d.ts.map +1 -0
- package/dist/tools/research.js +64 -0
- package/dist/tools/research.js.map +1 -0
- package/dist/tools/summarize.d.ts +2 -0
- package/dist/tools/summarize.d.ts.map +1 -0
- package/dist/tools/summarize.js +31 -0
- package/dist/tools/summarize.js.map +1 -0
- package/dist/tools/tasks.d.ts +2 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +90 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/time.d.ts +2 -0
- package/dist/tools/time.d.ts.map +1 -0
- package/dist/tools/time.js +21 -0
- package/dist/tools/time.js.map +1 -0
- package/dist/tools/types.d.ts +56 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +17 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/ui/breadcrumb.d.ts +11 -0
- package/dist/ui/breadcrumb.d.ts.map +1 -0
- package/dist/ui/breadcrumb.js +35 -0
- package/dist/ui/breadcrumb.js.map +1 -0
- package/dist/ui/entity-prompt.d.ts +52 -0
- package/dist/ui/entity-prompt.d.ts.map +1 -0
- package/dist/ui/entity-prompt.js +130 -0
- package/dist/ui/entity-prompt.js.map +1 -0
- package/dist/utils/chat-logger.d.ts +28 -0
- package/dist/utils/chat-logger.d.ts.map +1 -0
- package/dist/utils/chat-logger.js +85 -0
- package/dist/utils/chat-logger.js.map +1 -0
- package/dist/utils/debug.d.ts +14 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +31 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/execution-logger.d.ts +21 -0
- package/dist/utils/execution-logger.d.ts.map +1 -0
- package/dist/utils/execution-logger.js +46 -0
- package/dist/utils/execution-logger.js.map +1 -0
- package/dist/utils/ics-parser.d.ts +14 -0
- package/dist/utils/ics-parser.d.ts.map +1 -0
- package/dist/utils/ics-parser.js +57 -0
- package/dist/utils/ics-parser.js.map +1 -0
- package/dist/utils/json-parser.d.ts +10 -0
- package/dist/utils/json-parser.d.ts.map +1 -0
- package/dist/utils/json-parser.js +164 -0
- package/dist/utils/json-parser.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,762 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Feral Autonomous Chat — Two-Phase Pipeline
|
|
3
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
+
//
|
|
5
|
+
// Phase 1 (Process Reuse): Present ALL known processes to the LLM and let it
|
|
6
|
+
// pick one if it clearly fits, or choose "custom" to build from scratch.
|
|
7
|
+
//
|
|
8
|
+
// Phase 2 (Custom Pipeline): Only runs when Phase 1 chose "custom" (or no
|
|
9
|
+
// processes exist). A multi-step LLM pipeline that:
|
|
10
|
+
// 1. Selects catalog nodes relevant to the user's request
|
|
11
|
+
// 2. Generates a Feral process JSON using those nodes
|
|
12
|
+
// 3. Runs the process, checks completion, iterates if needed
|
|
13
|
+
// 4. Synthesizes a natural response
|
|
14
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
15
|
+
import chalk from 'chalk';
|
|
16
|
+
import ora from 'ora';
|
|
17
|
+
import inquirer from 'inquirer';
|
|
18
|
+
import { bootstrapFeral } from '../feral/bootstrap.js';
|
|
19
|
+
import { hydrateProcessFromString } from '../feral/process/process-json-hydrator.js';
|
|
20
|
+
import { getModelForCapability, createSystemPrompt } from '../llm/router.js';
|
|
21
|
+
import { debug } from '../utils/debug.js';
|
|
22
|
+
import { ChatLogger, generateChatId } from '../utils/chat-logger.js';
|
|
23
|
+
import { parseJsonResponse } from '../utils/json-parser.js';
|
|
24
|
+
import { writeExecutionLog } from '../utils/execution-logger.js';
|
|
25
|
+
import { loadEntityTypes } from '../entities/entity-type-config.js';
|
|
26
|
+
import { listEntities } from '../entities/entity.js';
|
|
27
|
+
import { getUserName } from '../state/manager.js';
|
|
28
|
+
import { getVaultContext } from '../context/reader.js';
|
|
29
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
30
|
+
// IN-MEMORY PROCESS SOURCE
|
|
31
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
32
|
+
class InMemoryProcessSource {
|
|
33
|
+
processes = [];
|
|
34
|
+
add(process) {
|
|
35
|
+
this.processes.push(process);
|
|
36
|
+
}
|
|
37
|
+
getProcesses() {
|
|
38
|
+
return this.processes;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
42
|
+
// EXAMPLE PROCESSES (for the LLM prompt)
|
|
43
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
44
|
+
const EXAMPLE_PROCESSES = [
|
|
45
|
+
{
|
|
46
|
+
description: 'Simple linear process: list tasks then sort them',
|
|
47
|
+
json: {
|
|
48
|
+
schema_version: 1,
|
|
49
|
+
key: 'tasks.list',
|
|
50
|
+
description: 'List all tasks, sorted by priority and due date',
|
|
51
|
+
context: {},
|
|
52
|
+
nodes: [
|
|
53
|
+
{ key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'list' } },
|
|
54
|
+
{ key: 'list', catalog_node_key: 'list_tasks', configuration: {}, edges: { ok: 'sort' } },
|
|
55
|
+
{ key: 'sort', catalog_node_key: 'sort_tasks', configuration: {}, edges: { ok: 'done' } },
|
|
56
|
+
{ key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
description: 'Create multiple entities: a goal and a todont from user input',
|
|
62
|
+
json: {
|
|
63
|
+
schema_version: 1,
|
|
64
|
+
key: 'multi.create',
|
|
65
|
+
description: 'Create a goal and a todont based on user input',
|
|
66
|
+
context: {},
|
|
67
|
+
nodes: [
|
|
68
|
+
{ key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'create_goal' } },
|
|
69
|
+
{ key: 'create_goal', catalog_node_key: 'create_goal', configuration: { entity_title: 'Run 10 miles', entity_body: 'Train progressively to run 10 miles by mid-March' }, edges: { ok: 'create_todont', already_exists: 'create_todont', error: 'create_todont' } },
|
|
70
|
+
{ key: 'create_todont', catalog_node_key: 'create_todont', configuration: { entity_title: 'No pizza or beer', entity_body: 'Avoid pizza and beer while training for the 10-mile run' }, edges: { ok: 'done', already_exists: 'done', error: 'done' } },
|
|
71
|
+
{ key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
description: 'If/else branch: find a task, check its priority, and take different actions based on whether it is high priority',
|
|
77
|
+
json: {
|
|
78
|
+
schema_version: 1,
|
|
79
|
+
key: 'task.priority.check',
|
|
80
|
+
description: 'Find a task by title, then branch on its priority — set high-priority tasks to in-progress, leave others as-is',
|
|
81
|
+
context: {},
|
|
82
|
+
nodes: [
|
|
83
|
+
{ key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'find' } },
|
|
84
|
+
{ key: 'find', catalog_node_key: 'find_task', configuration: {}, edges: { ok: 'check_priority', error: 'done' } },
|
|
85
|
+
{ key: 'check_priority', catalog_node_key: 'context_value_comparator', configuration: { left_context_path: 'priority', right_value: 'high' }, edges: { true: 'set_in_progress', false: 'done' } },
|
|
86
|
+
{ key: 'set_in_progress', catalog_node_key: 'set_task_status', configuration: { value: 'in-progress' }, edges: { ok: 'done', error: 'done' } },
|
|
87
|
+
{ key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
description: 'Tag filter: list only tasks that have a specific tag',
|
|
93
|
+
json: {
|
|
94
|
+
schema_version: 1,
|
|
95
|
+
key: 'tasks.by_tag',
|
|
96
|
+
description: 'List all tasks with the "home" tag',
|
|
97
|
+
context: {},
|
|
98
|
+
nodes: [
|
|
99
|
+
{ key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'list' } },
|
|
100
|
+
{ key: 'list', catalog_node_key: 'list_tasks', configuration: { tags: 'home' }, edges: { ok: 'done' } },
|
|
101
|
+
{ key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
description: 'Complete a task: find it by title and mark it as done',
|
|
107
|
+
json: {
|
|
108
|
+
schema_version: 1,
|
|
109
|
+
key: 'task.complete',
|
|
110
|
+
description: 'Mark a task as done',
|
|
111
|
+
context: {},
|
|
112
|
+
nodes: [
|
|
113
|
+
{ key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'complete' } },
|
|
114
|
+
{ key: 'complete', catalog_node_key: 'complete_task', configuration: { entity_title: 'Buy groceries' }, edges: { ok: 'done', not_found: 'done', error: 'done' } },
|
|
115
|
+
{ key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
description: 'Link two entities: connect a task to a goal',
|
|
121
|
+
json: {
|
|
122
|
+
schema_version: 1,
|
|
123
|
+
key: 'link.task_to_goal',
|
|
124
|
+
description: 'Link a task to a related goal',
|
|
125
|
+
context: {},
|
|
126
|
+
nodes: [
|
|
127
|
+
{ key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'link' } },
|
|
128
|
+
{ key: 'link', catalog_node_key: 'link_entities', configuration: { source_entity_type: 'task', source_entity_title: 'Fix the fence', target_entity_type: 'goal', target_entity_title: 'Home improvement', label: 'contributes-to' }, edges: { ok: 'done', not_found: 'done', error: 'done' } },
|
|
129
|
+
{ key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
description: 'Create a new content type for something not yet tracked',
|
|
135
|
+
json: {
|
|
136
|
+
schema_version: 1,
|
|
137
|
+
key: 'type.create',
|
|
138
|
+
description: 'Create a recipe content type',
|
|
139
|
+
context: {},
|
|
140
|
+
nodes: [
|
|
141
|
+
{ key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'create_type' } },
|
|
142
|
+
{ key: 'create_type', catalog_node_key: 'create_content_type', configuration: { type_name: 'recipe', description: 'A cooking recipe with ingredients, instructions, prep time, and servings' }, edges: { ok: 'done', already_exists: 'done', error: 'done' } },
|
|
143
|
+
{ key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
description: 'While loop: list tasks, iterate over each one, and use LLM to add a summary to each task body',
|
|
149
|
+
json: {
|
|
150
|
+
schema_version: 1,
|
|
151
|
+
key: 'tasks.summarize',
|
|
152
|
+
description: 'Loop through all tasks and ask the LLM to generate a one-line summary for each',
|
|
153
|
+
context: {},
|
|
154
|
+
nodes: [
|
|
155
|
+
{ key: 'start', catalog_node_key: 'start', configuration: {}, edges: { ok: 'list' } },
|
|
156
|
+
{ key: 'list', catalog_node_key: 'list_tasks', configuration: {}, edges: { ok: 'iterate' } },
|
|
157
|
+
{ key: 'iterate', catalog_node_key: 'array_iterator', configuration: { source_context_path: 'entities', cursor_context_path: '_cursor', spread_fields: 'true' }, edges: { ok: 'summarize', done: 'done' } },
|
|
158
|
+
{ key: 'summarize', catalog_node_key: 'llm_chat', configuration: { capability: 'summarize', prompt: 'Write a one-line summary for a task titled "{title}".', response_context_path: 'summary' }, edges: { ok: 'iterate', error: 'iterate' } },
|
|
159
|
+
{ key: 'done', catalog_node_key: 'stop', configuration: {}, edges: {} },
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
];
|
|
164
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
165
|
+
// CORE: feralChatHeadless — headless pipeline, returns the response string
|
|
166
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
167
|
+
export async function feralChatHeadless(userInput, onStatus, onProcess, onQuestion, onChatId) {
|
|
168
|
+
const status = (s) => onStatus?.(s);
|
|
169
|
+
const chatId = generateChatId();
|
|
170
|
+
const logger = new ChatLogger(chatId);
|
|
171
|
+
// Fire the chat ID callback immediately so callers can display/send it
|
|
172
|
+
onChatId?.(chatId);
|
|
173
|
+
status('Thinking…');
|
|
174
|
+
try {
|
|
175
|
+
return await _feralChatHeadlessInner(userInput, status, onProcess, onQuestion, logger, chatId);
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
await logger.log('error', { message: error instanceof Error ? error.message : String(error) });
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
logger.close();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async function _feralChatHeadlessInner(userInput, status, onProcess, onQuestion, logger, chatId) {
|
|
186
|
+
// ── Bootstrap Feral + load entity types + vault context ────────
|
|
187
|
+
const inMemorySource = new InMemoryProcessSource();
|
|
188
|
+
const [runtime, entityTypes, userName] = await Promise.all([
|
|
189
|
+
bootstrapFeral([inMemorySource]),
|
|
190
|
+
loadEntityTypes().catch(() => []),
|
|
191
|
+
getUserName().catch(() => 'friend'),
|
|
192
|
+
]);
|
|
193
|
+
await logger.log('start', { chatId, userInput });
|
|
194
|
+
// Load vault context (.vault.md chain)
|
|
195
|
+
// Scrub any secrets that may have been accidentally pasted into .vault.md files
|
|
196
|
+
const vaultContext = scrubSecrets(await getVaultContext().catch(() => ''));
|
|
197
|
+
// Build global variables block for the LLM
|
|
198
|
+
const today = new Date().toISOString().split('T')[0];
|
|
199
|
+
const globalsBlock = [
|
|
200
|
+
`- user_name: ${userName}`,
|
|
201
|
+
`- current_date: ${today}`,
|
|
202
|
+
].join('\n');
|
|
203
|
+
const allNodes = runtime.catalog.getAllCatalogNodes();
|
|
204
|
+
// Build catalog summary for LLM
|
|
205
|
+
const catalogSummary = allNodes
|
|
206
|
+
.filter(n => !n.key.startsWith('speak_')) // skip output variants
|
|
207
|
+
.map(n => `- ${n.key}: ${n.description || n.name} [group: ${n.group}]`)
|
|
208
|
+
.join('\n');
|
|
209
|
+
debug('chat', `Catalog has ${allNodes.length} nodes, sending ${catalogSummary.split('\n').length} to LLM`);
|
|
210
|
+
const llm = await getModelForCapability('reason');
|
|
211
|
+
// ── PHASE 1: Process reuse ─────────────────────────────────────────
|
|
212
|
+
// Show the LLM ALL known processes and let it pick one, or choose "custom".
|
|
213
|
+
const allProcesses = runtime.processFactory.getAllProcesses()
|
|
214
|
+
.filter(p => p.key !== 'chat.generated');
|
|
215
|
+
if (allProcesses.length > 0) {
|
|
216
|
+
status('Checking process library…');
|
|
217
|
+
const processSummary = allProcesses
|
|
218
|
+
.map(p => `- ${p.key}: ${p.description}`)
|
|
219
|
+
.join('\n');
|
|
220
|
+
const phase1Response = await llm.chat([{
|
|
221
|
+
role: 'user',
|
|
222
|
+
content: `The user said: "${userInput}"
|
|
223
|
+
|
|
224
|
+
AVAILABLE PROCESSES:
|
|
225
|
+
${processSummary}
|
|
226
|
+
|
|
227
|
+
You can either:
|
|
228
|
+
1. REUSE an existing process if it clearly fits the request
|
|
229
|
+
2. Choose CUSTOM to build a new process from scratch
|
|
230
|
+
|
|
231
|
+
Return JSON:
|
|
232
|
+
If reuse: { "action": "reuse", "process_key": "the.key", "context_overrides": {}, "reasoning": "why" }
|
|
233
|
+
If custom: { "action": "custom", "reasoning": "why no existing process fits" }
|
|
234
|
+
|
|
235
|
+
Return ONLY the JSON object, no markdown fences.`,
|
|
236
|
+
}], {
|
|
237
|
+
systemPrompt: 'You are the process matcher for Phaibel. Determine if an existing reusable process can handle the user\'s request. Be conservative — only reuse if the process clearly fits. Better to build custom than force-fit.',
|
|
238
|
+
temperature: 0.2,
|
|
239
|
+
});
|
|
240
|
+
debug('chat', `Phase 1 response: ${phase1Response}`);
|
|
241
|
+
try {
|
|
242
|
+
const matchResult = parseJsonResponse(phase1Response);
|
|
243
|
+
await logger.log('process_match', { ...matchResult });
|
|
244
|
+
if (matchResult.action === 'reuse' && matchResult.process_key) {
|
|
245
|
+
status('Running matched process…');
|
|
246
|
+
debug('chat', `Matched process: ${matchResult.process_key}`);
|
|
247
|
+
let contextResult;
|
|
248
|
+
let success = true;
|
|
249
|
+
try {
|
|
250
|
+
const ctx = await runtime.runner.run(matchResult.process_key, {
|
|
251
|
+
user_input: userInput,
|
|
252
|
+
...(matchResult.context_overrides || {}),
|
|
253
|
+
...(onQuestion ? { _askQuestion: onQuestion } : {}),
|
|
254
|
+
});
|
|
255
|
+
contextResult = ctx.getAll();
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
debug('chat', `Matched process execution failed: ${error}`);
|
|
259
|
+
contextResult = { _error: error instanceof Error ? error.message : String(error) };
|
|
260
|
+
success = false;
|
|
261
|
+
}
|
|
262
|
+
const filteredResult = Object.entries(contextResult)
|
|
263
|
+
.filter(([k]) => !k.startsWith('_') && k !== 'user_input')
|
|
264
|
+
.reduce((acc, [k, v]) => {
|
|
265
|
+
acc[k] = typeof v === 'string' && v.length > 2000 ? v.slice(0, 2000) + '…' : v;
|
|
266
|
+
return acc;
|
|
267
|
+
}, {});
|
|
268
|
+
const scrubbedResult = scrubSecrets(filteredResult);
|
|
269
|
+
await logger.log('process_result', { iteration: 1, results: scrubbedResult, source: 'reuse' });
|
|
270
|
+
const matchedProcess = allProcesses.find(p => p.key === matchResult.process_key);
|
|
271
|
+
// Synthesize response
|
|
272
|
+
const finalResponse = await synthesizeResponse(llm, userInput, matchResult.reasoning, [scrubbedResult], [], vaultContext);
|
|
273
|
+
await logger.log('response', { response: finalResponse });
|
|
274
|
+
// Fire-and-forget execution log
|
|
275
|
+
writeExecutionLog({
|
|
276
|
+
timestamp: new Date().toISOString(),
|
|
277
|
+
chat_id: chatId,
|
|
278
|
+
user_input: userInput,
|
|
279
|
+
process_source: 'reuse',
|
|
280
|
+
process_key: matchResult.process_key,
|
|
281
|
+
process_json: matchedProcess ? { key: matchedProcess.key, description: matchedProcess.description } : {},
|
|
282
|
+
context_result: scrubbedResult,
|
|
283
|
+
success,
|
|
284
|
+
outcome_summary: finalResponse.slice(0, 500),
|
|
285
|
+
iterations: 1,
|
|
286
|
+
}).catch(err => debug('chat', `Execution log write failed: ${err}`));
|
|
287
|
+
return finalResponse;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
debug('chat', 'Phase 1 parse failed, falling through to custom pipeline');
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// ── PHASE 2: Custom process pipeline ─────────────────────────────
|
|
295
|
+
// Only runs if Phase 1 chose "custom", no processes exist, or parse failed.
|
|
296
|
+
// ── STEP 1: Select catalog nodes ─────────────────────────────────
|
|
297
|
+
status('Selecting capabilities…');
|
|
298
|
+
const step1Response = await llm.chat([{
|
|
299
|
+
role: 'user',
|
|
300
|
+
content: `The user said: "${userInput}"
|
|
301
|
+
|
|
302
|
+
GLOBAL VARIABLES:
|
|
303
|
+
${globalsBlock}
|
|
304
|
+
|
|
305
|
+
${vaultContext ? `VAULT CONTEXT (from .vault.md files — project goals, notes, and preferences):\n${vaultContext}\n` : ''}ENTITY TYPES:
|
|
306
|
+
The agent manages these entity types. When the user mentions something that maps to an entity, prefer creating it:
|
|
307
|
+
${entityTypes.map(t => {
|
|
308
|
+
const fieldDesc = t.fields.length > 0
|
|
309
|
+
? ` Fields: ${t.fields.map(f => `${f.key}${f.type === 'enum' && f.values ? ` (${f.values.join('|')})` : ''}`).join(', ')}.`
|
|
310
|
+
: '';
|
|
311
|
+
return `- ${t.name} (plural: ${t.plural})${t.description ? ` — ${t.description}` : ''}.${fieldDesc}`;
|
|
312
|
+
}).join('\n')}
|
|
313
|
+
|
|
314
|
+
Each entity type has create_*, list_*, find_*, update_*, delete_*, complete_* catalog nodes, plus set_${'{type}'}_{field} nodes for each field.
|
|
315
|
+
For example: create_task, list_tasks, find_note, set_task_status, complete_task, etc.
|
|
316
|
+
|
|
317
|
+
IMPORTANT CAPABILITIES:
|
|
318
|
+
- To filter entities by tag, use the "tags" config on list_* or search_* nodes (comma-separated tag names).
|
|
319
|
+
- To mark an entity as done/complete, use the complete_* node (e.g. complete_task).
|
|
320
|
+
- To create a NEW content type the user mentions (e.g. "recipe", "habit", "bookmark"), use "create_content_type".
|
|
321
|
+
- To link two entities together (e.g. a task relates to a goal), use "link_entities".
|
|
322
|
+
- To add tags to an existing entity, use the add_tag_* nodes (e.g. add_tag_task).
|
|
323
|
+
|
|
324
|
+
When the user's request implies creating entities, ALWAYS select the appropriate create_* nodes.
|
|
325
|
+
CRITICAL: Match the entity type precisely. An "event" is NOT a "task" — use create_event for events/appointments/meetings and create_task for todos/action items. Each entity type exists for a reason; never substitute one for another.
|
|
326
|
+
When the user mentions multiple entities, select multiple create_* nodes.
|
|
327
|
+
When the user refers to a content type that doesn't exist yet, select "create_content_type".
|
|
328
|
+
|
|
329
|
+
Here are all available catalog nodes in the Feral process engine. Each node performs a specific action:
|
|
330
|
+
|
|
331
|
+
${catalogSummary}
|
|
332
|
+
|
|
333
|
+
IMPORTANT RULES:
|
|
334
|
+
- Every process MUST start with "start" and end with "stop"
|
|
335
|
+
- Always include "start" and "stop" in your selection
|
|
336
|
+
- The "llm_chat" node sends a prompt to an LLM. It supports {context_key} interpolation in prompts
|
|
337
|
+
- Only select nodes that are directly useful for fulfilling the user's request
|
|
338
|
+
- Prefer entity nodes (list_*, find_*, create_*, complete_*) for data operations — act, don't just advise
|
|
339
|
+
- Prefer system nodes (get_time, get_date, etc.) for system information
|
|
340
|
+
- When the user wants to CREATE something, use the create_* nodes — don't just use llm_chat to give advice
|
|
341
|
+
- When the user wants to mark something as done/complete, use complete_* nodes (e.g. complete_task)
|
|
342
|
+
- When the user asks about entities by tag, use list_* or search_* with the "tags" config
|
|
343
|
+
- When the user mentions a content type that doesn't exist, select "create_content_type"
|
|
344
|
+
- When the user wants to relate or connect entities, select "link_entities"
|
|
345
|
+
- PROACTIVELY link related entities when the context makes the connection clear (e.g. user says "add a task for my goal X" → create task AND link it to the goal)
|
|
346
|
+
- Consider the "About You" section in vault context — use it to personalise responses and infer intent
|
|
347
|
+
|
|
348
|
+
Return a JSON object with this exact structure:
|
|
349
|
+
{
|
|
350
|
+
"reasoning": "Why these nodes were selected",
|
|
351
|
+
"nodes": ["start", "stop", "node_key_1", "node_key_2"]
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
Return ONLY the JSON object, no markdown fences.`,
|
|
355
|
+
}], {
|
|
356
|
+
systemPrompt: 'You are the reasoning engine for Phaibel, a Personal Digital Agent. It manages a vault of linked content (tasks, events, notes, goals, people, etc.) stored as Markdown files. Content can be linked in a knowledge graph. Your job is to select the minimal set of catalog nodes to fulfill the user\'s request. Always include "start" and "stop". Prefer creating concrete entities over giving advice. Look for opportunities to link related content.',
|
|
357
|
+
temperature: 0.3,
|
|
358
|
+
});
|
|
359
|
+
debug('chat', `Step 1 response: ${step1Response}`);
|
|
360
|
+
let nodeSelection;
|
|
361
|
+
try {
|
|
362
|
+
nodeSelection = parseJsonResponse(step1Response);
|
|
363
|
+
}
|
|
364
|
+
catch (err) {
|
|
365
|
+
debug('chat', `Step 1 raw response: ${step1Response}`);
|
|
366
|
+
throw new Error(`Failed to parse node selection from LLM: ${err instanceof Error ? err.message : err}`);
|
|
367
|
+
}
|
|
368
|
+
await logger.log('node_selection', { reasoning: nodeSelection.reasoning, nodes: nodeSelection.nodes });
|
|
369
|
+
// Ensure start/stop are included
|
|
370
|
+
if (!nodeSelection.nodes.includes('start'))
|
|
371
|
+
nodeSelection.nodes.unshift('start');
|
|
372
|
+
if (!nodeSelection.nodes.includes('stop'))
|
|
373
|
+
nodeSelection.nodes.push('stop');
|
|
374
|
+
// Gather selected node details + their config descriptions
|
|
375
|
+
const selectedNodes = nodeSelection.nodes
|
|
376
|
+
.map(key => {
|
|
377
|
+
try {
|
|
378
|
+
return runtime.catalog.getCatalogNode(key);
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
})
|
|
384
|
+
.filter(Boolean);
|
|
385
|
+
const selectedNodeDetails = selectedNodes
|
|
386
|
+
.map(n => {
|
|
387
|
+
const config = Object.keys(n.configuration).length > 0
|
|
388
|
+
? ` config: ${JSON.stringify(n.configuration)}`
|
|
389
|
+
: '';
|
|
390
|
+
return `- ${n.key} (${n.group}): ${n.description || n.name}${config}`;
|
|
391
|
+
})
|
|
392
|
+
.join('\n');
|
|
393
|
+
// Get config descriptions for the selected node codes
|
|
394
|
+
const nodeCodeDetails = [];
|
|
395
|
+
for (const n of selectedNodes) {
|
|
396
|
+
if (!n)
|
|
397
|
+
continue;
|
|
398
|
+
try {
|
|
399
|
+
const nodeCode = runtime.nodeCodeFactory.getNodeCode(n.nodeCodeKey);
|
|
400
|
+
const Ctor = nodeCode.constructor;
|
|
401
|
+
const Ctor2 = nodeCode.constructor;
|
|
402
|
+
// Filter out secret config keys — they should never appear in LLM prompts
|
|
403
|
+
const configs = (Ctor.configDescriptions ?? []).filter(c => !c.isSecret);
|
|
404
|
+
const results = Ctor2.resultDescriptions ?? [];
|
|
405
|
+
if (configs.length > 0 || results.length > 0) {
|
|
406
|
+
const configStr = configs.map(c => ` - ${c.key} (${c.type}${c.isOptional ? ', optional' : ''}${c.default != null ? `, default: ${JSON.stringify(c.default)}` : ''}): ${c.description}`).join('\n');
|
|
407
|
+
const resultStr = results.map(r => ` → "${r.status}": ${r.description}`).join('\n');
|
|
408
|
+
nodeCodeDetails.push(`${n.key} (nodeCode: ${n.nodeCodeKey}):\n Configuration:\n${configStr}\n Results (edge keys):\n${resultStr}`);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
catch {
|
|
412
|
+
// Skip if node code not found
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
// ── STEP 1.5: Information gathering (skipped in headless mode) ──
|
|
416
|
+
// In headless mode we don't prompt for follow-ups — proceed with what we have
|
|
417
|
+
const gatheredInfoStr = '';
|
|
418
|
+
// ── Gather existing entity titles for nodes that reference them ──
|
|
419
|
+
// When find_*, link_*, update_*, complete_*, set_* nodes are selected,
|
|
420
|
+
// the LLM needs to know exact titles to avoid hallucinating them.
|
|
421
|
+
const refNodePattern = /^(find_|link_|update_|complete_|set_|add_tag_|search_)/;
|
|
422
|
+
const referencedTypes = new Set();
|
|
423
|
+
for (const key of nodeSelection.nodes) {
|
|
424
|
+
if (refNodePattern.test(key)) {
|
|
425
|
+
// Extract entity type from node key (e.g. "find_task" → "task", "link_entities" → all)
|
|
426
|
+
const parts = key.split('_');
|
|
427
|
+
if (key === 'link_entities') {
|
|
428
|
+
// link_entities can reference any type — add all
|
|
429
|
+
for (const et of entityTypes)
|
|
430
|
+
referencedTypes.add(et.name);
|
|
431
|
+
}
|
|
432
|
+
else if (parts.length >= 2) {
|
|
433
|
+
const typeName = parts.slice(1).join('_');
|
|
434
|
+
// Validate it's a known entity type (or plural form)
|
|
435
|
+
const match = entityTypes.find(et => et.name === typeName || et.plural === typeName);
|
|
436
|
+
if (match)
|
|
437
|
+
referencedTypes.add(match.name);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
let existingEntitiesBlock = '';
|
|
442
|
+
if (referencedTypes.size > 0) {
|
|
443
|
+
const blocks = [];
|
|
444
|
+
for (const typeName of referencedTypes) {
|
|
445
|
+
try {
|
|
446
|
+
const entities = await listEntities(typeName);
|
|
447
|
+
if (entities.length > 0) {
|
|
448
|
+
const titles = entities
|
|
449
|
+
.slice(0, 50)
|
|
450
|
+
.map(e => ` - "${e.meta.title || e.meta.id}"`)
|
|
451
|
+
.join('\n');
|
|
452
|
+
blocks.push(`${typeName}:\n${titles}`);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
catch {
|
|
456
|
+
// Entity type dir may not exist
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
if (blocks.length > 0) {
|
|
460
|
+
existingEntitiesBlock = `\nEXISTING ENTITIES IN VAULT (use these exact titles when referencing existing entities):\n${blocks.join('\n')}\n`;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
// ── ORCHESTRATION LOOP ────────────────────────────────────────────
|
|
464
|
+
// Iteratively: generate process → run → check completion → repeat
|
|
465
|
+
const MAX_ITERATIONS = 3;
|
|
466
|
+
const allResults = [];
|
|
467
|
+
const allReasonings = [];
|
|
468
|
+
const allProcessKeys = [];
|
|
469
|
+
let remainingWork = userInput;
|
|
470
|
+
const examplesStr = EXAMPLE_PROCESSES.map((ex, i) => `Example ${i + 1}: ${ex.description}\n${JSON.stringify(ex.json, null, 2)}`).join('\n\n');
|
|
471
|
+
for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {
|
|
472
|
+
// ── STEP 2: Generate process ─────────────────────────────────
|
|
473
|
+
status(`Designing process${iteration > 0 ? ` (step ${iteration + 1})` : ''}…`);
|
|
474
|
+
const previousResultsStr = allResults.length > 0
|
|
475
|
+
? `\n\nRESULTS FROM PREVIOUS STEPS:\n${JSON.stringify(allResults, null, 2)}`
|
|
476
|
+
: '';
|
|
477
|
+
const step2Response = await llm.chat([{
|
|
478
|
+
role: 'user',
|
|
479
|
+
content: `Build a Feral process to handle: "${remainingWork}"
|
|
480
|
+
${gatheredInfoStr}${previousResultsStr}${existingEntitiesBlock}
|
|
481
|
+
GLOBAL VARIABLES:
|
|
482
|
+
${globalsBlock}
|
|
483
|
+
|
|
484
|
+
${vaultContext ? `VAULT CONTEXT (from .vault.md files — project goals, notes, and preferences):\n${vaultContext}\n` : ''}SELECTED CATALOG NODES (you must only use nodes from this list):
|
|
485
|
+
${selectedNodeDetails}
|
|
486
|
+
|
|
487
|
+
NODE CONFIGURATION DETAILS:
|
|
488
|
+
${nodeCodeDetails.join('\n\n')}
|
|
489
|
+
|
|
490
|
+
PROCESS FORMAT RULES:
|
|
491
|
+
1. schema_version MUST be 1
|
|
492
|
+
2. key should be "chat.generated"
|
|
493
|
+
3. First node MUST have key "start" with catalog_node_key "start"
|
|
494
|
+
4. Last node MUST have key "done" with catalog_node_key "stop" and empty edges {}
|
|
495
|
+
5. "edges" maps result status strings to the next node key
|
|
496
|
+
6. Most nodes produce "ok" and "error" results
|
|
497
|
+
7. Use {context_key} syntax in configuration values to interpolate context values
|
|
498
|
+
8. The context starts with: user_input = "${userInput}"
|
|
499
|
+
9. Keep the process as simple as possible — prefer fewer nodes
|
|
500
|
+
10. For entity creation, ALWAYS set entity_title and entity_body in the configuration with concrete values
|
|
501
|
+
11. Use the vault context to inform entity content — respect project goals and conventions
|
|
502
|
+
12. To filter by tag, set "tags" in configuration (comma-separated), e.g. { "tags": "year-of-the-house" }
|
|
503
|
+
13. To link entities, use link_entities with source_entity_type, source_entity_title, target_entity_type, target_entity_title, and label
|
|
504
|
+
14. To complete/finish an entity, use the complete_* catalog node (e.g. complete_task)
|
|
505
|
+
15. ONLY use configuration keys that appear in the NODE CONFIGURATION DETAILS above — do not invent keys
|
|
506
|
+
16. When referencing existing entities (find_*, link_*, update_*, complete_*, set_*), use EXACT titles from the EXISTING ENTITIES list — do NOT guess or paraphrase entity titles
|
|
507
|
+
17. CRITICAL: Use the correct entity type catalog node. An event (appointment, meeting, scheduled activity) MUST use create_event, NOT create_task. A task (action item, todo) MUST use create_task, NOT create_event. Never substitute one entity type for another.
|
|
508
|
+
|
|
509
|
+
EXAMPLE PROCESSES:
|
|
510
|
+
${examplesStr}
|
|
511
|
+
|
|
512
|
+
Return a JSON object with this exact structure:
|
|
513
|
+
{
|
|
514
|
+
"reasoning": "One short sentence",
|
|
515
|
+
"process": { ... the process JSON ... }
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
IMPORTANT: Keep "reasoning" to ONE sentence. The process JSON is what matters.
|
|
519
|
+
|
|
520
|
+
Return ONLY the JSON object, no markdown fences.`,
|
|
521
|
+
}], {
|
|
522
|
+
systemPrompt: 'You are the process designer for Phaibel, a Personal Digital Agent that manages a vault of linked content. Generate a valid process JSON that solves the user\'s request using the provided catalog nodes. The process executes immediately — create real entities, set real values, link real content. Be precise with catalog_node_key values — they must match exactly. Prefer action over advice.',
|
|
523
|
+
temperature: 0.3,
|
|
524
|
+
maxTokens: 16384,
|
|
525
|
+
});
|
|
526
|
+
debug('chat', `Step 2 response (iteration ${iteration + 1}): ${step2Response}`);
|
|
527
|
+
let processDesign;
|
|
528
|
+
try {
|
|
529
|
+
processDesign = parseJsonResponse(step2Response);
|
|
530
|
+
}
|
|
531
|
+
catch (err) {
|
|
532
|
+
debug('chat', `Step 2 raw response: ${step2Response}`);
|
|
533
|
+
throw new Error(`Failed to parse process design from LLM: ${err instanceof Error ? err.message : err}`);
|
|
534
|
+
}
|
|
535
|
+
allReasonings.push(processDesign.reasoning);
|
|
536
|
+
await logger.log('process_design', { iteration: iteration + 1, reasoning: processDesign.reasoning, process: processDesign.process });
|
|
537
|
+
// Emit process JSON for visualization
|
|
538
|
+
onProcess?.(processDesign.process);
|
|
539
|
+
// Detect duplicate process — if the LLM generated the same process
|
|
540
|
+
// as a previous iteration, it's looping and we should stop
|
|
541
|
+
const processFingerprint = JSON.stringify(processDesign.process);
|
|
542
|
+
if (allProcessKeys.includes(processFingerprint)) {
|
|
543
|
+
debug('chat', `Duplicate process detected at iteration ${iteration + 1}, breaking loop`);
|
|
544
|
+
break;
|
|
545
|
+
}
|
|
546
|
+
allProcessKeys.push(processFingerprint);
|
|
547
|
+
// ── STEP 3: Execute the generated process ────────────────────
|
|
548
|
+
status(`Running process${iteration > 0 ? ` (step ${iteration + 1})` : ''}…`);
|
|
549
|
+
let processJsonStr;
|
|
550
|
+
try {
|
|
551
|
+
processJsonStr = JSON.stringify(processDesign.process);
|
|
552
|
+
}
|
|
553
|
+
catch {
|
|
554
|
+
throw new Error('Generated process is not valid JSON');
|
|
555
|
+
}
|
|
556
|
+
const process = hydrateProcessFromString(processJsonStr);
|
|
557
|
+
inMemorySource.add(process);
|
|
558
|
+
let contextResult;
|
|
559
|
+
try {
|
|
560
|
+
const ctx = await runtime.runner.run(process.key, {
|
|
561
|
+
user_input: userInput,
|
|
562
|
+
...(onQuestion ? { _askQuestion: onQuestion } : {}),
|
|
563
|
+
});
|
|
564
|
+
contextResult = ctx.getAll();
|
|
565
|
+
}
|
|
566
|
+
catch (error) {
|
|
567
|
+
debug('chat', `Process execution failed: ${error instanceof Error ? error.stack ?? error.message : error}`);
|
|
568
|
+
contextResult = { _error: error instanceof Error ? error.message : String(error) };
|
|
569
|
+
}
|
|
570
|
+
// Filter internal keys and scrub any secrets from context results
|
|
571
|
+
// Keep 'error' and '_error' visible so completion checker knows about failures
|
|
572
|
+
const iterationResult = Object.entries(contextResult)
|
|
573
|
+
.filter(([k]) => k === '_error' || (!k.startsWith('_') && k !== 'user_input'))
|
|
574
|
+
.reduce((acc, [k, v]) => {
|
|
575
|
+
acc[k] = typeof v === 'string' && v.length > 2000 ? v.slice(0, 2000) + '…' : v;
|
|
576
|
+
return acc;
|
|
577
|
+
}, {});
|
|
578
|
+
allResults.push(scrubSecrets(iterationResult));
|
|
579
|
+
await logger.log('process_result', { iteration: iteration + 1, results: iterationResult });
|
|
580
|
+
// ── STEP 4: Check completion ──────────────────────────────────
|
|
581
|
+
if (iteration < MAX_ITERATIONS - 1) {
|
|
582
|
+
status('Checking if task is complete…');
|
|
583
|
+
const completionResponse = await llm.chat([{
|
|
584
|
+
role: 'user',
|
|
585
|
+
content: `The user originally said: "${userInput}"
|
|
586
|
+
|
|
587
|
+
We have completed ${iteration + 1} step(s) so far.
|
|
588
|
+
|
|
589
|
+
Step reasoning: ${allReasonings.join(' → ')}
|
|
590
|
+
|
|
591
|
+
Results from all steps:
|
|
592
|
+
${JSON.stringify(allResults, null, 2)}
|
|
593
|
+
|
|
594
|
+
Is the user's ENTIRE request fulfilled? Consider:
|
|
595
|
+
- Did we create ALL entities the user mentioned?
|
|
596
|
+
- Did we perform ALL actions the user asked for?
|
|
597
|
+
- Are there remaining items that still need to be done?
|
|
598
|
+
|
|
599
|
+
Return a JSON object with EXACTLY this structure:
|
|
600
|
+
If COMPLETE: { "status": "complete" }
|
|
601
|
+
If MORE WORK NEEDED: { "status": "more_work", "remaining": "Description of what still needs to be done" }
|
|
602
|
+
|
|
603
|
+
Return ONLY the JSON object, no markdown fences.`,
|
|
604
|
+
}], {
|
|
605
|
+
systemPrompt: 'You are a task completion checker for Phaibel, a Personal Digital Agent. Be thorough — if the user asked for multiple things (e.g., create a goal AND avoid pizza), make sure ALL parts have been addressed. Also check: should any entities be linked together? Was anything implied but not explicitly created?',
|
|
606
|
+
temperature: 0.2,
|
|
607
|
+
});
|
|
608
|
+
debug('chat', `Completion check (iteration ${iteration + 1}): ${completionResponse}`);
|
|
609
|
+
let completion;
|
|
610
|
+
try {
|
|
611
|
+
completion = parseJsonResponse(completionResponse);
|
|
612
|
+
}
|
|
613
|
+
catch {
|
|
614
|
+
debug('chat', 'Could not parse completion response, assuming complete');
|
|
615
|
+
break;
|
|
616
|
+
}
|
|
617
|
+
await logger.log('completion_check', { iteration: iteration + 1, status: completion.status, remaining: completion.remaining || null });
|
|
618
|
+
if (completion.status === 'complete') {
|
|
619
|
+
debug('chat', 'Task complete, exiting orchestration loop');
|
|
620
|
+
break;
|
|
621
|
+
}
|
|
622
|
+
// Update the remaining work for the next iteration
|
|
623
|
+
remainingWork = completion.remaining || userInput;
|
|
624
|
+
debug('chat', `More work needed: ${remainingWork}`);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
// ── STEP 5: Synthesize response ──────────────────────────────────
|
|
628
|
+
status('Composing response…');
|
|
629
|
+
const nodesUsed = selectedNodes
|
|
630
|
+
.filter(Boolean)
|
|
631
|
+
.map(n => `- ${n.key}: ${n.description || n.name}`);
|
|
632
|
+
const finalResponse = await synthesizeResponse(llm, userInput, nodeSelection.reasoning, allResults, nodesUsed, vaultContext);
|
|
633
|
+
await logger.log('response', { response: finalResponse });
|
|
634
|
+
// Fire-and-forget execution log
|
|
635
|
+
const lastProcessDesign = allReasonings.length > 0
|
|
636
|
+
? { reasoning: allReasonings, iterations: allReasonings.length }
|
|
637
|
+
: {};
|
|
638
|
+
writeExecutionLog({
|
|
639
|
+
timestamp: new Date().toISOString(),
|
|
640
|
+
chat_id: chatId,
|
|
641
|
+
user_input: userInput,
|
|
642
|
+
process_source: 'custom',
|
|
643
|
+
process_key: 'chat.generated',
|
|
644
|
+
process_json: lastProcessDesign,
|
|
645
|
+
context_result: allResults.length > 0 ? allResults[allResults.length - 1] : {},
|
|
646
|
+
success: !allResults.some(r => r._error),
|
|
647
|
+
outcome_summary: finalResponse.slice(0, 500),
|
|
648
|
+
iterations: allReasonings.length,
|
|
649
|
+
}).catch(err => debug('chat', `Execution log write failed: ${err}`));
|
|
650
|
+
return finalResponse;
|
|
651
|
+
}
|
|
652
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
653
|
+
// SYNTHESIS HELPER
|
|
654
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
655
|
+
async function synthesizeResponse(llm, userInput, reasoning, results, nodesUsed, vaultContext) {
|
|
656
|
+
const synthesisPrompt = `The user said: "${userInput}"
|
|
657
|
+
|
|
658
|
+
WHAT WAS DONE:
|
|
659
|
+
Reasoning: ${reasoning}
|
|
660
|
+
|
|
661
|
+
${results.length} process step(s) executed.
|
|
662
|
+
|
|
663
|
+
${nodesUsed.length > 0 ? `Nodes used:\n${nodesUsed.join('\n')}\n` : ''}Results:
|
|
664
|
+
${JSON.stringify(results, null, 2)}
|
|
665
|
+
|
|
666
|
+
${results.some(r => r._error) ? `Note: Some steps encountered errors.` : ''}
|
|
667
|
+
|
|
668
|
+
RESPONSE GUIDELINES:
|
|
669
|
+
- Summarise what was done concretely (created X, linked Y to Z, completed W)
|
|
670
|
+
- If entities were created or updated, name them so the user can find them
|
|
671
|
+
- If entities were linked, mention the relationship
|
|
672
|
+
- Keep it concise — a few sentences, not paragraphs
|
|
673
|
+
- If there were errors, acknowledge honestly and suggest alternatives
|
|
674
|
+
- If the results suggest follow-up actions, briefly mention them`;
|
|
675
|
+
const response = await llm.chat([{ role: 'user', content: synthesisPrompt }], {
|
|
676
|
+
systemPrompt: createSystemPrompt(vaultContext || ''),
|
|
677
|
+
temperature: 0.7,
|
|
678
|
+
});
|
|
679
|
+
return response.trim();
|
|
680
|
+
}
|
|
681
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
682
|
+
// CORE: feralChat — CLI wrapper with ora spinner
|
|
683
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
684
|
+
export async function feralChat(userInput) {
|
|
685
|
+
const spinner = ora({ text: chalk.dim('Thinking…'), color: 'cyan' }).start();
|
|
686
|
+
try {
|
|
687
|
+
const response = await feralChatHeadless(userInput, (s) => { spinner.text = chalk.dim(s); }, undefined, undefined, (chatId) => { spinner.text = chalk.dim(`[${chatId}] Thinking…`); });
|
|
688
|
+
spinner.stop();
|
|
689
|
+
console.log(chalk.cyan(`\n ${response.split('\n').join('\n ')}\n`));
|
|
690
|
+
}
|
|
691
|
+
catch (error) {
|
|
692
|
+
spinner.stop();
|
|
693
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
694
|
+
debug('chat', `Autonomous chat failed: ${msg}`);
|
|
695
|
+
if (msg.includes('credit balance') || msg.includes('too low') || msg.includes('billing')) {
|
|
696
|
+
console.log(chalk.red('\n The AI provider is out of credits.'));
|
|
697
|
+
console.log(chalk.dim(' Top up at: https://console.anthropic.com/settings/billing\n'));
|
|
698
|
+
}
|
|
699
|
+
else {
|
|
700
|
+
console.log(chalk.yellow(`\n Hmm, something went wrong: ${msg}`));
|
|
701
|
+
console.log(chalk.dim(' Try rephrasing, or use a specific command like "todo", "note", "today".\n'));
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
706
|
+
// HELPERS
|
|
707
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
708
|
+
// Patterns that look like API keys / tokens — redact before sending to LLM
|
|
709
|
+
const SECRET_PATTERNS = [
|
|
710
|
+
/sk-[a-zA-Z0-9_-]{20,}/g, // OpenAI keys
|
|
711
|
+
/sk-ant-[a-zA-Z0-9_-]{20,}/g, // Anthropic keys
|
|
712
|
+
/ghp_[a-zA-Z0-9]{36,}/g, // GitHub PATs
|
|
713
|
+
/ghu_[a-zA-Z0-9]{36,}/g, // GitHub user tokens
|
|
714
|
+
/xox[bsarp]-[a-zA-Z0-9\-]{10,}/g, // Slack tokens
|
|
715
|
+
];
|
|
716
|
+
const SECRET_KEYS = new Set([
|
|
717
|
+
'apiKey', 'api_key', 'apikey',
|
|
718
|
+
'secret', 'token', 'password',
|
|
719
|
+
'authorization', 'credential',
|
|
720
|
+
]);
|
|
721
|
+
/**
|
|
722
|
+
* Deep-scrub secret-shaped values from an object before it's sent to an LLM.
|
|
723
|
+
*/
|
|
724
|
+
function scrubSecrets(obj) {
|
|
725
|
+
if (typeof obj === 'string') {
|
|
726
|
+
let s = obj;
|
|
727
|
+
for (const pat of SECRET_PATTERNS) {
|
|
728
|
+
s = s.replace(pat, '[REDACTED]');
|
|
729
|
+
}
|
|
730
|
+
return s;
|
|
731
|
+
}
|
|
732
|
+
if (Array.isArray(obj)) {
|
|
733
|
+
return obj.map(scrubSecrets);
|
|
734
|
+
}
|
|
735
|
+
if (obj && typeof obj === 'object') {
|
|
736
|
+
const out = {};
|
|
737
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
738
|
+
if (SECRET_KEYS.has(k.toLowerCase())) {
|
|
739
|
+
out[k] = '[REDACTED]';
|
|
740
|
+
}
|
|
741
|
+
else {
|
|
742
|
+
out[k] = scrubSecrets(v);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
return out;
|
|
746
|
+
}
|
|
747
|
+
return obj;
|
|
748
|
+
}
|
|
749
|
+
/**
|
|
750
|
+
* Ask a follow-up question using inquirer.
|
|
751
|
+
* Inquirer manages its own stdin/stdout lifecycle, avoiding conflicts
|
|
752
|
+
* with the shell's paused readline interface.
|
|
753
|
+
*/
|
|
754
|
+
async function askFollowUp(question) {
|
|
755
|
+
const { answer } = await inquirer.prompt([{
|
|
756
|
+
type: 'input',
|
|
757
|
+
name: 'answer',
|
|
758
|
+
message: question,
|
|
759
|
+
}]);
|
|
760
|
+
return answer;
|
|
761
|
+
}
|
|
762
|
+
//# sourceMappingURL=chat.js.map
|