Documentation
¶
Overview ¶
Package gojira is the public library facade for the gojira Jira-to-Markdown mirror tool. It exposes the full capability surface as one cohesive package so third-party programs can embed gojira without touching its internal packages or the CLI binary. The exported capabilities group into:
- Classification — Classify turns a URL or bare issue key into a typed result (Jira key, Jira URL, GitHub PR, or external).
- Configuration — LoadConfig, LoadFileConfig, and LoadAppConfig build and validate a runtime Config from a kv map, a YAML file, or the full file < env cascade.
- Fetch and render — GetIssue returns one issue as structured typed data; FetchAndRender is the convenience wrapper that also renders Markdown; ParseOutputFormat/OutputFormat select the presentation form.
- Crawl — Crawl (and CrawlWithLogger) run a full recursive crawl to disk and return a Summary; CrawlGraph returns the discovered issue graph in memory as a GraphModel (GraphNode/GraphEdge) instead of (or in addition to) writing graph artifacts.
- Write operations — CreateIssue, UpdateIssue, AddComment, ListTransitions, TransitionIssue, and TransitionIssueByStatus mutate Jira; BuildCreateIssueBody/BuildUpdateIssueBody expose the request-body builders for dry-run previews.
- Event sinks — Sink, Event, NoopSink, and NewSlogSink let callers observe crawl progress.
Public surface invariants ¶
- No flag parsing, CLI argument handling, or process-level signal handling.
- No os.Exit calls.
- No hard-coded credentials, Jira domains, or project keys.
- All internal packages are hidden; only the facade capabilities and their supporting types are exported.
- The CLI binary (cmd/gojira) is a thin consumer of this package; it is never required to use the library.
Minimal usage example (third-party consumer workflow) ¶
cfg, err := gojira.LoadConfig(map[string]string{
"GOJIRA_SITE": "https://mycompany.atlassian.net",
"GOJIRA_USER": "me@example.com",
"GOJIRA_TOKEN": os.Getenv("JIRA_TOKEN"),
"GOJIRA_OUTPUT_DIR": "./jira-mirror",
})
if err != nil {
log.Fatal(err)
}
summary, err := gojira.Crawl(ctx, cfg, []string{"PROJ-1"}, nil)
if err != nil {
log.Fatal(err)
}
fmt.Printf("fetched=%d stubbed=%d failed=%d\n",
summary.Fetched, summary.Stubbed, summary.Failed)
Index ¶
- Constants
- Variables
- func AddComment(ctx context.Context, cfg Config, key string, opts ...client.CommentOption) (client.Comment, error)
- func BuildCreateIssueBody(project, issueType string, opts ...client.CreateOption) ([]byte, error)
- func BuildUpdateIssueBody(opts ...client.UpdateOption) ([]byte, error)
- func Classify(input, jiraSite string) classify.Result
- func CrawlGraph(ctx context.Context, cfg Config, startKeys []string, sink Sink) (Summary, GraphModel, error)
- func CreateIssue(ctx context.Context, cfg Config, project, issueType string, ...) (client.CreatedIssue, error)
- func FetchAndRender(ctx context.Context, cfg Config, key string, opts ...client.Option) (indexMD, outboundMD string, discoveredKeys []string, err error)
- func FullVersion() string
- func GetIssue(ctx context.Context, cfg Config, key string, opts ...client.Option) (parse.Issue, []extract.Reference, error)
- func ListTransitions(ctx context.Context, cfg Config, key string) ([]client.Transition, error)
- func Revision() string
- func TransitionIssue(ctx context.Context, cfg Config, key, transitionID string, ...) error
- func TransitionIssueByStatus(ctx context.Context, cfg Config, key, targetStatusName string, ...) error
- func UpdateIssue(ctx context.Context, cfg Config, key string, opts ...client.UpdateOption) error
- func UserAgent() string
- func Version() string
- type Config
- type Event
- type GraphEdge
- type GraphModel
- type GraphNode
- type OutputFormat
- type Sink
- type Summary
Constants ¶
const ( KindIssueFetched = events.KindIssueFetched KindIssueStubbed = events.KindIssueStubbed KindIssueFailed = events.KindIssueFailed KindIssueCapReached = events.KindIssueCapReached KindPRReferenceFound = events.KindPRReferenceFound KindCrawlSummary = events.KindCrawlSummary )
Variables ¶
var ( // This is a total-failure condition: credentials are invalid. ErrUnauthorized = client.ErrUnauthorized // ErrForbidden is returned when Jira responds with 403. // The crawl renders a permission-denied stub and continues. ErrForbidden = client.ErrForbidden // ErrNotFound is returned when Jira responds with 404. // The crawl renders a not-found stub and continues. ErrNotFound = client.ErrNotFound // ErrRateLimited is returned when Jira responds with 429 and all // retry attempts are exhausted. ErrRateLimited = client.ErrRateLimited // ErrBadRequest is returned when Jira responds with 400 (validation // failure). The concrete error may be a [*client.APIError] carrying // the failing field names; errors.Is(err, ErrBadRequest) still // matches via Unwrap. ErrBadRequest = client.ErrBadRequest // ErrConflict is returned when Jira responds with 409, e.g. an // invalid workflow transition. As with ErrBadRequest, an *APIError // may wrap this sentinel while still satisfying errors.Is. ErrConflict = client.ErrConflict // ErrConfigMissingRequired is returned (wrapped) by [LoadConfig] / // [LoadAppConfig] when a required configuration value is absent. // It is a re-export of the internal config sentinel so callers can // errors.Is without importing the internal package. ErrConfigMissingRequired = config.ErrMissingRequired // ErrConfigInvalidValue is returned (wrapped) by [LoadConfig] / // [LoadAppConfig] when a configuration value fails validation // (bad URL, unknown enum, malformed integer, etc.). It is a // re-export of the internal config sentinel so callers can // errors.Is without importing the internal package. ErrConfigInvalidValue = config.ErrInvalidValue )
Functions ¶
func AddComment ¶ added in v0.2.0
func AddComment(ctx context.Context, cfg Config, key string, opts ...client.CommentOption) (client.Comment, error)
AddComment appends a comment to the issue identified by key. The comment body is supplied via client.WithCommentText (plain text → ADF) or client.WithCommentADF (rich, caller-supplied ADF). The returned client.Comment carries Jira's id/author/created fields.
func BuildCreateIssueBody ¶ added in v0.2.0
func BuildCreateIssueBody(project, issueType string, opts ...client.CreateOption) ([]byte, error)
BuildCreateIssueBody returns the JSON request body CreateIssue would POST, without contacting Jira. It is a pure pass-through over client.RenderCreateBody, exposed at the facade so CLI / agent callers can preview a write before mutating.
func BuildUpdateIssueBody ¶ added in v0.2.0
func BuildUpdateIssueBody(opts ...client.UpdateOption) ([]byte, error)
BuildUpdateIssueBody returns the JSON request body UpdateIssue would PUT, without contacting Jira. Like BuildCreateIssueBody it is a pure pass-through — no network, no client construction.
func Classify ¶
Classify determines the kind of link represented by input.
It is a direct re-export of classify.Classify. The returned classify.Result carries the Kind and any extracted fields (IssueKey, Owner, Repo, PRNumber, URL). classify is a public package; callers may import it directly for the Kind constants.
jiraSite is the Jira Cloud base URL (e.g. "https://mycompany.atlassian.net"). Only the host portion is used for matching.
func CrawlGraph ¶ added in v0.2.0
func CrawlGraph(ctx context.Context, cfg Config, startKeys []string, sink Sink) (Summary, GraphModel, error)
CrawlGraph runs a recursive crawl exactly like Crawl and returns the collected issue graph IN MEMORY as a GraphModel, without ever writing graph.json or graph.d2 to disk. This is the entry point the gRPC GetGraph handler uses; it is also useful to library callers who want the graph programmatically.
Graph collection is FORCED ON regardless of cfg.EmitGraph (the EmitGraph flag controls the disk-export side of the feature, which CrawlGraph deliberately bypasses). Per-issue Markdown is still produced through the normal output.Store when cfg.OutputDir is configured — only the graph files are suppressed.
The returned Summary is identical to what Crawl would produce for the same inputs. Errors propagate unchanged through the existing sentinel surface (ErrUnauthorized, ErrNotFound, etc.).
func CreateIssue ¶ added in v0.2.0
func CreateIssue(ctx context.Context, cfg Config, project, issueType string, opts ...client.CreateOption) (client.CreatedIssue, error)
CreateIssue creates a new Jira issue under the given project key with the supplied issue-type name. Field selection — summary, description, labels, assignee, parent, custom fields — flows through the client.CreateOption set. On success the returned client.CreatedIssue carries Jira's {key, id, self} response. On 400 the error is a *client.APIError that satisfies errors.Is against ErrBadRequest and exposes per-field validation messages via errors.As.
func FetchAndRender ¶
func FetchAndRender(ctx context.Context, cfg Config, key string, opts ...client.Option) (indexMD, outboundMD string, discoveredKeys []string, err error)
FetchAndRender fetches a single Jira issue identified by key, parses its ADF description and relationships, and returns the rendered Markdown content for both the issue page and its outbound reference index.
It is a convenience wrapper over GetIssue + render. It shares all fetch, parse, and extract logic with GetIssue; only the render step is added here.
It does NOT write anything to disk. The caller decides what to do with the returned strings (write them, embed them in a larger pipeline, etc.).
Parameters ¶
- ctx: controls the lifetime of the HTTP request.
- cfg: validated runtime configuration (construct via LoadConfig).
- key: Jira issue key, e.g. "PROJ-1".
- opts: optional client.Option values (e.g. client.WithHTTPClient for tests). Pass nil or omit for production use.
Return values ¶
- indexMD: Markdown content for <KEY>/index.md.
- outboundMD: Markdown content for <KEY>/references/outbound.md. Empty string when the issue has no outbound references.
- discoveredKeys: Jira issue keys found in the issue's description and relationships, in extract's documented order (description → parent → subtasks → issuelinks → remotelinks). May contain duplicates; the caller is responsible for deduplication.
- err: non-nil on fetch, parse, extract, or render failure.
Neighbour resolution ¶
Because FetchAndRender fetches a single issue in isolation, the neighbours set passed to the renderer is always empty. Relationship links therefore render as absolute Jira browse URLs rather than relative Markdown paths. Use Crawl for a full recursive crawl where relative links are resolved.
func FullVersion ¶ added in v0.4.2
func FullVersion() string
FullVersion returns an image-reference-style identifier suitable for log lines and diagnostic banners. It is "<ref>@<commit>" on a stamped build and just "<commit>" otherwise. It is a thin wrapper over buildinfo.FullVersion.
func GetIssue ¶ added in v0.2.0
func GetIssue(ctx context.Context, cfg Config, key string, opts ...client.Option) (parse.Issue, []extract.Reference, error)
GetIssue fetches a single Jira issue identified by key, parses its ADF description and relationships, and returns the structured typed data without rendering anything to Markdown.
It is the "fetch" half of FetchAndRender, exposed independently so callers such as MCP handlers or TUI components can obtain typed data without forcing a Markdown render pass.
Parameters ¶
- ctx: controls the lifetime of the HTTP request.
- cfg: validated runtime configuration (construct via LoadConfig).
- key: Jira issue key, e.g. "PROJ-1".
- opts: optional client.Option values (e.g. client.WithHTTPClient for tests). Pass nil or omit for production use.
Return values ¶
- issue: the fully parsed parse.Issue value.
- refs: outbound references discovered by extract.Extract, in extract's documented order (description → parent → subtasks → issuelinks → remotelinks). May contain duplicates; the caller is responsible for deduplication.
- err: non-nil on fetch, parse, or extract failure.
func ListTransitions ¶ added in v0.2.0
ListTransitions returns the workflow transitions currently available for the issue identified by key. Jira surfaces only transitions whose preconditions are met for the issue's current state, so the result is workflow- and state-dependent.
func Revision ¶ added in v0.4.2
func Revision() string
Revision returns the git SHA the binary was built from, or "dev" when the binary has not been release-stamped. It is a thin wrapper over buildinfo.Revision.
func TransitionIssue ¶ added in v0.2.0
func TransitionIssue(ctx context.Context, cfg Config, key, transitionID string, opts ...client.TransitionOption) error
TransitionIssue moves the issue identified by key through the workflow transition with id transitionID. Use client.WithTransitionField and client.WithTransitionCommentText to set fields or append a comment as part of the transition. Jira returns 204 on success.
func TransitionIssueByStatus ¶ added in v0.2.0
func TransitionIssueByStatus(ctx context.Context, cfg Config, key, targetStatusName string, opts ...client.TransitionOption) error
TransitionIssueByStatus resolves the workflow transition whose target status name matches targetStatusName (case-insensitive) via ListTransitions, then executes it.
It returns a clear error when no transition matches (typically because the issue is not in a state from which that target is reachable) or when more than one transition shares the same target status — gojira will not silently pick one. The convenience costs one extra GET (the ListTransitions call) relative to passing a transition id directly to TransitionIssue.
func UpdateIssue ¶ added in v0.2.0
UpdateIssue edits fields on the issue identified by key. Field selection flows through client.UpdateOption. Jira returns 204 on success; this function returns nil. 400 surfaces a *client.APIError wrapping ErrBadRequest; 404 surfaces ErrNotFound.
func UserAgent ¶ added in v0.4.2
func UserAgent() string
UserAgent returns the default HTTP User-Agent header value the gojira HTTP client sends ("gojira/" + Version()). It is a thin wrapper over buildinfo.UserAgent.
func Version ¶
func Version() string
Version returns the human-facing version string: the release ref (tag or branch) when stamped, falling back to the commit SHA otherwise. An un-stamped build therefore reports "dev". It is a thin wrapper over buildinfo.Version.
Note: in v0.3 and earlier, Version was a package-level CONST. It is now a FUNC so the value can be set by release tooling at build time without requiring -ldflags (which `go install ...@vX` does not pass). Update callers from `gojira.Version` to `gojira.Version()`.
Types ¶
type Config ¶
Config is the validated runtime configuration for a gojira run. It is an alias for the internal config type; construct it via LoadConfig.
func LoadAppConfig ¶ added in v0.2.0
LoadAppConfig loads configuration through the full app-level cascade and returns a flattened Config ready for Crawl / FetchAndRender. The cascade order, lowest-to-highest precedence, is:
- Embedded defaults (per-entity DefaultX constructors).
- YAML config file: when configPath is non-empty, that file is opened; when empty, the discovery chain runs (--config-equivalent: explicit path → $GOJIRA_CONFIG_FILE → ./gojira.yaml → $XDG_CONFIG_HOME/gojira/config.yaml → ~/.config/gojira/config.yaml). An explicit but non-existent configPath is a hard error.
- GOJIRA_-prefixed environment variables from env (the caller supplies this map; the CLI passes a filtered snapshot of os.Environ, while library consumers may inject any map). Deprecated v0.1 flat keys (GOJIRA_SITE, GOJIRA_USER, GOJIRA_TOKEN, etc.) continue to work via internal alias resolution.
CLI-flag overrides, if any, are the caller's responsibility to apply to the returned Config. Keeping flags out of LoadAppConfig keeps this package free of CLI-library dependencies.
On failure LoadAppConfig returns a zero Config and a descriptive error. Use errors.Is with ErrConfigMissingRequired or ErrConfigInvalidValue to distinguish failure classes — the exact same sentinels LoadConfig uses.
func LoadConfig ¶
LoadConfig validates the key-value pairs in kv against the canonical GOJIRA_* key set defined in PRD §6, applies defaults for optional keys, and returns a populated Config.
kv may come from any source: environment variables, CLI flags, a config file, or a test fixture. This package does not read environment variables itself.
On the first validation failure, LoadConfig returns a zero Config and a descriptive error. Use errors.Is with ErrConfigMissingRequired or ErrConfigInvalidValue to distinguish failure classes.
LoadConfig is the legacy entry point preserved for backward compatibility with library consumers and the existing CLI flag-overlay pattern. New callers SHOULD prefer LoadAppConfig, which loads through the full cascade (embedded defaults < YAML file < GOJIRA_ environment variables) and supports config-file discovery.
func LoadFileConfig ¶ added in v0.2.0
LoadFileConfig runs ONLY the YAML-file layer of the configuration cascade (embedded defaults + optional config file, with Layer-1 schema validation) and returns the flattened Config. It does NOT read environment variables and does NOT run the Layer-2 semantic validator, so a partial/missing-required configuration is NOT an error here. An explicit configPath pointing at a non-existent file IS a hard error wrapping ErrConfigInvalidValue.
LoadFileConfig is the seam the CLI uses when it wants to overlay environment variables and flag values on top of the file's contribution using its own validation path: the CLI calls LoadFileConfig, flattens the result onto a kv map, merges env and flag values, and runs the merged map through LoadConfig. This preserves the v0.1 *ConfigError error messages downstream tests and users depend on while still honoring the YAML file's contribution to the cascade.
When configPath is empty, the standard discovery chain runs (see the LoadAppConfig docstring).
type Event ¶
Event is a single observable occurrence emitted by the library. It is an alias for the internal events.Event type.
type GraphEdge ¶ added in v0.2.0
GraphEdge is a directed relationship between two [GraphNode]s. Edge Kinds are: parent, subtask, child, link, remote, description, pull_request, external.
type GraphModel ¶ added in v0.2.0
GraphModel is the in-memory issue graph produced by CrawlGraph. It is a true alias of graph.Model so callers can pass values across the package boundary without conversion.
type GraphNode ¶ added in v0.2.0
GraphNode is a single node in a GraphModel; one of three Kinds: "issue", "github_pr", or "external". Issue-only fields (Status, Type, Assignee, URL) are zero-valued for non-issue nodes.
type OutputFormat ¶ added in v0.2.0
type OutputFormat int
OutputFormat selects the presentation form of a fetched Jira issue.
Orthogonality ¶
Format (presentation) and Store (destination) are independent concerns. A caller chooses both independently:
- Format controls HOW the issue data is represented (typed struct, Markdown text, or JSON bytes).
- Store controls WHERE the result is written (filesystem, gRPC stream, in-memory buffer, etc.).
For example, a gRPC handler may request FormatStructured and stream the typed data to a client, while the CLI uses FormatMarkdown and writes to disk via an FSStore. Neither choice constrains the other.
const ( // FormatStructured returns the parsed issue as typed Go values // ([parse.Issue] + []extract.Reference). No rendering is performed. // Use this when the caller needs to inspect or transform the data // programmatically (e.g. a gRPC handler that maps fields to proto // messages). FormatStructured OutputFormat = iota // FormatMarkdown returns the issue rendered as Markdown text via // [render.RenderIssue]. This is the format written to disk by the // default FSStore and displayed by the CLI. FormatMarkdown // FormatJSON returns the issue serialised as a JSON string. The JSON // representation mirrors the structured data ([parse.Issue] + // []extract.Reference) and is suitable for machine consumption or // embedding in API responses. FormatJSON )
func ParseOutputFormat ¶ added in v0.2.0
func ParseOutputFormat(s string) (OutputFormat, error)
ParseOutputFormat converts a string to an OutputFormat.
Accepted forms (all case-insensitive):
- "structured", "FORMAT_STRUCTURED"
- "markdown", "FORMAT_MARKDOWN"
- "json", "FORMAT_JSON"
The proto-style "FORMAT_*" aliases make it straightforward to map from a proto enum name without an extra translation layer.
On failure the error wraps ErrConfigInvalidValue so callers can use errors.Is for classification.
func (OutputFormat) String ¶ added in v0.2.0
func (f OutputFormat) String() string
String returns the canonical lower-case name of the format. Unknown values return "OutputFormat(<n>)" so they are always printable.
type Sink ¶
Sink is the interface callers implement to receive structured events from the library. It is an alias for the internal events.Sink interface, so callers can implement their own sink without importing internal/events.
NoopSink discards every event. Pass it (or nil) to Crawl when you do not need to observe crawl progress.
func NewSlogSink ¶
NewSlogSink returns a Sink that emits each event as a structured slog record through logger. It is the recommended way for callers (including the gojira CLI) to bridge gojira's event stream onto the standard log/slog pipeline without importing internal/events directly.
A nil logger is replaced with slog.Default so the resulting sink is always safe to call. The Event-to-slog mapping (kind → level, attribute names) is documented on the underlying events.SlogSink.
type Summary ¶
Summary is the structured result returned by Crawl after a run completes. It is an alias for the internal crawl summary type.
func Crawl ¶
Crawl executes a full recursive Jira issue crawl starting from startKeys.
It constructs the real HTTP client and fetcher from cfg, then delegates to the internal crawl orchestrator. Output files are written to cfg.OutputDir.
sink receives structured events for every state transition (issue queued, fetched, skipped, stubbed, failed, cap reached, PR found, crawl summary). Pass nil to use NoopSink and discard all events.
Error handling ¶
- 401 Unauthorized: the crawl is aborted immediately. Crawl returns a partial Summary and an error wrapping ErrUnauthorized. Map to exit 1.
- 403 / 404: a stub index.md is written; the crawl continues.
- Rate limited (429, retries exhausted): counted in Summary.Failed.
- Network/transport error: a stub is written; the crawl continues.
- Context cancellation: in-flight fetches complete; no new fetches start.
Skip-if-exists ¶
When cfg.Refetch is false (the default), issues whose index.md already exists on disk are skipped without making an API call. This makes repeated runs additive and fast.
Output destination ¶
Crawl output is delivered through an injectable output.Store. This facade constructs the default — an output.FSStore that writes the canonical <key>/index.md and references/outbound.md layout to cfg.OutputDir, honoring skip-if-exists vs. refetch — and passes it through to the crawl orchestrator. Alternative Store implementations can be injected at the crawl layer for callers that need to deliver crawl output somewhere other than the local filesystem.
Observability ¶
Crawl emits no log output. To enable the structured observability instrument (per-issue spans, per-phase wall-clock measurement, HTTP request lifecycle traces, and the end-of-run crawl.measurement summary line) use CrawlWithLogger instead.
func CrawlWithLogger ¶ added in v0.2.0
func CrawlWithLogger(ctx context.Context, cfg Config, startKeys []string, sink Sink, logger *slog.Logger) (Summary, error)
CrawlWithLogger is the observability-aware sibling of Crawl. Identical behavior, plus: the supplied logger is wired through BOTH the crawl orchestrator (per-issue spans, per-phase measurement, crawl.measurement summary line) AND the underlying client (HTTP request lifecycle tracing via internal/httplog). The two share run_id/span_id/ticket_id correlation so trace_stream=stream lines and trace_stream=response lines from one invocation can be joined.
A nil logger is equivalent to calling Crawl — no instrumentation is emitted and the on-disk behavior is unchanged. The signature is additive; existing callers of Crawl are unaffected.
See log.LevelTrace and log.ParseLevel for the level ladder, and internal/trace for the correlation attribute keys (AttrRunID, AttrTicketID, AttrSpanID, AttrParentSpanID, AttrPhase, AttrTraceStream).
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
gojira
command
Command gojira is the CLI binary for the gojira Jira-to-Markdown mirror tool.
|
Command gojira is the CLI binary for the gojira Jira-to-Markdown mirror tool. |
|
gojira-client
command
Command gojira-client is a tiny reference client for the gojira gRPC server, intended as a smoke / interoperability tool, not a production frontend.
|
Command gojira-client is a tiny reference client for the gojira gRPC server, intended as a smoke / interoperability tool, not a production frontend. |
|
gen
|
|
|
internal
|
|
|
adf
Package adf provides pure, stateless traversal and rendering of Atlassian Document Format (ADF) documents.
|
Package adf provides pure, stateless traversal and rendering of Atlassian Document Format (ADF) documents. |
|
buildinfo
Package buildinfo is the single source of truth for the gojira build identity (git revision and version ref).
|
Package buildinfo is the single source of truth for the gojira build identity (git revision and version ref). |
|
cli
Package cli implements the gojira command-line interface (subcommand wiring, flag definitions, the config cascade glue, the run orchestrator, signal handling, and exit-code mapping).
|
Package cli implements the gojira command-line interface (subcommand wiring, flag definitions, the config cascade glue, the run orchestrator, signal handling, and exit-code mapping). |
|
config
Package config validates and constructs the runtime configuration consumed by every other gojira package.
|
Package config validates and constructs the runtime configuration consumed by every other gojira package. |
|
crawl
Package crawl is the recursive crawl orchestrator for gojira.
|
Package crawl is the recursive crawl orchestrator for gojira. |
|
devstatus
Package devstatus enriches an already-fetched Jira issue with all the development metadata Jira's Dev Status API surfaces: pull requests, branches, commits, repositories, and builds.
|
Package devstatus enriches an already-fetched Jira issue with all the development metadata Jira's Dev Status API surfaces: pull requests, branches, commits, repositories, and builds. |
|
events
Package events defines the structured event sink interface used by every gojira package to report progress, warnings, errors, and partial-success states.
|
Package events defines the structured event sink interface used by every gojira package to report progress, warnings, errors, and partial-success states. |
|
extract
Package extract discovers all outbound references from a parsed Jira issue.
|
Package extract discovers all outbound references from a parsed Jira issue. |
|
fetch
Package fetch provides a thin adapter between the crawl orchestrator and the Jira Cloud HTTP client.
|
Package fetch provides a thin adapter between the crawl orchestrator and the Jira Cloud HTTP client. |
|
graph
Package graph is a pure in-memory model of the Jira issue graph discovered during a gojira crawl.
|
Package graph is a pure in-memory model of the Jira issue graph discovered during a gojira crawl. |
|
grpc
Package grpc provides the gRPC server implementation for gojira.
|
Package grpc provides the gRPC server implementation for gojira. |
|
hierarchy
Package hierarchy discovers Jira hierarchy children for an already-fetched issue via JQL search.
|
Package hierarchy discovers Jira hierarchy children for an already-fetched issue via JQL search. |
|
httplog
Package httplog wraps an http.RoundTripper to emit gojira's structured, correlatable, credential-redacted view of every HTTP request the client makes.
|
Package httplog wraps an http.RoundTripper to emit gojira's structured, correlatable, credential-redacted view of every HTTP request the client makes. |
|
mcp
Package mcp implements the gojira MCP server: a backend interface with two implementations (facade-backed "self" mode and gRPC-bridge "bridge" mode), a shared tool-registration layer that gates mutating tools behind allow_writes, and the stdio bootstrap the `gojira mcp` command consumes.
|
Package mcp implements the gojira MCP server: a backend interface with two implementations (facade-backed "self" mode and gRPC-bridge "bridge" mode), a shared tool-registration layer that gates mutating tools behind allow_writes, and the stdio bootstrap the `gojira mcp` command consumes. |
|
output
Package output is the filesystem writer for gojira.
|
Package output is the filesystem writer for gojira. |
|
parse
Package parse converts raw Jira Cloud REST API v3 issue JSON into a typed Issue value.
|
Package parse converts raw Jira Cloud REST API v3 issue JSON into a typed Issue value. |
|
render
Package render converts a parsed Jira issue into Markdown content.
|
Package render converts a parsed Jira issue into Markdown content. |
|
trace
Package trace provides the lightweight correlation primitives the gojira crawl uses to emit a reconstructable fan-out tree of log records.
|
Package trace provides the lightweight correlation primitives the gojira crawl uses to emit a reconstructable fan-out tree of log records. |
|
pkg
|
|
|
classify
Package classify provides pure, stateless classification of strings into one of four link kinds: a bare Jira issue key, a Jira issue URL, a GitHub pull request URL, or an unclassified external link.
|
Package classify provides pure, stateless classification of strings into one of four link kinds: a bare Jira issue key, a Jira issue URL, a GitHub pull request URL, or an unclassified external link. |
|
client
Package client implements the Jira Cloud HTTP transport for gojira.
|
Package client implements the Jira Cloud HTTP transport for gojira. |
|
log
Package log is gojira's small slog-compatible logging facade.
|
Package log is gojira's small slog-compatible logging facade. |