insika 0.3.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 +180 -0
- data/README.md +45 -10
- data/bin/insika +684 -0
- data/bin/insika-router +87 -0
- data/docs/AGENTS.md +94 -403
- data/docs/API.md +5 -5
- data/docs/ARCHITECTURE.md +3 -2
- data/docs/ARTIFACTS.md +95 -0
- data/docs/BENCHMARK.md +2 -2
- data/docs/CHANNELS.md +14 -14
- data/docs/CONTEXT.md +9 -7
- data/docs/DEMO.md +80 -0
- data/docs/DEPLOY.md +71 -3
- data/docs/EMBEDDING.md +1 -1
- data/docs/EVALS.md +128 -3
- data/docs/FACTS.md +3 -3
- data/docs/HARVEST.md +5 -6
- data/docs/KNOWLEDGE.md +290 -0
- data/docs/LOADTEST.md +2 -2
- data/docs/MEDIA.md +128 -0
- data/docs/OBSERVABILITY.md +15 -10
- data/docs/OUTCOMES.md +137 -0
- data/docs/PLUGINS.md +51 -6
- data/docs/POLICY.md +216 -0
- data/docs/REFINEMENT.md +14 -9
- data/docs/RELEASING.md +4 -4
- data/docs/ROUTER.md +213 -0
- data/docs/RUNNING-LOCAL.md +3 -3
- data/docs/SCHEDULING.md +121 -0
- data/docs/SECURITY.md +22 -6
- data/docs/SKILLS.md +11 -2
- data/docs/SOAK.md +2 -2
- data/docs/TEMPLATES.md +134 -0
- data/docs/TOOLS.md +152 -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 +4 -4
- data/docs/improve.md +20 -0
- data/docs/index.md +8 -5
- 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 +73 -16
- data/lib/insika/artifact_signing.rb +82 -0
- data/lib/insika/artifact_store.rb +160 -0
- data/lib/insika/channel_delivery.rb +1 -1
- data/lib/insika/chat_builder.rb +22 -2
- data/lib/insika/commands/agent_payload.rb +2 -2
- data/lib/insika/commands/backfill_knowledge.rb +145 -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 +15 -3
- data/lib/insika/commands/gate_refinement.rb +1 -1
- data/lib/insika/commands/refresh_mcp_tools.rb +47 -0
- data/lib/insika/commands/restore_concept.rb +34 -0
- data/lib/insika/commands/seed_demo_data.rb +31 -0
- data/lib/insika/commands/upsert_mcp.rb +6 -3
- data/lib/insika/commands/write_concept.rb +57 -0
- data/lib/insika/context/priority.rb +2 -0
- data/lib/insika/context/providers/knowledge.rb +108 -0
- data/lib/insika/context/providers/prompt.rb +30 -24
- 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/doctor.rb +176 -8
- data/lib/insika/dsl/definition.rb +3 -2
- data/lib/insika/dsl/runtime.rb +60 -79
- data/lib/insika/dsl/server_boot.rb +23 -1
- data/lib/insika/dsl/system.rb +10 -2
- data/lib/insika/dsl.rb +103 -2
- data/lib/insika/env_schema.rb +16 -1
- data/lib/insika/evals/golden.rb +41 -4
- data/lib/insika/evals/judge.rb +47 -2
- data/lib/insika/evals/pairwise.rb +11 -0
- 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/executor.rb +231 -55
- data/lib/insika/followup_policy.rb +2 -25
- data/lib/insika/golden_store.rb +16 -1
- data/lib/insika/grounding/matcher.rb +1 -1
- 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 +115 -31
- data/lib/insika/message_origin.rb +1 -1
- data/lib/insika/middleware.rb +9 -0
- data/lib/insika/onboarding.rb +17 -1
- data/lib/insika/outcome_store.rb +1 -1
- data/lib/insika/overlay_tool_registry.rb +37 -17
- data/lib/insika/packaging.rb +2 -2
- data/lib/insika/profile_source.rb +8 -1
- data/lib/insika/prompt_catalog.rb +10 -0
- data/lib/insika/retention.rb +36 -1
- 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/schedule.rb +177 -0
- data/lib/insika/schedule_engine.rb +314 -0
- data/lib/insika/schedule_store.rb +208 -0
- data/lib/insika/server/app.rb +105 -15
- data/lib/insika/server/rack_app.rb +5 -1
- data/lib/insika/server/responses.rb +1 -1
- data/lib/insika/skill_catalog.rb +12 -0
- data/lib/insika/steer_injector.rb +21 -10
- data/lib/insika/studio/app.rb +567 -45
- data/lib/insika/studio/assets/dist/application.css +1 -1
- data/lib/insika/studio/assets/dist/application.js +21 -21
- data/lib/insika/studio/forms.rb +46 -5
- data/lib/insika/studio/nav_icons.rb +14 -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 +61 -820
- data/lib/insika/studio/views/agents.erb +70 -57
- data/lib/insika/studio/views/artifact.erb +23 -0
- data/lib/insika/studio/views/artifacts.erb +59 -0
- data/lib/insika/studio/views/evals.erb +2 -2
- data/lib/insika/studio/views/facts.erb +1 -1
- data/lib/insika/studio/views/funnel.erb +1 -1
- data/lib/insika/studio/views/home.erb +106 -67
- data/lib/insika/studio/views/knowledge.erb +123 -0
- data/lib/insika/studio/views/layout.erb +14 -11
- data/lib/insika/studio/views/mcp.erb +174 -80
- data/lib/insika/studio/views/session.erb +231 -177
- data/lib/insika/studio/views/settings.erb +39 -1
- data/lib/insika/studio/views/skills.erb +1 -1
- data/lib/insika/studio/views/tools.erb +24 -9
- 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/tick.rb +24 -12
- data/lib/insika/timezone.rb +45 -0
- data/lib/insika/tools/generate_image.rb +52 -7
- 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/turn_output.rb +1 -1
- data/lib/insika/turn_state.rb +15 -4
- data/lib/insika/version.rb +1 -1
- data/lib/insika/wiring/graph.rb +184 -12
- data/lib/insika/wiring/graph_chat.rb +102 -0
- data/lib/insika.rb +57 -0
- metadata +105 -5
- data/docs/build.md +0 -14
- data/docs/understand.md +0 -10
data/bin/insika-router
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# `insika-router` — session-sticky router. A standalone Async/
|
|
5
|
+
# Falcon process that sits in front of N engine backends and routes each
|
|
6
|
+
# request to the SAME backend every time its session id resolves to (a
|
|
7
|
+
# ketama-style consistent hash ring), so `WEB_CONCURRENCY=1`-per-worker's
|
|
8
|
+
# session guarantees (FIFO/collect/steer, docs/DEPLOY.md "The process model")
|
|
9
|
+
# hold at N>1 capacity without touching the engine itself.
|
|
10
|
+
#
|
|
11
|
+
# Entirely OPT-IN: an operator happy with one worker never runs this. Two
|
|
12
|
+
# backend-discovery modes, picked by which env var is set (never both):
|
|
13
|
+
#
|
|
14
|
+
# INSIKA_ROUTER_BACKENDS=http://host-a:9292,http://host-b:9292
|
|
15
|
+
# static list — the Railway shape (N local Falcon workers on known ports).
|
|
16
|
+
# INSIKA_ROUTER_BACKENDS_DNS=insika-headless.default.svc.cluster.local
|
|
17
|
+
# one hostname, re-resolved on INSIKA_ROUTER_DNS_INTERVAL (default 15s) —
|
|
18
|
+
# the Kubernetes shape (a headless Service, one record per ready pod).
|
|
19
|
+
# Requires INSIKA_ROUTER_BACKEND_PORT (the engine port on every pod).
|
|
20
|
+
#
|
|
21
|
+
# See docs/ROUTER.md for both deploy shapes end to end.
|
|
22
|
+
|
|
23
|
+
require "async"
|
|
24
|
+
require "async/http/server"
|
|
25
|
+
require "async/http/endpoint"
|
|
26
|
+
require "protocol/rack"
|
|
27
|
+
|
|
28
|
+
require_relative "../lib/insika/env_schema"
|
|
29
|
+
require_relative "../lib/insika/router"
|
|
30
|
+
|
|
31
|
+
module Insika
|
|
32
|
+
module CLI
|
|
33
|
+
module Router
|
|
34
|
+
module_function
|
|
35
|
+
|
|
36
|
+
def main
|
|
37
|
+
Insika::EnvSchema.reconcile_legacy!
|
|
38
|
+
pool = build_pool
|
|
39
|
+
app = Insika::Router::App.new(
|
|
40
|
+
pool: pool,
|
|
41
|
+
body_max_bytes: (Insika::EnvSchema.read("INSIKA_ROUTER_BODY_MAX_BYTES") || Insika::Router::App::DEFAULT_BODY_MAX_BYTES).to_i,
|
|
42
|
+
backend_timeout: (Insika::EnvSchema.read("INSIKA_ROUTER_BACKEND_TIMEOUT") || 10).to_i
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
host = Insika::EnvSchema.read("INSIKA_ROUTER_HOST") || "0.0.0.0"
|
|
46
|
+
port = (Insika::EnvSchema.read("INSIKA_ROUTER_PORT") || 9090).to_i
|
|
47
|
+
endpoint = Async::HTTP::Endpoint.parse("http://#{host}:#{port}")
|
|
48
|
+
|
|
49
|
+
banner(pool, host, port)
|
|
50
|
+
Async do |task|
|
|
51
|
+
pool.start_polling(task)
|
|
52
|
+
Async::HTTP::Server.new(Protocol::Rack::Adapter.new(app), endpoint).run
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def build_pool
|
|
57
|
+
static = Insika::EnvSchema.read("INSIKA_ROUTER_BACKENDS")
|
|
58
|
+
dns = Insika::EnvSchema.read("INSIKA_ROUTER_BACKENDS_DNS")
|
|
59
|
+
if static.nil? == dns.nil?
|
|
60
|
+
abort "insika-router: set exactly one of INSIKA_ROUTER_BACKENDS or INSIKA_ROUTER_BACKENDS_DNS"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
if static
|
|
64
|
+
Insika::Router::BackendPool.new(static: static.split(",").map(&:strip))
|
|
65
|
+
else
|
|
66
|
+
port = Insika::EnvSchema.read("INSIKA_ROUTER_BACKEND_PORT")
|
|
67
|
+
abort "insika-router: INSIKA_ROUTER_BACKEND_PORT is required with INSIKA_ROUTER_BACKENDS_DNS" if port.nil?
|
|
68
|
+
|
|
69
|
+
Insika::Router::BackendPool.new(
|
|
70
|
+
dns: dns, dns_port: port.to_i,
|
|
71
|
+
dns_interval: (Insika::EnvSchema.read("INSIKA_ROUTER_DNS_INTERVAL") || 15).to_i
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def banner(pool, host, port)
|
|
77
|
+
puts "\e[1mInsika Router\e[0m — session-sticky proxy"
|
|
78
|
+
puts " http://#{host}:#{port}/up → health (also this process's own liveness)"
|
|
79
|
+
mode = pool.dns? ? "dns" : "static"
|
|
80
|
+
puts " backends (#{mode}): #{pool.backends.join(', ')}"
|
|
81
|
+
puts " Ctrl-C to stop."
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
Insika::CLI::Router.main
|