Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
151 commits
Select commit Hold shift + click to select a range
b29f58b
fix(api-hook): refuse cleartext transport to non-loopback hosts
ocervell Jun 16, 2026
0dbd12d
feat(celery): cap worker-loss redeliveries to abandon repeatedly-kill…
ocervell Jun 19, 2026
6635116
feat(hooks): register on_build as a valid runner hook type
ocervell Jun 20, 2026
9eeaefd
feat(hooks): mongodb on_build mints child runner doc + id at build time
ocervell Jun 20, 2026
e2a0a03
feat(workflow): fire on_build per task during canvas build
ocervell Jun 20, 2026
d99b2ec
fix(workflow): restore prior enable_hooks after on_build toggle
ocervell Jun 20, 2026
11f19bb
feat(celery): fire on_build per chunk in break_task
ocervell Jun 20, 2026
8d3be83
test(hooks): assert pre-built id makes update_runner reuse the doc
ocervell Jun 20, 2026
1e2e249
feat(hooks): mirror on_build in the sqlite driver
ocervell Jun 20, 2026
1e5f0a4
test(on_build): fix test_hooks for build-time hook + isolate wiring t…
ocervell Jun 20, 2026
634b259
fix(celery): worker-loss cap off-by-one + key expiry; add connection-…
ocervell Jun 20, 2026
bf0c771
fix(celery): clearer abandon message (delivery attempts vs retry cap)
ocervell Jun 21, 2026
48e04d7
test(on_build): skip mongodb tests when the addon (pymongo) is absent
ocervell Jun 21, 2026
4fe6fb1
feat(celery): finalize in-flight task on worker eviction so the chord…
ocervell Jun 21, 2026
cb0f0f4
fix(celery): clear stale eviction flag per task; harden handler + iso…
ocervell Jun 21, 2026
10cce2e
chore: re-trigger CI
ocervell Jun 21, 2026
e32d1c2
test(eviction): re-raise shutdown flag until the task stops (fix CI r…
ocervell Jun 21, 2026
c33c83b
test(eviction): make monitor tests deterministic (no live subprocess)
ocervell Jun 21, 2026
25e2dc8
chore: re-trigger CI
ocervell Jun 21, 2026
2a3d816
test(eviction): assert clear-at-start via mock (robust to CI env)
ocervell Jun 21, 2026
b7f0cc6
Merge remote-tracking branch 'origin/feat/worker-loss-retry-cap' into…
ocervell Jun 22, 2026
fcc13c7
Merge remote-tracking branch 'origin/feat/on-build-runner-identity' i…
ocervell Jun 22, 2026
5ecfa74
Merge remote-tracking branch 'origin/feat/worker-eviction-finalize' i…
ocervell Jun 22, 2026
1849434
ci: publish-canary β€” build+push freelabz/secator:canary on push to ca…
ocervell Jun 22, 2026
9b5042d
Merge remote-tracking branch 'origin/feat/auth-hardening' into canary
ocervell Jun 22, 2026
9b43b1e
feat(vulnerability): add status field + carry-over across re-scans
ocervell Jun 23, 2026
7ee81c3
Merge remote-tracking branch 'origin/feat/vuln-status' into canary
ocervell Jun 23, 2026
e63e4bc
feat: headless Mongo session restore for remote AI chat
ocervell Jun 23, 2026
8a7e1c8
Merge remote-tracking branch 'origin/feat/ai-chat' into canary
ocervell Jun 23, 2026
3a8f790
fix(ai): stamp session_id on every Ai item for the remote-channel tra…
ocervell Jun 24, 2026
7eb4777
Merge remote-tracking branch 'origin/feat/ai-chat' into canary
ocervell Jun 24, 2026
9db0809
fix(ai): read session_id from self.context (dispatch drops run_opts.c…
ocervell Jun 24, 2026
29d0ab0
Merge remote-tracking branch 'origin/feat/ai-chat' into canary
ocervell Jun 24, 2026
5093916
fix(ai): correlate chat channel by _context.session_id (top-level was…
ocervell Jun 24, 2026
fdaee57
Merge remote-tracking branch 'origin/feat/ai-chat' into canary
ocervell Jun 24, 2026
172ba85
fix(ai): make remote follow-up doc renderable (status=pending + top-l…
ocervell Jun 24, 2026
40f7790
Merge remote-tracking branch 'origin/feat/ai-chat' into canary
ocervell Jun 24, 2026
1ed552a
fix(ai): persist sub-runner results to workspace + emit runner id
ocervell Jun 24, 2026
e3e9fad
fix(ai): mark api_key/api_base internal so the LLM key is never UI-ex…
ocervell Jun 24, 2026
29faec6
fix(ai): resolve LLM key from CONFIG at runtime, not as an opt defaul…
ocervell Jun 24, 2026
b9f9500
feat(ai): stamp created finding on add_finding action item (extra_dat…
ocervell Jun 24, 2026
1b059f2
Merge remote-tracking branch 'origin/feat/ai-chat' into canary
ocervell Jun 24, 2026
144decc
fix(ai): coerce add_finding scalars to declared field types before va…
ocervell Jun 24, 2026
389e17e
fix(ai): stamp persisted runner id ({type}_id) on action item, not ru…
ocervell Jun 24, 2026
4b1aa0f
fix(ai): scope remote follow_up poll to its own prompt to stop respaw…
ocervell Jun 24, 2026
e6db71e
feat(ai): stamp conversation session_id onto AI-spawned sub-runners
ocervell Jun 24, 2026
baf30c3
feat(ai): constrain ai task to allowed_targets scope
ocervell Jun 24, 2026
944867c
Merge remote-tracking branch 'origin/feat/ai-chat' into canary
ocervell Jun 24, 2026
e94ef4a
feat(ai): add denied_targets scope to AI guardrails (deny wins)
ocervell Jun 25, 2026
eae011a
fix(ai): keep the AI loop alive when an action dispatch raises
ocervell Jun 25, 2026
2c5e7b3
Merge remote-tracking branch 'origin/feat/ai-chat' into canary
ocervell Jun 25, 2026
8ad57b3
perf(output-types): cache keys() + O(1) deduplicate membership check
ocervell Jun 25, 2026
ba89480
fix(ai): dispatch heavy sub-tasks async instead of running them in-pr…
ocervell Jun 25, 2026
6f810d0
address review: keep declared-field contract in deduplicate + keys() …
ocervell Jun 25, 2026
258fe14
feat(ai): record total billed tokens per ai run
ocervell Jun 25, 2026
aa29fb5
feat(ai): mid-flight steering (interrupt + redirect)
ocervell Jun 25, 2026
a012285
fix(celery): skip item hooks when re-adding forwarded results in mark…
ocervell Jun 25, 2026
e99b982
refactor(ai): steer doc is the transcript entry; restore steers on re…
ocervell Jun 25, 2026
ee7783f
feat(ai): capture prompt/completion token split in per-run accounting
ocervell Jun 25, 2026
4b09741
Merge perf/output-type-keys-cache into canary (#1220): cache OutputTy…
ocervell Jun 25, 2026
f8cf904
feat(ai): record context.ai_model on each ai run for cost-weighted me…
ocervell Jun 25, 2026
de5f782
Merge fix/ai-heavy-subtask-async into canary (#1221): dispatch heavy …
ocervell Jun 25, 2026
f56fb26
Merge fix/skip-item-hooks-on-forwarded-results into canary (#1223): s…
ocervell Jun 25, 2026
6466f8a
Merge feat/ai-token-quota into canary
ocervell Jun 25, 2026
30a0a09
fix(ai): make shell guardrail wrapper-aware and fix destructive-comma…
ocervell Jun 30, 2026
7361520
fix(ai): bound retries on persistent rate-limit to prevent infinite l…
ocervell Jun 30, 2026
49ee63f
fix(ai): sanitize LLM-supplied subagent opts to prevent guardrail byp…
ocervell Jun 30, 2026
49ac886
fix(ai): correlate permission prompts by prompt_uuid to stop stale au…
ocervell Jun 30, 2026
a387903
fix(ai): fail closed when guardrail prompts are exhausted (H10) (#1242)
ocervell Jul 1, 2026
8b08cb1
fix(ai): make "allow this command" a true one-shot, not a session rul…
ocervell Jul 1, 2026
61608b1
fix(ai): make history trim/compact tool-pair-aware to avoid orphan to…
ocervell Jul 1, 2026
a473e1f
fix(ai): close the answer/timeout race and stop stale pending docs ac…
ocervell Jul 1, 2026
f631a86
fix(ai): default-safe target/path guardrail dimensions (M6) (#1246)
ocervell Jul 1, 2026
b8dea9a
fix(ai): token-count fallback when LLM usage missing (M5) (#1247)
ocervell Jul 1, 2026
51f3603
fix(ai): cap subagent recursion depth & per-turn fan-out (H4) (#1248)
ocervell Jul 1, 2026
52744e9
fix(ai): cover plain-chat & max-iter remote turns with pending docs (…
ocervell Jul 1, 2026
79a7bfa
fix(ai): idempotency marker stops Celery redelivery replay (C3) (#1254)
ocervell Jul 1, 2026
cc688d7
fix(ai): normalize encoded IPs before SSRF/metadata deny (M8) (#1253)
ocervell Jul 1, 2026
563a4af
fix(ai): surface/prevent persistence-less subagent spawns (M2) (#1252)
ocervell Jul 1, 2026
8747d9f
fix(ai): 400s fail fast except orphan-tool repair (M4) (#1251)
ocervell Jul 1, 2026
248cb0c
fix(ai): model-window-aware history trim budget (M3) (#1255)
ocervell Jul 1, 2026
4a52ff3
fix(ai): cap unbounded shell output into history (M1) (#1256)
ocervell Jul 1, 2026
b84000e
fix(ai): treat output-flag destinations as writes (M9) (#1257)
ocervell Jul 1, 2026
dca9f21
fix(ai): give allow_all real session-wide scope vs one-shot allow (M1…
ocervell Jul 1, 2026
4b502f4
fix(ai): fix unsubstituted template vars + phantom tool in prompts (D…
ocervell Jul 1, 2026
e33c46b
fix(ai): gate privileged add_finding types at the guardrail (M7) (#1260)
ocervell Jul 1, 2026
fc2c61d
refactor(ai): cheap fast-path for mode detection, LLM only when ambig…
ocervell Jul 1, 2026
395c3cc
chore(ai): remove vestigial code (D3) (#1262)
ocervell Jul 1, 2026
2a9f25a
fix(ai): stop discarding exploit mode; wire + document it (D2) (#1263)
ocervell Jul 2, 2026
772f5cc
fix(ai): extensible exec-wrapper peeling closes the C2 laundering cla…
ocervell Jul 2, 2026
f8a7aa2
fix(ai): explicit allow-list for ask-loop approval (refactor-safety) …
ocervell Jul 2, 2026
3d06851
fix(ai): warn 'missing shfmt/safecmd' instead of 'Missing ai addon' +…
ocervell Jul 4, 2026
cf7e549
fix(ai): make _context.session_id the single source of truth for the …
ocervell Jul 4, 2026
a4c3cd8
fix(ai): accept a stringified query_workspace arg instead of crashing…
ocervell Jul 4, 2026
bf3d102
fix(ai): arg resilience β€” coerce stringified args, reject non-object …
ocervell Jul 4, 2026
2f7d847
fix(exporters): handle serialized dicts in MarkdownExporter for AI re…
ocervell Jul 4, 2026
9f0ddd4
fix(ai): dedupe duplicate tool_results after compaction/batch (non-re…
ocervell Jul 5, 2026
f74908e
fix(ai): ai-spawned sub-runners persist their own runner doc, linked …
ocervell Jul 5, 2026
3a5c2ae
fix(ai): make query_workspace the single source of truth (local-drive…
ocervell Jul 5, 2026
0fc7db3
feat(ai): structured evidence-backed subagent prompt + parent-LLM inh…
ocervell Jul 5, 2026
5a2d6c1
fix(ai): coerce query_workspace limit to int (str limit crashed the b…
ocervell Jul 5, 2026
81e7c59
feat(tasks): generic command task (run arbitrary shell command as a r…
ocervell Jul 5, 2026
ccfef35
feat(tasks): command.from_result β€” build a runner from an already-run…
ocervell Jul 5, 2026
4920cde
feat(ai): run AI shell commands as command runners (history + parenting)
ocervell Jul 5, 2026
1e946ce
fix(runners): exclude env run_opt from persisted resolved_opts
ocervell Jul 5, 2026
2de2a87
feat: headless Mongo session restore for remote AI chat
ocervell Jun 23, 2026
94c43f3
fix(ai): stamp session_id on every Ai item for the remote-channel tra…
ocervell Jun 24, 2026
787f480
fix(ai): read session_id from self.context (dispatch drops run_opts.c…
ocervell Jun 24, 2026
870ab2a
fix(ai): correlate chat channel by _context.session_id (top-level was…
ocervell Jun 24, 2026
01cff02
fix(ai): make remote follow-up doc renderable (status=pending + top-l…
ocervell Jun 24, 2026
6665fd8
fix(ai): persist sub-runner results to workspace + emit runner id
ocervell Jun 24, 2026
7a447aa
feat(ai): stamp created finding on add_finding action item (extra_dat…
ocervell Jun 24, 2026
eeea436
fix(ai): coerce add_finding scalars to declared field types before va…
ocervell Jun 24, 2026
6541e6c
fix(ai): stamp persisted runner id ({type}_id) on action item, not ru…
ocervell Jun 24, 2026
2ba00c6
fix(ai): scope remote follow_up poll to its own prompt to stop respaw…
ocervell Jun 24, 2026
f02bef9
feat(ai): stamp conversation session_id onto AI-spawned sub-runners
ocervell Jun 24, 2026
8c731a3
fix(ai): keep the AI loop alive when an action dispatch raises
ocervell Jun 25, 2026
5968c95
feat(ai): mid-flight steering (interrupt + redirect)
ocervell Jun 25, 2026
56ec8bc
refactor(ai): steer doc is the transcript entry; restore steers on re…
ocervell Jun 25, 2026
4acca66
fix(ai): don't crash token-trimming on tool-call turns (content=None)
ocervell Jul 5, 2026
00d3d2a
refactor(ai): auto-register driver hooks from context (drop _build_ho…
ocervell Jul 5, 2026
bb7fb71
refactor(ai): use Error.from_exception for action-dispatch errors
ocervell Jul 5, 2026
0539f24
refactor(output_types): share field-type resolution via OutputType.fi…
ocervell Jul 5, 2026
d7202f6
style(ai): trim verbose core comments per review
ocervell Jul 5, 2026
a104049
feat(ai): add Ai.message transcript carrier + persisted-message size …
ocervell Jul 6, 2026
c4e5d2c
feat(ai): persist prompt/assistant turns as raw litellm messages (inc…
ocervell Jul 6, 2026
990014a
feat(ai): persist tool results as tool_result transcript docs (with r…
ocervell Jul 6, 2026
0e9b75b
feat(ai): rebuild full transcript from persisted messages in restore_…
ocervell Jul 6, 2026
3848bf3
feat(ai): unify local resume through restore_history_from_db + adopt …
ocervell Jul 6, 2026
e93b151
test(ai): scoping, cross-backend & size-backstop coverage for unified…
ocervell Jul 6, 2026
3c750e7
fix(ai): local resume of a legacy (pre-session_id) session falls back…
ocervell Jul 6, 2026
19dd425
feat(ai): replay prior conversation to console on new-format local re…
ocervell Jul 6, 2026
4d51aa9
Merge remote-tracking branch 'origin/ai-session-restore' into feat/ai…
ocervell Jul 7, 2026
30491c6
Merge remote-tracking branch 'origin/pr3-bash-runner' into feat/ai-un…
ocervell Jul 7, 2026
7c345dc
Merge remote-tracking branch 'origin/feat/ai-chat' into feat/ai-unified
ocervell Jul 7, 2026
114a48b
Merge remote-tracking branch 'origin/feat/ai-steer' into feat/ai-unified
ocervell Jul 7, 2026
f8201f8
Merge remote-tracking branch 'origin/feat/ai-hardening' into feat/ai-…
ocervell Jul 7, 2026
81c0394
test(ai): align remote-permission-flow test with M12/H9 (allow_all pe…
ocervell Jul 7, 2026
0fe24d7
test(ai): accept prompt_uuid kwarg in token-sum loop mock (loop signa…
ocervell Jul 7, 2026
2d5c8c9
style(ai): fix flake8 lint in unified AI code (E301/E231/E131/E501/E127)
ocervell Jul 7, 2026
e2f2e16
refactor(ai): destructure actions.py β€” constants to top, pure helpers…
ocervell Jul 7, 2026
6222ab5
refactor(ai): trim verbose comments/docstrings across the AI module
ocervell Jul 7, 2026
a11d7f7
refactor(ai): dedupe repeated blocks (ponytail-review)
ocervell Jul 7, 2026
bd02233
refactor(ai): restore multi-line docstrings (only # comments should b…
ocervell Jul 7, 2026
0336da3
docs(ai): strip internal hardening-round tags (M#/H#/C#/D#) from comm…
ocervell Jul 8, 2026
4fc6ae5
fix(test): skip tool install/version checks for generic tasks (no sta…
ocervell Jul 9, 2026
9533c2b
fix(install): treat generic tasks (empty cmd) as install-skipped, not…
ocervell Jul 9, 2026
1561bfd
refactor(ai): dedupe tasks/ai.py (DRY sweep)
ocervell Jul 13, 2026
265d9b1
refactor(ai): dedupe actions/utils/interactivity (DRY sweep)
ocervell Jul 13, 2026
9f2b01c
refactor(ai): dedupe guardrails/history/tools/session/encryption + dr…
ocervell Jul 13, 2026
ce16e4e
refactor(ai): drop over-engineered flexibility (ponytail-review)
ocervell Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .github/workflows/publish-canary.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@ on:
branches:
- canary

concurrency:
group: publish-canary-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

Expand Down
6 changes: 5 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,11 @@ gcs = [
]
ai = [
'litellm < 2',
'safecmd'
'safecmd',
# safecmd shells out to the `shfmt` binary (via shutil.which); pin shfmt-py
# explicitly so `secator install addons ai` always ships the binary, not just
# the safecmd Python package. Without it the guardrail shell parser degrades.
'shfmt-py'
]

[project.scripts]
Expand Down
Loading
Loading