b9a4318ef8
reorg: tangle to XDG, remove stale lisp files, fix tui input
...
- Changed all 50 org file :tangle targets from ../lisp/ to
~/.local/share/passepartout/lisp/ (XDG data dir)
- Removed 49 generated .lisp files from project lisp/ directory
- Removed tests/system-integration-tests.lisp (generated)
- Removed lisp/*.fasl (compiled, stale)
- Updated core-manifest.org to tangle .asd to XDG root
- Remapped quicklisp symlink: local-projects/passepartout → XDG
TUI fixes in channel-tui-main.org:
- Removed with-raw-terminal (stty raw breaks fd 0 reads in this SBCL)
- Use cat subprocess + pipe for keyboard input (via :input :interactive)
- Blocking read-char on pipe with with-timeout 0.1s for daemon processing
- Key events queued via drain-queue alongside daemon messages
- Full dialog key routing (Escape, Up/Down, Enter, filters, Backspace)
- SIGWINCH resize handling
- Post-handshake backend-size re-query
- Daemon version in status bar (was v0.5.0 hardcoded)
- Handshake version stored in state, no add-msg
- :daemon-version and :size-queried in state plist
- view-status uses draw-rect for background
- Test section gated with #+passepartout-tests
2026-05-14 12:34:06 -04:00
c227877302
v0.8.3: TUI stabilization — box calls, package fixes, sandbox, configure
...
Bug fixes:
- Fix box() calls: set color-pair before box, pass ACS default chtype integers
- Fix markdown functions: move to passepartout.channel-tui package where
Croatoan is imported; use add-attributes/remove-attributes instead of
:bold/:underline kwargs to add-string; call theme-color in gate-trace-lines
to convert theme keys to Croatoan colors
- Fix sandbox: remove dex:get/dex:post from restricted symbols
(blocked neuro-provider from loading)
- Export *log-lock* from passepartout (was unbound in jailed skill packages)
- Fix configure: always deploy to XDG, skip cp when source==dest
- Fix bash crash handler format string (~~ escaping)
- Revert test reorder in 28 files (caused package leakage in skill loader)
Design cleanup:
- Extract tui-run-screen from tui-main for clean separation
- Remove inject-stimulus alias
- Merge *backend-registry* into *probabilistic-backends*
- Fix read-framed-message whitespace DoS (4096-iteration max)
- Add *read-eval* nil to dispatcher-approvals-process read-from-string
2026-05-13 09:17:48 -04:00
8fd56dece3
v0.8.2: cleanup + prose + structure + decomposition + budget + errors
...
Phase 1 — dedup + hardening (~9 items):
- Remove duplicate *skill-registry* defvar from core-skills
- Merge *backend-registry* into *probabilistic-backends*, delete backend-register
- Remove inject-stimulus alias, standardize on stimulus-inject
- Add pre-eval sandbox (skill-source-scan) blocks restricted symbols before eval
- Remove dead plist-get function; remove duplicate json-alist-to-plist export
- Fix read-framed-message whitespace DoS (4096-iteration max)
- Add *read-eval* nil to dispatcher-approvals-process read-from-string (RCE)
- Add test-op to ASDF; update .asd version 0.4.3→0.7.2
Phase 2 — prose + contracts + reorder:
- Split ROADMAP: 2623→1089 lines (TODO only), CHANGELOG: 260→1528 lines (full DONE history, 14 versions reverse chron)
- Add Contracts + Overview to 6 channel files + embedding-native + programming-standards + symbolic-scope
- Reorder 28 .org files: Contract → Test Suite → Implementation (TDD order)
- Add 7-phase inline prose to think() in core-reason
- Expand USER_MANUAL: 183→461 lines (10 new sections)
Phase 3 — decomposition + export organization:
- Decompose think() into think-assemble-prompt, think-call-llm, think-parse-response orchestrator
- Organize 188 exports into 16 grouped sections by module
Phase 4 — budget enforcement + error protocol:
- Per-session budget enforcement (SESSION_BUDGET_USD env var, budget-exhausted-p, guard in think-call-llm)
- Error condition hierarchy (6 conditions: pipeline-error, llm-error, gate-error, budget-error, protocol-error)
- Restarts in loop-process: skip-signal, use-fallback, abort-pipeline
2026-05-13 09:17:48 -04:00
029a32ef64
v0.7.2: session rewind + context debugging — TDD
...
Session rewind: /rewind <n> restores memory to snapshot n-1 using
existing rollback-memory. /sessions lists up to 10 snapshots with
timestamps and object counts. Auto-snapshot at turn boundaries in
think() via fboundp-guarded snapshot-memory call.
Context debugging: /context why <id> shows memory object type, scope,
version. /context dropped placeholder (deferred to v0.8.0).
- core-reason: auto-snapshot in think() + 1 test
- channel-tui-main: /rewind, /sessions, /context why, /context dropped
+ 3 tests
- Core: 85/85 TUI Main: 88/89 (1 pre-existing flake)
2026-05-08 19:05:47 -04:00
11c43f76fa
v0.7.2: Merkle provenance audit + RCE flake fix — TDD
...
audit-node exposes memory-object lineage (type, hash, scope, version).
/audit <node-id> TUI command. /audit verify deferred.
Fixed RCE test flake: assemble-config-section used getf on
non-plist cascade entries. Wrapped in handler-case. Also fixed
~/ format directive escape. Core reason: 35/35. Core: 81/81.
2026-05-08 18:03:24 -04:00
e3a6573542
v0.7.2: self-help (/why) + CONFIG injection — TDD
...
- CONFIG section in system prompt: providers, context window, gate count,
rules learned, docs path
- /why TUI command: shows most recent gate trace from message history
- assemble-config-section reads live state at each think() call
- Core: 75/76 TUI Main: 77/78 (1 pre-existing RCE test flake)
2026-05-08 17:06:16 -04:00
ca44136a55
v0.7.2: agent identity injection (CONFIG section) — TDD
...
Live config section injected into system prompt between time and
IDENTITY. assemble-config-section reads *provider-cascade*,
tokenizer-context-limit, gate count, and *hitl-pending* at each
think() call. fboundp-guarded. Tested.
- core-reason: assemble-config-section fn, config-section binding,
injected into all 3 prompt assembly paths
- Reason tests: +4 checks (Passepartout, version, gates)
2026-05-08 16:48:10 -04:00
bec894ca4f
handoff: symbolic identity file — TDD
...
Agent identity loaded from ~/memex/IDENTITY.org at skill startup.
Injected into system prompt IDENTITY section between assistant name
and reflection feedback. fboundp-guarded in think().
- symbolic-identity.lisp: load-identity-file, agent-identity (skill)
- token-economics: prompt-prefix-cached +identity-content param
- core-reason: identity-content binding in think(), both code paths
- Identity: 6/6 Token-econ: 10/10 new Core: 65/65
TUI View: 28/28 TUI Main: 70/70 Total: 179/179
2026-05-08 15:14:44 -04:00
e3e62140ff
v0.7.1: Streaming + Markdown + URLs + Interrupt — TDD
...
Deploy (Gitea) / deploy (push) Failing after 2s
Stream-chunk protocol: SSE streaming via provider-openai-stream,
cascade-stream with fboundp guard in think(). TUI renders live.
Stream interrupt: Esc during streaming marks [interrupted], finalizes msg.
SSE cancel infrastructure: *stream-cancel* check in read loop.
Markdown inline: **bold**, *italic*, `code` via parse-markdown-spans.
Code blocks: parse-markdown-blocks + syntax-highlight (keywords/strings/fns).
URL detection + Tab-to-activate: https:// URLs in dim, Tab opens.
Watchdog: 30s stall detection via Dexador read-timeout.
[streaming] indicator in status bar.
Pre-existing TUI test fixes (7): first→aref, nil→zerop, add-msg arg.
Core: 65/65 Neuro: 13/13 TUI View: 22/22 TUI Main: 65/65
Total: 165 tests, 0 failures.
2026-05-08 14:29:53 -04:00
04c219468d
passepartout: v0.6.0 — Time Awareness
...
Level 2: symbolic-time-memory skill
- memory-objects-since(timestamp) — hash-table walk, objects with version >= timestamp
- memory-objects-in-range(since until) — version between two timestamps
- context-query-with-time — extended query with :since :until
- 6 tests, 100% pass
Level 3: sensor-time skill
- format-time-for-llm — TIME: section for system prompt (iso/natural format)
- session-duration — session start tracking
- sensor-time-tick — deadline scanning, cron-registered, 0 LLM tokens
- TIME_AWARENESS / TIME_FORMAT / DEADLINE_WARNING_MINUTES env vars
- 13 tests, 100% pass
Level 1: TIME injection in think() (core-reason)
- fboundp-guarded call to format-time-for-llm
- session duration included when sensor-time skill loaded
- Injected at top of system prompt in both token-economics and fallback paths
Full suite: 135/135 (100%)
2026-05-08 09:42:22 -04:00
c86d079418
passepartout: v0.5.0 — File Reorganization & Token Economics
...
Deploy (Gitea) / deploy (push) Failing after 2s
File Reorganization:
- Extracted core-context → symbolic-awareness (skill)
- Extracted heartbeat → symbolic-events (skill)
- Relocated 6 utility fragments, renamed 23 files, deleted system-model.lisp
- Renamed gateway-* → channel-*, split gateway-messaging → 4 channel-* files
- Renamed defskill/defpackage names to match new file prefixes
- Deleted gateway-messaging.org/.lisp, removed core-context filter
- Documented self-repair criterion, added AGENTS.md core boundary rule
Token Economics (v0.5.0, skills not core):
- tokenizer.lisp: count-tokens, model-token-ratio, token-cost, provider-token-cost (11 tests)
- cost-tracker.lisp: cost-track-call, cost-session-total, cost-by-provider (6 tests)
- token-economics.lisp: prompt-prefix-cached, context-assemble-cached,
enforce-token-budget with CONTEXT_MAX_TOKENS env var (9 tests)
Bug Fixes:
- Fixed DeepSeek 400 (removed malformed tools from cascade)
- Fixed UNDEFINED-FUNCTION crash (fboundp guards in think())
- Fixed gate-trace duplication (setf replaces list* in cognitive-verify)
- Tightened dexador connect-timeout 10s→5s
Test suite: 116/116 (100%)
2026-05-08 08:36:41 -04:00
0b1fbc36bb
v0.5.0 hotfix: restore register-probabilistic-backend
...
Deploy (Gitea) / deploy (push) Failing after 2s
Restored core-reason from clean git base:
- Re-add register-probabilistic-backend (lost during rename)
- Re-add (in-package :passepartout)
- Don't pass tools to cascade (avoids unsupported-provider 400s)
Daemon stable, cascade reaches providers, gate trace works.
2026-05-07 20:56:42 -04:00
924bf8f479
passepartout: v0.5.0 hotfix 2 — daemon stable
...
Deploy (Gitea) / deploy (push) Failing after 2s
- Restore (in-package :passepartout) to core-reason
- Move *VAULT-MEMORY* back to core-skills
- Fix ASDF and defstruct/defpackage ordering
- Increase daemon timeout to 120s
- Handshake: 0.5.0
Verified: daemon processes messages, TUI clean, gate trace works
2026-05-07 20:14:51 -04:00
da160b71e3
passepartout: v0.5.0 File Reorganization
...
Deploy (Gitea) / deploy (push) Failing after 2s
Extract non-core fragments using self-repair criterion:
- core-context -> symbolic-awareness (224 lines, fboundp guards in think())
- heartbeat generation -> symbolic-events (renamed events-start-heartbeat)
Rename 23 files for clarity and new naming scheme:
- 6 core: core-package, core-transport, core-pipeline,
core-perceive, core-reason, core-act
- 13 system: symbolic-*, neuro-*, embedding-*, channel-shell
- 4 gateway: channel-cli, channel-tui-*, channel-tui-state
Utility relocations:
- markdown-strip -> programming-markdown
- plist-keywords-normalize -> programming-lisp
- cognitive-tool-prompt -> programming-tools
- VAULT-MEMORY -> security-vault
- Merge *backend-registry* into *probabilistic-backends*
Split gateway-messaging into channel-telegram/channel-signal/
channel-discord/channel-slack (4 independent skills)
Delete dead system-model.lisp (16-line wrapper)
Document self-repair criterion in DESIGN_DECISIONS
Version bump: 0.4.3 -> 0.5.0
2026-05-07 18:20:48 -04:00