insika 0.2.0 → 0.7.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +325 -17
- data/README.md +52 -11
- data/bin/insika +895 -8
- data/bin/insika-router +87 -0
- data/docs/AGENTS.md +229 -163
- data/docs/API.md +56 -0
- data/docs/ARCHITECTURE.md +3 -2
- data/docs/ARTIFACTS.md +95 -0
- data/docs/BENCHMARK.md +2 -2
- data/docs/CHANNELS.md +111 -21
- data/docs/CONTEXT.md +132 -19
- data/docs/DEMO.md +80 -0
- data/docs/DEPLOY.md +75 -4
- data/docs/EMBEDDING.md +1 -1
- data/docs/EVALS.md +146 -2
- data/docs/FACTS.md +135 -0
- data/docs/HARVEST.md +116 -0
- data/docs/KNOWLEDGE.md +290 -0
- data/docs/LOADTEST.md +16 -10
- data/docs/MEDIA.md +128 -0
- data/docs/OBSERVABILITY.md +65 -6
- data/docs/OUTCOMES.md +137 -0
- data/docs/PLUGINS.md +51 -6
- data/docs/POLICY.md +216 -0
- data/docs/REFINEMENT.md +17 -12
- data/docs/RELEASING.md +27 -0
- data/docs/ROUTER.md +213 -0
- data/docs/RUNNING-LOCAL.md +6 -6
- data/docs/SCHEDULING.md +121 -0
- data/docs/SECURITY.md +79 -2
- data/docs/SKILLS.md +13 -4
- data/docs/SOAK.md +127 -0
- data/docs/TEMPLATES.md +134 -0
- data/docs/TOOLS.md +220 -27
- data/docs/WHY.md +1 -1
- data/docs/WORKFLOWS.md +2 -2
- data/docs/_includes/head_custom.html +5 -0
- data/docs/_includes/title.html +13 -0
- data/docs/_sass/color_schemes/insika.scss +32 -0
- data/docs/_sass/custom/custom.scss +199 -0
- data/docs/_sass/custom/setup.scss +26 -0
- data/docs/assets/img/favicon.svg +7 -0
- data/docs/assets/img/insika-mark.svg +7 -0
- data/docs/core-concepts.md +21 -0
- data/docs/domain.md +115 -0
- data/docs/improve.md +20 -0
- data/docs/index.md +9 -6
- data/docs/integrate.md +20 -0
- data/docs/operate.md +13 -6
- data/docs/prompts/ADD-TOOL.md +118 -0
- data/docs/prompts/DIAGNOSE-TURN.md +65 -0
- data/docs/prompts/GO-LIVE.md +138 -0
- data/docs/prompts/RUN-EXAMPLES.md +70 -0
- data/docs/reference.md +19 -0
- data/docs/ship.md +10 -2
- data/docs/start-here.md +18 -0
- data/lib/insika/agent_profile.rb +202 -10
- data/lib/insika/artifact_signing.rb +82 -0
- data/lib/insika/artifact_store.rb +160 -0
- data/lib/insika/balloon_splitter.rb +102 -0
- data/lib/insika/budget_ledger.rb +34 -3
- data/lib/insika/cache_series_store.rb +49 -0
- data/lib/insika/channel_delivery.rb +119 -14
- data/lib/insika/channels/relay.rb +77 -3
- data/lib/insika/channels/web.rb +2 -2
- data/lib/insika/chat_builder.rb +105 -2
- data/lib/insika/checkpoint_store.rb +16 -0
- data/lib/insika/commands/agent_payload.rb +3 -3
- data/lib/insika/commands/backfill_knowledge.rb +145 -0
- data/lib/insika/commands/cancel_followup.rb +49 -0
- data/lib/insika/commands/delete_artifact.rb +35 -0
- data/lib/insika/commands/delete_concept.rb +34 -0
- data/lib/insika/commands/delete_mcp.rb +6 -2
- data/lib/insika/commands/delete_tenant_data.rb +107 -0
- data/lib/insika/commands/export_customer_memory.rb +48 -0
- data/lib/insika/commands/forget_customer.rb +117 -0
- data/lib/insika/commands/freeze_funnel_baseline.rb +113 -0
- data/lib/insika/commands/gate_harvest.rb +138 -0
- data/lib/insika/commands/gate_refinement.rb +1 -1
- data/lib/insika/commands/judge_shadow_pairs.rb +124 -0
- data/lib/insika/commands/memory_forget_fact.rb +20 -4
- data/lib/insika/commands/memory_put_fact.rb +23 -4
- data/lib/insika/commands/promote_harvest.rb +130 -0
- data/lib/insika/commands/record_outcome.rb +46 -0
- data/lib/insika/commands/record_shadow_reply.rb +68 -0
- data/lib/insika/commands/refresh_mcp_tools.rb +47 -0
- data/lib/insika/commands/reject_harvest.rb +38 -0
- data/lib/insika/commands/resolve_proposal.rb +108 -0
- data/lib/insika/commands/restore_concept.rb +34 -0
- data/lib/insika/commands/revoke_contact.rb +49 -0
- data/lib/insika/commands/rollback_harvest.rb +86 -0
- data/lib/insika/commands/run_distillation.rb +186 -0
- data/lib/insika/commands/run_harvest.rb +393 -0
- data/lib/insika/commands/seed_demo_data.rb +31 -0
- data/lib/insika/commands/send_message.rb +103 -6
- data/lib/insika/commands/session_purge.rb +67 -0
- data/lib/insika/commands/upsert_mcp.rb +6 -3
- data/lib/insika/commands/write_concept.rb +57 -0
- data/lib/insika/contact_store.rb +183 -0
- data/lib/insika/context/builder.rb +21 -3
- data/lib/insika/context/fragment.rb +7 -3
- data/lib/insika/context/priority.rb +5 -0
- data/lib/insika/context/provider.rb +17 -3
- data/lib/insika/context/providers/briefing.rb +96 -0
- data/lib/insika/context/providers/knowledge.rb +108 -0
- data/lib/insika/context/providers/memory.rb +16 -7
- data/lib/insika/context/providers/prompt.rb +57 -23
- data/lib/insika/context/providers/skill.rb +2 -0
- data/lib/insika/context/providers/tool_search.rb +2 -0
- data/lib/insika/context_trace_store.rb +38 -2
- data/lib/insika/cron.rb +189 -0
- data/lib/insika/demo/agent_attrs.rb +43 -0
- data/lib/insika/demo/golden_cases.rb +81 -0
- data/lib/insika/demo/seeder.rb +336 -0
- data/lib/insika/distill.rb +224 -0
- data/lib/insika/distill_engine.rb +169 -0
- data/lib/insika/doctor.rb +889 -11
- data/lib/insika/dsl/definition.rb +3 -2
- data/lib/insika/dsl/runtime.rb +69 -82
- data/lib/insika/dsl/server_boot.rb +92 -1
- data/lib/insika/dsl/system.rb +10 -2
- data/lib/insika/dsl.rb +186 -5
- data/lib/insika/edge_limiter.rb +28 -7
- data/lib/insika/env_schema.rb +25 -3
- data/lib/insika/errors.rb +11 -0
- data/lib/insika/evals/assertions.rb +3 -2
- data/lib/insika/evals/golden.rb +41 -4
- data/lib/insika/evals/judge.rb +47 -2
- data/lib/insika/evals/pairwise.rb +29 -6
- data/lib/insika/evals/persona.rb +98 -0
- data/lib/insika/evals/runner.rb +9 -0
- data/lib/insika/evals/simulator.rb +225 -0
- data/lib/insika/evals/transport.rb +83 -1
- data/lib/insika/event_stream.rb +10 -0
- data/lib/insika/evidence.rb +183 -0
- data/lib/insika/executor.rb +869 -76
- data/lib/insika/followup_engine.rb +207 -0
- data/lib/insika/followup_policy.rb +198 -0
- data/lib/insika/followup_store.rb +306 -0
- data/lib/insika/funnel_declaration.rb +106 -0
- data/lib/insika/funnel_fold.rb +179 -0
- data/lib/insika/funnel_store.rb +163 -0
- data/lib/insika/golden_store.rb +17 -2
- data/lib/insika/grounding/matcher.rb +69 -0
- data/lib/insika/grounding.rb +44 -0
- data/lib/insika/harvest/conversion_gate.rb +159 -0
- data/lib/insika/harvest/criterion.rb +98 -0
- data/lib/insika/harvest/gate.rb +194 -0
- data/lib/insika/harvest/negative_list.rb +199 -0
- data/lib/insika/harvest.rb +241 -0
- data/lib/insika/harvest_engine.rb +193 -0
- data/lib/insika/harvest_store.rb +548 -0
- data/lib/insika/knowledge.rb +680 -0
- data/lib/insika/knowledge_store.rb +140 -0
- data/lib/insika/mcp_client.rb +94 -0
- data/lib/insika/mcp_json.rb +74 -0
- data/lib/insika/mcp_live_tool.rb +43 -0
- data/lib/insika/mcp_store.rb +98 -26
- data/lib/insika/mcp_tool_ingestor.rb +30 -8
- data/lib/insika/mcp_tool_registry.rb +100 -0
- data/lib/insika/media.rb +382 -0
- data/lib/insika/memory_audit_store.rb +85 -0
- data/lib/insika/memory_store.rb +264 -23
- data/lib/insika/message_origin.rb +7 -2
- data/lib/insika/middleware.rb +9 -0
- data/lib/insika/model_visible.rb +87 -0
- data/lib/insika/model_visible_trace_store.rb +66 -0
- data/lib/insika/onboarding.rb +22 -1
- data/lib/insika/outbox_store.rb +42 -4
- data/lib/insika/outcome_store.rb +147 -0
- data/lib/insika/overlay_tool_registry.rb +37 -17
- data/lib/insika/packaging.rb +163 -0
- data/lib/insika/parity/criterion.rb +79 -0
- data/lib/insika/parity/verdict.rb +318 -0
- data/lib/insika/prefix_fingerprint.rb +58 -0
- data/lib/insika/profile_source.rb +29 -1
- data/lib/insika/prompt_catalog.rb +10 -0
- data/lib/insika/proposal_store.rb +271 -0
- data/lib/insika/queue_policy.rb +4 -1
- data/lib/insika/refinement/proposer.rb +1 -1
- data/lib/insika/reliability.rb +32 -6
- data/lib/insika/retention.rb +316 -0
- data/lib/insika/router/app.rb +157 -0
- data/lib/insika/router/backend_pool.rb +98 -0
- data/lib/insika/router/hash_ring.rb +55 -0
- data/lib/insika/router/proxy_body.rb +34 -0
- data/lib/insika/router/session_key.rb +54 -0
- data/lib/insika/router.rb +18 -0
- data/lib/insika/routing.rb +101 -0
- data/lib/insika/safety/config.rb +44 -4
- data/lib/insika/safety/corpus.rb +255 -0
- data/lib/insika/safety/detectors.rb +32 -113
- data/lib/insika/safety/factory.rb +15 -2
- data/lib/insika/safety/grounding_enforcer.rb +59 -0
- data/lib/insika/safety/grounding_validator.rb +49 -0
- data/lib/insika/safety/input_guardrail.rb +1 -1
- data/lib/insika/safety/moderator.rb +1 -1
- data/lib/insika/safety/output_filter.rb +9 -5
- data/lib/insika/safety/output_validator.rb +11 -5
- data/lib/insika/schedule.rb +177 -0
- data/lib/insika/schedule_engine.rb +314 -0
- data/lib/insika/schedule_store.rb +208 -0
- data/lib/insika/schema_guard.rb +35 -0
- data/lib/insika/server/app.rb +247 -17
- data/lib/insika/server/rack_app.rb +21 -1
- data/lib/insika/server/responses.rb +40 -1
- data/lib/insika/session_actor.rb +8 -4
- data/lib/insika/session_store.rb +65 -2
- data/lib/insika/settings_store.rb +10 -0
- data/lib/insika/shadow_pair_store.rb +258 -0
- data/lib/insika/skill_catalog.rb +16 -0
- data/lib/insika/soak/envelope.rb +140 -0
- data/lib/insika/soak/report.rb +392 -0
- data/lib/insika/soak/runner.rb +554 -0
- data/lib/insika/steer_injector.rb +21 -10
- data/lib/insika/store.rb +10 -1
- data/lib/insika/stores/memory.rb +6 -0
- data/lib/insika/stores/sqlite.rb +8 -0
- data/lib/insika/studio/app.rb +1437 -54
- data/lib/insika/studio/assets/dist/application.css +1 -1
- data/lib/insika/studio/assets/dist/application.js +23 -23
- data/lib/insika/studio/assets/dist/favicon.svg +6 -0
- data/lib/insika/studio/forms.rb +308 -10
- data/lib/insika/studio/nav_icons.rb +19 -1
- data/lib/insika/studio/views/_agent_tab_cache.erb +25 -0
- data/lib/insika/studio/views/_agent_tab_config.erb +514 -0
- data/lib/insika/studio/views/_agent_tab_history.erb +24 -0
- data/lib/insika/studio/views/_agent_tab_loops.erb +54 -0
- data/lib/insika/studio/views/_agent_tab_memory.erb +51 -0
- data/lib/insika/studio/views/_agent_tab_outcomes.erb +31 -0
- data/lib/insika/studio/views/_agent_tab_prompts.erb +108 -0
- data/lib/insika/studio/views/_agent_tab_skills.erb +38 -0
- data/lib/insika/studio/views/_agents_master.erb +44 -0
- data/lib/insika/studio/views/_message.erb +49 -32
- data/lib/insika/studio/views/agent_detail.erb +62 -278
- data/lib/insika/studio/views/agents.erb +71 -54
- data/lib/insika/studio/views/approvals.erb +4 -1
- data/lib/insika/studio/views/artifact.erb +23 -0
- data/lib/insika/studio/views/artifacts.erb +59 -0
- data/lib/insika/studio/views/chats.erb +4 -1
- data/lib/insika/studio/views/customer.erb +94 -0
- data/lib/insika/studio/views/customers.erb +32 -0
- data/lib/insika/studio/views/evals.erb +6 -3
- data/lib/insika/studio/views/facts.erb +133 -0
- data/lib/insika/studio/views/followups.erb +125 -0
- data/lib/insika/studio/views/funnel.erb +106 -0
- data/lib/insika/studio/views/harvest.erb +234 -0
- data/lib/insika/studio/views/home.erb +106 -66
- data/lib/insika/studio/views/knowledge.erb +123 -0
- data/lib/insika/studio/views/layout.erb +15 -11
- data/lib/insika/studio/views/mcp.erb +174 -80
- data/lib/insika/studio/views/parity.erb +147 -0
- data/lib/insika/studio/views/playground.erb +7 -1
- data/lib/insika/studio/views/session.erb +233 -124
- data/lib/insika/studio/views/settings.erb +41 -1
- data/lib/insika/studio/views/skills.erb +1 -2
- data/lib/insika/studio/views/system_files.erb +1 -1
- data/lib/insika/studio/views/task.erb +13 -0
- data/lib/insika/studio/views/tasks.erb +4 -1
- data/lib/insika/studio/views/tools.erb +24 -10
- data/lib/insika/task_store.rb +21 -1
- data/lib/insika/templates/browser-agent/README.md +36 -0
- data/lib/insika/templates/browser-agent/agent.rb +49 -0
- data/lib/insika/templates/daily-digest/README.md +38 -0
- data/lib/insika/templates/daily-digest/agent.rb +77 -0
- data/lib/insika/templates/repo-explorer/README.md +36 -0
- data/lib/insika/templates/repo-explorer/agent.rb +45 -0
- data/lib/insika/templates/research-analyst/README.md +26 -0
- data/lib/insika/templates/research-analyst/agent.rb +58 -0
- data/lib/insika/templates/review-panel/README.md +20 -0
- data/lib/insika/templates/review-panel/agent.rb +50 -0
- data/lib/insika/templates/travel-planner/README.md +35 -0
- data/lib/insika/templates/travel-planner/agent.rb +87 -0
- data/lib/insika/templates.rb +112 -0
- data/lib/insika/testing/store_contract.rb +27 -6
- data/lib/insika/tick.rb +47 -11
- data/lib/insika/timezone.rb +45 -0
- data/lib/insika/tool_definition.rb +17 -7
- data/lib/insika/tool_envelope.rb +69 -0
- data/lib/insika/tool_manifest.rb +5 -1
- data/lib/insika/tools/data_defined_tool.rb +10 -0
- data/lib/insika/tools/generate_image.rb +89 -0
- data/lib/insika/tools/load_knowledge.rb +74 -0
- data/lib/insika/tools/run_persona_eval.rb +328 -0
- data/lib/insika/tools/save_artifact.rb +95 -0
- data/lib/insika/tools/schedule_followup.rb +164 -0
- data/lib/insika/tools/tts.rb +47 -0
- data/lib/insika/tools/update_briefing.rb +126 -0
- data/lib/insika/turn_output.rb +1 -1
- data/lib/insika/turn_state.rb +49 -1
- data/lib/insika/turn_timing.rb +22 -2
- data/lib/insika/version.rb +1 -1
- data/lib/insika/vitals.rb +84 -0
- data/lib/insika/wiring/graph.rb +472 -13
- data/lib/insika/wiring/graph_chat.rb +102 -0
- data/lib/insika.rb +149 -3
- metadata +181 -5
- data/docs/build.md +0 -14
- data/docs/understand.md +0 -10
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Insika
|
|
4
|
+
module Wiring
|
|
5
|
+
# A synchronous, in-process "chat" seam over an assembled `Graph::Result`:
|
|
6
|
+
# dispatch a Command, drain the event stream to its terminal event, hand
|
|
7
|
+
# back the outcome. Extracted from `DSL::Runtime#chat`/`#run_workflow`
|
|
8
|
+
# (C3.1) so a graph built OUTSIDE the DSL — `config/deployment.rb`, the
|
|
9
|
+
# actual production/round1 composition root `config.ru` boots — can hand a
|
|
10
|
+
# `#chat`-capable object to anything that needs one (today:
|
|
11
|
+
# `run_persona_eval`'s `Evals::GraphTransport` seam), without a second copy
|
|
12
|
+
# of this dispatch+drain plumbing. `DSL::Runtime` now delegates here too —
|
|
13
|
+
# one implementation, exercised by both roots.
|
|
14
|
+
class GraphChat
|
|
15
|
+
TERMINAL = %i[task_completed task_failed task_cancelled].freeze
|
|
16
|
+
|
|
17
|
+
def initialize(graph:)
|
|
18
|
+
@graph = graph
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# One turn, in-process -> the assistant's text. `agent:` is REQUIRED —
|
|
22
|
+
# this seam has no notion of "the default agent" (that is a DSL::Runtime
|
|
23
|
+
# concept, filled in by its own caller before delegating here). Raises
|
|
24
|
+
# Insika::Error on a failed/cancelled turn, or the command's own
|
|
25
|
+
# rejection (unknown agent, bad schema) verbatim.
|
|
26
|
+
def chat(message, agent:, session_id: nil, timeout: nil)
|
|
27
|
+
command = Insika::Command.build(
|
|
28
|
+
:send_message, { agent: agent.to_s, message: message, session_id: session_id },
|
|
29
|
+
transport: :cli
|
|
30
|
+
)
|
|
31
|
+
run_command(command, session_id: session_id, timeout: timeout)[:text]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Dispatch + drain, generic over any Command — the seam a workflow run
|
|
35
|
+
# also needs (a :trigger_workflow Command carries :output, not :text).
|
|
36
|
+
# Subscribes BEFORE dispatching (the fiber may emit eagerly) and binds to
|
|
37
|
+
# the dispatched task. A synchronous handler error (unknown agent/
|
|
38
|
+
# workflow, bad input against the schema) propagates untouched — the
|
|
39
|
+
# caller sees the real ValidationError/NotFoundError, not a turn failure.
|
|
40
|
+
def run_command(command, session_id:, timeout:)
|
|
41
|
+
require "async"
|
|
42
|
+
outcome = {}
|
|
43
|
+
rejected = nil
|
|
44
|
+
Async do |task|
|
|
45
|
+
serving = !session_id.nil?
|
|
46
|
+
@graph.executor.supervised = true if serving
|
|
47
|
+
ensure_session(session_id) if session_id
|
|
48
|
+
sub = @graph.event_stream.subscribe
|
|
49
|
+
res = begin
|
|
50
|
+
@graph.bus.dispatch(command)
|
|
51
|
+
rescue StandardError => e
|
|
52
|
+
# CAPTURED, not re-raised inside the reactor: letting it escape the
|
|
53
|
+
# Async block logs "Task may have ended with unhandled exception" —
|
|
54
|
+
# alarming noise for a DOCUMENTED rejection (a schema violation, an
|
|
55
|
+
# unknown agent). Re-raised verbatim below, outside the reactor.
|
|
56
|
+
sub.close
|
|
57
|
+
rejected = e
|
|
58
|
+
next
|
|
59
|
+
end
|
|
60
|
+
sub.bind(task_id: res[:task_id])
|
|
61
|
+
drain(sub, outcome, task, timeout)
|
|
62
|
+
teardown_serving if serving
|
|
63
|
+
end.wait
|
|
64
|
+
raise rejected if rejected
|
|
65
|
+
raise Insika::Error, "turn #{outcome[:error]}" if outcome[:error]
|
|
66
|
+
|
|
67
|
+
outcome
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
private
|
|
71
|
+
|
|
72
|
+
# Reads the stream until this turn reaches a terminal event, then stops.
|
|
73
|
+
# A workflow run also carries its typed OUTPUT, which is not the turn text.
|
|
74
|
+
def drain(sub, outcome, task, timeout)
|
|
75
|
+
reader = task.async do
|
|
76
|
+
sub.each do |ev|
|
|
77
|
+
case ev.type
|
|
78
|
+
when :task_completed then outcome[:text] = ev.data[:content].to_s
|
|
79
|
+
when :workflow_completed then outcome[:output] = ev.data[:output]
|
|
80
|
+
when :task_failed then outcome[:error] = "failed: #{ev.data[:message] || ev.data[:error]}"
|
|
81
|
+
when :task_cancelled then outcome[:error] = "cancelled"
|
|
82
|
+
end
|
|
83
|
+
sub.close if TERMINAL.include?(ev.type)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
timeout ? task.with_timeout(timeout) { reader.wait } : reader.wait
|
|
87
|
+
rescue Async::TimeoutError
|
|
88
|
+
outcome[:error] = "timed out after #{timeout}s"
|
|
89
|
+
sub.close
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def ensure_session(session_id)
|
|
93
|
+
@graph.session_store.find(session_id) || @graph.session_store.create(id: session_id, vars: {})
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def teardown_serving
|
|
97
|
+
@graph.executor.stop_session_actors
|
|
98
|
+
@graph.executor.instance_variable_get(:@supervisor)&.stop
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
data/lib/insika.rb
CHANGED
|
@@ -1,13 +1,55 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# Templates under lib/insika/templates/*/agent.rb open with a bare
|
|
4
|
+
# `require "insika"` (the line a standalone `ruby agent.rb` run needs) and
|
|
5
|
+
# Templates.evaluate instance_evals that same source in-process — so this
|
|
6
|
+
# file's own directory must be on $LOAD_PATH, or that require raises
|
|
7
|
+
# LoadError whenever nothing else already activated the "insika" gem
|
|
8
|
+
# (no Bundler.setup, no globally installed gem).
|
|
9
|
+
$LOAD_PATH.unshift(__dir__) unless $LOAD_PATH.include?(__dir__)
|
|
10
|
+
|
|
3
11
|
require_relative "insika/version"
|
|
4
12
|
require_relative "insika/errors"
|
|
13
|
+
# the payload selection + the domain-boundary audit yardstick.
|
|
14
|
+
# Pure module — loaded by the gemspec too, so it carries no app requires.
|
|
15
|
+
require_relative "insika/packaging"
|
|
5
16
|
require_relative "insika/provider_error_classifier"
|
|
6
17
|
require_relative "insika/token_store"
|
|
7
18
|
require_relative "insika/budget_ledger"
|
|
8
19
|
require_relative "insika/circuit_state"
|
|
9
20
|
require_relative "insika/reliability"
|
|
21
|
+
require_relative "insika/routing"
|
|
22
|
+
require_relative "insika/media"
|
|
10
23
|
require_relative "insika/alert_dispatcher"
|
|
24
|
+
require_relative "insika/outcome_store"
|
|
25
|
+
require_relative "insika/retention"
|
|
26
|
+
require_relative "insika/funnel_declaration"
|
|
27
|
+
require_relative "insika/funnel_store"
|
|
28
|
+
require_relative "insika/funnel_fold"
|
|
29
|
+
# the parsed follow-up policy of ONE agent — the ONLY shape the
|
|
30
|
+
# engine accepts (tool/engine/doctor/Studio share it). Pure value object.
|
|
31
|
+
require_relative "insika/followup_policy"
|
|
32
|
+
# the contact-state cells and the follow-up schedule records.
|
|
33
|
+
# Both are dumb domain stores over the injected backend.
|
|
34
|
+
require_relative "insika/contact_store"
|
|
35
|
+
require_relative "insika/followup_store"
|
|
36
|
+
# the tick-driven firer — rides the same tick as retention/funnel.
|
|
37
|
+
require_relative "insika/followup_engine"
|
|
38
|
+
# IANA zone resolution through the OS tz database — the stdlib-only route
|
|
39
|
+
# to a zone NAME (Follow-up quiet hours, the cron scheduler, the doctor).
|
|
40
|
+
require_relative "insika/timezone"
|
|
41
|
+
# the recurring schedule: the five-field cron subset + next-fire
|
|
42
|
+
# materialization, the declaration parse, the per-agent rows, and the
|
|
43
|
+
# tick-driven firer (the recurring half of the tick).
|
|
44
|
+
require_relative "insika/cron"
|
|
45
|
+
require_relative "insika/schedule"
|
|
46
|
+
require_relative "insika/schedule_store"
|
|
47
|
+
require_relative "insika/schedule_engine"
|
|
48
|
+
# the report destination — one record per run, no
|
|
49
|
+
# versioning; the signing half of the sharing link (HMAC, no secret stored).
|
|
50
|
+
require_relative "insika/artifact_store"
|
|
51
|
+
require_relative "insika/artifact_signing"
|
|
52
|
+
require_relative "insika/commands/freeze_funnel_baseline"
|
|
11
53
|
require_relative "insika/channels/webhook"
|
|
12
54
|
require_relative "insika/coercion"
|
|
13
55
|
require_relative "insika/message_origin"
|
|
@@ -21,6 +63,9 @@ require_relative "insika/model_selection"
|
|
|
21
63
|
require_relative "insika/model_resolver"
|
|
22
64
|
require_relative "insika/tool_definition"
|
|
23
65
|
require_relative "insika/tool_manifest"
|
|
66
|
+
# the pack's grounding policy (Insika::Grounding + the
|
|
67
|
+
# GroundingMatcher it wraps). Pure Ruby — profile data, parsed per turn.
|
|
68
|
+
require_relative "insika/grounding"
|
|
24
69
|
require_relative "insika/frontmatter"
|
|
25
70
|
require_relative "insika/token_estimator"
|
|
26
71
|
require_relative "insika/checkpoint"
|
|
@@ -33,9 +78,12 @@ require_relative "insika/usage_ledger"
|
|
|
33
78
|
require_relative "insika/budget_ledger"
|
|
34
79
|
require_relative "insika/edge_limiter"
|
|
35
80
|
require_relative "insika/tool_output_compressor"
|
|
36
|
-
# Content safety / guardrails.
|
|
37
|
-
#
|
|
38
|
-
#
|
|
81
|
+
# Content safety / guardrails. The pattern SOURCE is the
|
|
82
|
+
# language-tagged data in safety/corpus.rb; detectors.rb compiles it. Both are
|
|
83
|
+
# self-contained (the eval requires detectors.rb directly); the rest hang off
|
|
84
|
+
# Middleware/hooks seams. No ruby_llm at load-time — Factory requires the gem
|
|
85
|
+
# lazily, like the Executor's create_chat.
|
|
86
|
+
require_relative "insika/safety/corpus"
|
|
39
87
|
require_relative "insika/safety/detectors"
|
|
40
88
|
require_relative "insika/safety/safe_responses"
|
|
41
89
|
require_relative "insika/safety/config"
|
|
@@ -55,7 +103,13 @@ require_relative "insika/context/providers/skill"
|
|
|
55
103
|
require_relative "insika/context/providers/skill_trigger"
|
|
56
104
|
require_relative "insika/context/providers/tool_search"
|
|
57
105
|
require_relative "insika/context/providers/memory"
|
|
106
|
+
require_relative "insika/context/providers/knowledge"
|
|
58
107
|
require_relative "insika/context/providers/session"
|
|
108
|
+
require_relative "insika/context/providers/briefing"
|
|
109
|
+
# the cache-prefix hash chain + the per-agent cache-hit series.
|
|
110
|
+
# Both are referenced by the Executor at runtime, so they load before it.
|
|
111
|
+
require_relative "insika/prefix_fingerprint"
|
|
112
|
+
require_relative "insika/cache_series_store"
|
|
59
113
|
require_relative "insika/policy/policy"
|
|
60
114
|
require_relative "insika/policy/engine"
|
|
61
115
|
require_relative "insika/registry"
|
|
@@ -78,8 +132,13 @@ require_relative "insika/delegation_store"
|
|
|
78
132
|
# Channels: the outbound record + the inbound retry window. Both are
|
|
79
133
|
# plain stores; the channel objects themselves come after the HTTP client.
|
|
80
134
|
require_relative "insika/outbox_store"
|
|
135
|
+
require_relative "insika/shadow_pair_store"
|
|
81
136
|
require_relative "insika/inbound_log"
|
|
82
137
|
require_relative "insika/memory_store"
|
|
138
|
+
require_relative "insika/knowledge_store"
|
|
139
|
+
# the operator-mutation audit trail. After memory_store (no
|
|
140
|
+
# mutual deps). Pure stdlib — `load_guard_spec` stays green.
|
|
141
|
+
require_relative "insika/memory_audit_store"
|
|
83
142
|
require_relative "insika/config_store"
|
|
84
143
|
require_relative "insika/profile_source"
|
|
85
144
|
require_relative "insika/agent_file_store"
|
|
@@ -88,6 +147,10 @@ require_relative "insika/secret_masking"
|
|
|
88
147
|
require_relative "insika/tool_store"
|
|
89
148
|
require_relative "insika/tool_trace_store"
|
|
90
149
|
require_relative "insika/context_trace_store"
|
|
150
|
+
# the model-visible payload of one ask + its durable trace —
|
|
151
|
+
# "model-visible means logged" (the conformance suite's reconstruction half).
|
|
152
|
+
require_relative "insika/model_visible"
|
|
153
|
+
require_relative "insika/model_visible_trace_store"
|
|
91
154
|
# Refinement: the run record + the evidence half of the loop.
|
|
92
155
|
# Reads sessions/tasks/traces above; requires Safety::Detectors (loaded earlier) for
|
|
93
156
|
# the PII redaction of the snippets it puts in a report.
|
|
@@ -101,6 +164,9 @@ require_relative "insika/refinement/candidate"
|
|
|
101
164
|
require_relative "insika/refinement/proposer"
|
|
102
165
|
require_relative "insika/egress_guard"
|
|
103
166
|
require_relative "insika/schema_guard"
|
|
167
|
+
# the evidence contract (Spec + Processor + EvidenceLedger). Pure Ruby.
|
|
168
|
+
# Required BEFORE tool_envelope.rb — the envelope references it at runtime.
|
|
169
|
+
require_relative "insika/evidence"
|
|
104
170
|
require_relative "insika/sandbox"
|
|
105
171
|
require_relative "insika/http_client"
|
|
106
172
|
# Channels: the registry, the bundled relay adapter and the
|
|
@@ -130,6 +196,14 @@ require_relative "insika/evals/runner"
|
|
|
130
196
|
require_relative "insika/evals/report"
|
|
131
197
|
require_relative "insika/evals/baseline"
|
|
132
198
|
require_relative "insika/evals/transport"
|
|
199
|
+
# simulated users: the persona data + the conversation driver.
|
|
200
|
+
# Pure — the persona model is an injected ask, the target rides the Transport.
|
|
201
|
+
require_relative "insika/evals/persona"
|
|
202
|
+
require_relative "insika/evals/simulator"
|
|
203
|
+
# shadow parity: the frozen criterion and the mechanical
|
|
204
|
+
# fold over the pair store (C6). Pure — no store, no provider gem.
|
|
205
|
+
require_relative "insika/parity/criterion"
|
|
206
|
+
require_relative "insika/parity/verdict"
|
|
133
207
|
# Authored eval cases: the corpus becomes editable without a
|
|
134
208
|
# checkout. Requires the loader above (it is the one validator).
|
|
135
209
|
require_relative "insika/golden_store"
|
|
@@ -143,6 +217,14 @@ require_relative "insika/refinement/panel"
|
|
|
143
217
|
require_relative "insika/mcp_store"
|
|
144
218
|
require_relative "insika/mcp_http_client"
|
|
145
219
|
require_relative "insika/mcp_tool_ingestor"
|
|
220
|
+
# require "ruby_llm/mcp" itself is LAZY, inside .for — this require_relative only
|
|
221
|
+
# loads the thin factory (see spec/insika/load_guard_spec.rb).
|
|
222
|
+
require_relative "insika/mcp_client"
|
|
223
|
+
# insika/mcp_live_tool (< RubyLLM::Tool) is NOT required here — McpToolRegistry
|
|
224
|
+
# require_relative's it lazily on the 1st instance (turn time), same as
|
|
225
|
+
# OverlayToolRegistry does for tools/data_defined_tool.
|
|
226
|
+
require_relative "insika/mcp_tool_registry"
|
|
227
|
+
require_relative "insika/mcp_json"
|
|
146
228
|
require_relative "insika/system_file_store"
|
|
147
229
|
require_relative "insika/recovery"
|
|
148
230
|
require_relative "insika/command_bus"
|
|
@@ -177,6 +259,54 @@ require_relative "insika/commands/delete_llm_provider"
|
|
|
177
259
|
require_relative "insika/commands/issue_tenant_token"
|
|
178
260
|
require_relative "insika/commands/revoke_token"
|
|
179
261
|
require_relative "insika/commands/rotate_tenant_token"
|
|
262
|
+
require_relative "insika/commands/record_outcome"
|
|
263
|
+
require_relative "insika/commands/record_shadow_reply"
|
|
264
|
+
require_relative "insika/commands/judge_shadow_pairs"
|
|
265
|
+
require_relative "insika/commands/session_purge"
|
|
266
|
+
require_relative "insika/commands/forget_customer"
|
|
267
|
+
require_relative "insika/commands/delete_tenant_data"
|
|
268
|
+
# the LGPD access right — export one customer's memory cell as
|
|
269
|
+
# content (the Studio download); the event stays counts-only.
|
|
270
|
+
require_relative "insika/commands/export_customer_memory"
|
|
271
|
+
# the operator/integration follow-up mutations (cancel one
|
|
272
|
+
# record; revoke a contact + fall its pending records atomically).
|
|
273
|
+
require_relative "insika/commands/cancel_followup"
|
|
274
|
+
require_relative "insika/commands/revoke_contact"
|
|
275
|
+
# the report destination's Studio mutation — delete one artifact
|
|
276
|
+
# (a bus command, like every Studio mutation).
|
|
277
|
+
require_relative "insika/commands/delete_artifact"
|
|
278
|
+
# session distillation — the distiller (pure, injected ask)
|
|
279
|
+
# and the proposal store (proposals + the latched dedup ledger + the
|
|
280
|
+
# per-session distilled marker).
|
|
281
|
+
require_relative "insika/distill"
|
|
282
|
+
require_relative "insika/proposal_store"
|
|
283
|
+
require_relative "insika/commands/run_distillation"
|
|
284
|
+
require_relative "insika/distill_engine"
|
|
285
|
+
require_relative "insika/commands/resolve_proposal"
|
|
286
|
+
# the gated harvest — the miner (pure, injected ask), the
|
|
287
|
+
# frozen conversion criterion and the versioned negative list. The provider
|
|
288
|
+
# touch stays inside MinerFactory's lazy ask (load_guard stays green).
|
|
289
|
+
require_relative "insika/harvest"
|
|
290
|
+
require_relative "insika/harvest/criterion"
|
|
291
|
+
require_relative "insika/harvest/negative_list"
|
|
292
|
+
require_relative "insika/harvest/conversion_gate"
|
|
293
|
+
require_relative "insika/harvest/gate"
|
|
294
|
+
require_relative "insika/harvest_store"
|
|
295
|
+
require_relative "insika/commands/run_harvest"
|
|
296
|
+
require_relative "insika/commands/gate_harvest"
|
|
297
|
+
require_relative "insika/commands/promote_harvest"
|
|
298
|
+
require_relative "insika/commands/rollback_harvest"
|
|
299
|
+
require_relative "insika/commands/reject_harvest"
|
|
300
|
+
require_relative "insika/harvest_engine"
|
|
301
|
+
# post-turn learning — the extractor (pure, injected ask) and the
|
|
302
|
+
# concept format itself (markdown + YAML frontmatter, the SkillCatalog
|
|
303
|
+
# split). The provider touch stays inside ExtractorFactory's lazy ask
|
|
304
|
+
# (load_guard stays green).
|
|
305
|
+
require_relative "insika/knowledge"
|
|
306
|
+
require_relative "insika/commands/backfill_knowledge"
|
|
307
|
+
require_relative "insika/commands/write_concept"
|
|
308
|
+
require_relative "insika/commands/delete_concept"
|
|
309
|
+
require_relative "insika/commands/restore_concept"
|
|
180
310
|
require_relative "insika/commands/upsert_mcp"
|
|
181
311
|
require_relative "insika/commands/delete_mcp"
|
|
182
312
|
require_relative "insika/commands/write_system_file"
|
|
@@ -187,6 +317,14 @@ require_relative "insika/commands/delete_data_tool"
|
|
|
187
317
|
require_relative "insika/commands/restore_data_tool"
|
|
188
318
|
require_relative "insika/commands/import_tools"
|
|
189
319
|
require_relative "insika/commands/import_mcp_tools"
|
|
320
|
+
require_relative "insika/commands/refresh_mcp_tools"
|
|
321
|
+
# the demo seed (OSS onboarding): one bundled agent + golden
|
|
322
|
+
# set + the Seeder that populates every loop's stores at once, and its bus
|
|
323
|
+
# adapter for `insika demo:seed` and the Studio's "Seed demo data" button.
|
|
324
|
+
require_relative "insika/demo/agent_attrs"
|
|
325
|
+
require_relative "insika/demo/golden_cases"
|
|
326
|
+
require_relative "insika/demo/seeder"
|
|
327
|
+
require_relative "insika/commands/seed_demo_data"
|
|
190
328
|
require_relative "insika/event_stream"
|
|
191
329
|
require_relative "insika/task_actor"
|
|
192
330
|
require_relative "insika/queue_policy"
|
|
@@ -195,6 +333,7 @@ require_relative "insika/skill_catalog"
|
|
|
195
333
|
require_relative "insika/tool_catalog"
|
|
196
334
|
require_relative "insika/steer_injector"
|
|
197
335
|
require_relative "insika/loop_detector"
|
|
336
|
+
require_relative "insika/balloon_splitter"
|
|
198
337
|
require_relative "insika/turn_output"
|
|
199
338
|
require_relative "insika/turn_state"
|
|
200
339
|
require_relative "insika/turn_timing"
|
|
@@ -207,10 +346,17 @@ require_relative "insika/shutdown"
|
|
|
207
346
|
require_relative "insika/tick"
|
|
208
347
|
require_relative "insika/pack"
|
|
209
348
|
require_relative "insika/pack_importer"
|
|
349
|
+
require_relative "insika/templates"
|
|
210
350
|
require_relative "insika/telemetry"
|
|
211
351
|
# Strict config + diagnosis. Doctor reads the config stores above;
|
|
212
352
|
# EnvSchema (required at the top) is its env layer.
|
|
213
353
|
require_relative "insika/doctor"
|
|
354
|
+
# Soak: the 72h uptime-degradation harness. Pure stdlib — the
|
|
355
|
+
# envelope and the report fold are deterministic, the runner only talks Net::HTTP.
|
|
356
|
+
require_relative "insika/soak/envelope"
|
|
357
|
+
require_relative "insika/soak/report"
|
|
358
|
+
require_relative "insika/soak/runner"
|
|
359
|
+
require_relative "insika/vitals"
|
|
214
360
|
# Shared composition core for both roots (config/wiring.rb + config/deployment.rb).
|
|
215
361
|
# Only references the classes above at call-time, so require order is unconstrained.
|
|
216
362
|
require_relative "insika/wiring/graph"
|